Programowanie w Octave

advertisement
Programowanie w Octave
Podstawy języka
Zmienne
Wyniki obliczeń można przypisywać do zmiennych. Nazwy zmiennych powinny zaczynać
się od liter (nie mogą zaczynać się od cyfr, mogą od niektórych innych znaków).
Przypisanie wyniku do zmiennej „a”:
octave3.2:1 > a=2+2
a=4
Wpisanie nazwy zmiennej spowoduje wyświetlenie jej wartości (mozna to potraktować
jak działanie 0-argumentowe o nazwie takiej, jak nazwa zmiennej). Nazwy zmiennych są
wrażliwe na wielkość liter – zmienna „a” to nie to samo co zmienna „A”.
octave3.2:4 > a
a=4
octave3.2:5 > A
error: ‘A’ undefined near line 5 column 1
W tej sytuacji Octave wyświetlił komunikat o błędzie.
Można też nadać zmiennej wartość wprost, aby potem użyć jej w obliczeniach.
octave3.2:2 > k=7
k=7
oc t ave 3.2:3 > k^2
ans = 49
ans też jest zmienną, tyle, że tworzoną automatycznie przez program.
Na niej również można wykonywać obliczenia, co bywa przydatne, zwłaszcza z użyciem
historii poleceń:
octave3.2:17 > 3
ans = 3
octave3.2:1 8 > ans^2
ans = 9
octave3.2:1 9 > ans^2
ans = 81
octave3.2:20 > ans^2
ans = 6561
Nazwy zmiennym można nadawać bardzo dowolnie. Można nawet nadać zmiennej nazwę
istniejącej funkcji:
octave3.2:5 > cos=7
cos = 7
octave3.2:6 > i =5
i=5
W takiej sytuacji, aby znów mieć mozliwość skorzystania z funkcji cos czy jednostki
urojonej, należy wyczyścić zmienne poleceniem clear:
octave3.2:9 > clear i cos
octave3.2:1 0 > i
ans=0+1 i
Zmienne do wyczyszczenia należy wpisywać po słowie clear, oddzielone spacjami. Aby
wyczyścić wszystkie zmienne, należy wpisać clear all.
Wydanie polecenia ze znakiem średnika na końcu spowoduje, że wynik nie zostanie
wyświetlony. Można też wydać kilka komend na raz, w jednej linii, oddzielonych
przecinkami (wynik widoczny) lub średnikami (wynik niewidoczny):
octave3.2:18 > a=2; b=a+2 , c=b*2 ;
b=4
octave3.2:19 > c
c=8
Polecenia
Oprócz wspomnianych exit i clear, Octave zawiera jeszcze kilka poleceń niedotyczących
bezpośrednio obliczeń. Są to m. in. quit (to samo, co exit), close – do zamykania okien z
wykresami (używa się tak samo, jak clear – „all” zamyka wszystkie), clc – czyści ekran
programu, who – wyświetla listę wszystkich zmiennych, whos – wyświetla szczegółową
listę wszystkich zmiennych, what – wyświetla listę plików .m w bieżącym katalogu, oraz
trzy dla nas najważniejsze: diary – uruchamia „pamiętnik”, format – zmiana sposobu
wyświetlania wyników i help – pomoc programu.
„Pamiętnik” to plik, w którym Octave zapisuje wszystko to, co widać w jego oknie –
zarówno polecenia, jak i odpowiedzi. Wpisanie diary on włącza, a diary off wyłącza
zapis. Domyślnie, plikiem pamiętnika jest plik diary w katalogu roboczym Octave’a.
Można też nakazać zapis w innym pliku, wpisując np. „diary pamietnik.txt”. Należy
pamiętać, że plik pamiętnika jest zapisywany na dysku dopiero w momencie wydania
polecenia o zakończeniu zapisu (lub zamknięciu programu), oraz że przy ponownym
włączeniu zapisu w tym samym pliku, nowa zawartość zostanie zapisana na końcu starej.
W przypadku rozwiązywania zadań z algebry liniowej przydatne bywa, aby wyniki były
przybliżane za pomocą liczb wymiernych. W tym celu należy wydać komendę „format
rat”. Innym przydatnym formatem jest format optymalnie dopasowujący wyświetlanie
każdej liczby z osobna: „ format short g”. Dla macierzy liczb zespolonych przydatny
może być także „ format free” wyświetlający liczby w postaci par (x, y), gdzie z = x+i·y.
Wpisanie samego polecenia format powoduje powrót do domyślnego formatowania
wyników:
octave3.2:3 > pi
ans = 3.1416
octave 3.2:4 > format rat
octave3.2:5 > pi
ans = 355/113
octave3.2:6 > format
octave3.2:7 > pi
ans = 3.1416
Więcej informacji na temat polecenia format znajduje się w pomocy. Wykonanie
polecenia help powoduje wyświetlenie ogólnego tekstu pomocy, „help komenda”
wyświetla natomiast pomoc do danej komendy, czyli np. help format wyświetli opis
wszystkich możliwych formatów. Zazwyczaj w pomocy do danej komendy wymienione są
polecenia o podobnym działaniu, albo działające odwrotnie. Aby zamknąć pomoc (jak
równiez zmienne niemieszczące się na ekranie oraz okna wykresów), należy nacisnąć
przycisk „Q” na klawiaturze.
Aby wykonać wybrane polecenie lub działanie, należy wpisać odpowiednią komendę i nacisnąć
ENTER. Polecenia są zapamiętywane – wciśnięcie strzałki w górę na klawiaturze powoduje
pokazanie ostatnio wpisanego polecenia, strzałkami góra/dół można przeglądać całą zapisaną historię
poleceń. Wpisanie ciągu znaków i naciśnięcie strzałki w górę spowoduje przeglądanie tylko tych
zapamiętanych komend, które zaczynały się od tego wpisanego ciągu znaków, np. wpisanie „ex” i
naciśnięcie strzałki w górę pokaże tylko komendy zaczynające się od „ex”, np. exit i exp(2). Octave
obsługuje też autouzupełnianie poleceń. Wpisanie „ex” i dwukrotne naciśnięcie klawisza TAB
wyświetli listę wszystkich poleceń zaczynających się od „ex”. Jeśli wpisany zostanie taki ciąg
znaków, który jest prefiksem tylko jednego polecenia, to autouzupełnianie po prostu uzupełni tę
nazwę.
Polecenia systemowe
Kilka poleceń służy do porozumienia się z systemem operacyjnym. pwd pokazuje katalog
roboczy Octave’a, czyli katalog, w którym będzie on szukał plików (przede wszystkim
skryptów i funkcji użytkownika), ls pokazuje zawartość tego folderu, a cd pozwala
zmienić katalog roboczy na inny. Takie same polecenia funkcjonują w systemach
linuksowych. Działanie poleceń widoczne jest w poniższym przykładzie.
octave3.2:39 > pwd
ans = /home/q
octave3.2:40 > ls
apro.m document.tex man .m
octave
czasy.m Dokumenty
mojaFunkcja.m obrazki .m
diary
Lab12.Pdf
Obrazy
Pulpit
diary.txt
octave3.2:41 > cd Dokumenty
octave3.2:42 > pwd
ans = /home/q/Dokumenty
octave3.2:43 > cd . .
octave3.2:44 > pwd
ans = /home/q
Tablice
GNU Octave daj dużą swobodę jeżeli chodzi o operowanie na wektorach i macierzach. Do
ich reprezentacji służy podstawowa w tym programie struktura danych czyli tablica.
Najprostszym sposobem utworzenia nowego wektora jest wymienienie wszystkich jego
elementów
octave:5> v1 = [1,0,0]
v1 =1 0 0
Otrzymujemy w ten sposób wektor wierszowy
v1 = [1, 0, 0]
Aby otrzymać wektor kolumnowy
1
0
0
konieczne jest wykonanie operacji transponowania. Jest ona reprezentowana za pomocą apostrofu ’.
octave:6> v1’
ans =
1
0
0
Podobnie możemy zdefiniować nową macierz oddzielając kolejne wiersze średnikami.
octave:7> Id = [1,0,0;0,1,0;0,0,1]
Id =
1 0 0
0 1 0
0 0 1
Niektóre macierze mogą być zbudowane poprzez wywołanie funkcji GNU Octave. Przykładem
są macierze złożone z samych zer lub z samych jedynek. Aby uzyskać macierz o wymiarach 3
na 3 wypełnioną zerami wystarczy napisać
octave:8> zeros(3,3)
ans =
000
000
000
Analogicznie funkcja ones wypełnia macierz o zadanych rozmiarach jedynkami. Funkcje ta są
przydatna w sytuacji gdy chcemy najpierw zbudować macierz o zadanym kształcie, którą w
kolejnych krokach wypełniamy w określony sposób.
Instrukcja warunkowa if
Instrukcja warunkowa if pozwala na wykonanie bloku kodu jeżeli spełniony zostanie zadany
warunek. Konstrukcja ta ma składnię przypominającą składnię języka programowania C. W
poniższym przykładzie wybierany jest jeden z dwóch warunków (x > 5 bądź x ≤5).
octave:1> x = pow2 (2);
octave:2> if (x > 5)
> x = x - 10;
> else
> x = x + 10;
> endif
Znaki > oznaczają tu kontynuację wpisywanej komendy po naciśnięciu klawisze ENTER .
Pogram sygnalizuje w ten sposób oczekiwanie na zakończenie rozpoczętej konstrukcji,
takiej jak instrukcja if, bądź zamknięcie nawiasów. Jeżeli chcemy rozróżnić pomiędzy
większą ilością możliwości, to możemy zastosować konstrukcję if-elseif tak jak w
poniższym przykładzie
octave:3> x = pow2 (4);
octave:4> y = sin (pow2(10));
octave:5> if (y > 0 )
> y = pow2(sin(5))
> elseif (y < 0 && x < 10)
> y = cos(5)
> endif
Komenda endif oznacza zamknięcie konstrukcji.
Instrukcja switch
Drugim sposobem warunkowego wykonywania komend jest instrukcja switch. Pozwala
ona na wyszczególnienie co ma być wykonane w zależności od tego do jakiego zbioru
należy zmienna. W poniższym przykładzie zmienna test ma wartość 2, wykonane zostanie
przypisanie x = 0.
octave:29> test = 2
octave:30> switch test
> case { 1 2 3 7 8 9 }
>x=0
> case { 4 5 6 }
>x=1
> otherwise
> x = -1
> endswitch
Pętla for
Do poruszania się po tablicach służy pętla for. Do wypisania kwadratów liczb od 1 do 10
służy polecenie
octave:1> for i=1:10
> i^2
> endfor
znaki > oznaczają, iż program czeka na wprowadzenie komendy endfor, który oznacza
zamknięcie pętli for.
Pętla while
Jeżeli chcemy wykonywać jakiś zestaw poleceń tylko dla danych spełniających określony
warunek,
octave:25> i=1
i=1
octave:26> while (i^2<1000)
> i^2
> i=i+1
> endwhile
Funkcje
W Octavie, podobnie jak w innych językach programowania jest możliwość definiowania swoich
własnych funkcji. Własne funkcje piszemy gdy chcemy aby program składał się z bloków
funkcjonalnych o ściśle określonym działaniu, co czyni program lepiej zrozumiałym i jest
szczególnie zalecane w przypadku długich programów. Dodatkowo raz zapisana funkcja w
zewnętrznym pliku funkcyjnym może być wielokrotnie wywoływana przez różne programy. Zmienne
występujące w funkcjach mają charakter lokalny. Oznacza to że zmienne występujące w danej funkcji
nie będą widziane w innej funkcji. Komunikacja pomiędzy funkcją, a programem ją wywołującym
odbywa się poprzez parametry_wejscia i parametry_wyjscia (parametry formalne). Funkcja może być
wywoływana przez inne funkcje. Funkcję zapisujemy w plikach tekstowych o nazwie
nazwa_funkcji.m. Definicja funkcji posiada następującą strukturę:
function parametry_wyjscia = nazwa_funkcji(parametry_wejscia)
instrukcje;
.
.
.
endfunction
Przykłady
Funkcja obliczająca sumę dwóch liczb:
% Funkcja suma_liczb wyznacza sume dwóch liczb ’a + b’
function wynik = suma_liczb(a,b)
wynik = a + b;
endfunction
Następnie w środowisku Octave zdefiniuj zmienne a, b i wywołaj funkcję suma_liczb:
octave:1> a=1
a=1
octave:2> b=2
b=2
octave:3> suma_liczb(a,b)
ans = 3
W linii nr 3 następuje wywołanie funkcji suma_liczb, jako parametry przekazujemy dwie zmienne, których suma ma zostać
policzona, jako parametry można podać również konkretne liczby np. suma_liczb(3, 4).
Funkcja obliczająca wartość n!:
% Funkcja silnia wyznacza watość n!
function [wynik]= silnia(n)
wynik=1;
for i=1:n
wynik=wynik*i;
end
endfunction
Następnie w środowisku Octave wywołaj funkcję silnia z różnymi wartościami:
octave:2> silnia(2)
ans = 2
octave:3> silnia(4)
ans = 24
octave:4> silnia(5)
ans = 120
Dodatkowe pakiety w Octave
Pakiet przed użyciem trzeba :
1. zainstalować
2. załadować
Instalacja
Najpierw ściągamy z http://octave.sourceforge.net/packages.php plik z pakietem.
Zapisujemy go w katalogu roboczym.
Instalujemy poleceniam :
pkg install package_file_name.tar.gz
Pakiet jest kopiowany do odpowiedniego katalogu.
Ładowanie
Ładowanie zainstalowanych pakietów :
pkg load package_name
Sprawdzanie
Lista zainstalowanych pakietów uzyskamy za pomocą pkg list
Przykładowe pakiety:
Pakiet bim
Pakiet do rozwiązywania równań
różniczkowych cząstkowych.
Pakiet communications
Komunikacja cyfrowa, korekta błędów w
kodzie (kod kanału), funkcje kodu
źródłowego, modulacja oraz ciało
skończone.
Pakiet Control
Komputerowe wspomaganie Control
System Design (CACSD) Narzędzia
GNU Octave, oparte na sprawdzonej
Bibliotece SLICOT.
Pakiet database
Interfejs do baz danych SQL, obecnie
tylko przy użyciu postgreSQL libpq.
Pakiet dicom
Komunikacja cyfrowa w medycynie
(DICOM) plików Wyjścia/Wejścia.
Pakiet general
Ogólne narzędzia do Octave.
Pakiet financial
Symulacja Monte Carlo, opcje cenowe
rutyny, manipulacje finansowe, funkcje
kreślenia.
Wykonali:
Ambroziak Robert, Bartkowski Radosław, Gałus Michał,
Popławski Konrad, Telakowiec Robert, Zychowicz Sebastian
KONIEC
Dziękujemy za uwagę.
Download