Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska
Wprowadzenie do Octave’a
Jakub Kierzkowski
Wprowadzenie do Octave’a
Jakub Kierzkowski J.Kierzkowski@mini.pw.edu.pl
Wst˛ep
Octave jest wolnym i darmowym ´srodowiskiem do oblicze ´n numerycznych (i ró ˙znych innych oblicze ´n matema- tycznych i in ˙zynierskich) oraz j˛ezykiem do obsługi tego ´srodowiska. J˛ezyk ten jest intuicyjny i przyjazny (dla mate- matyków). Octave jest odpowiednikiem komercyjnego (płatnego, drogiego) ´srodowiska Matlab. J˛ezyk Matlab i j˛ezyk Octave to wła´sciwie ten sam j˛ezyk, tyle, ˙ze w dwóch odmianach. Niektóre zaawansowane funkcje Matlaba nie istniej ˛a w Octave’ie, a niektóre proste, podstawowe funkcje Octave’a nie wyst˛epuj ˛a w Matlabie. W zastosowaniach studenc- kich, gdzie nie jest tak istotna szybko´s´c działania, budowanie interfejsów graficznych czy generowanie animacji 3D, bardziej odpowiedni jest Octave – zarówno j˛ezyk (wi˛ecej interesuj ˛acych polece ´n), jak i sam program (darmowy). Oba
´srodowiska mo ˙zna zainstalowa´c i na systemach linuksowych, i na Windowsach, i na MAC OS.
1 Kwestie techniczne
1.1 Instalacja Octave’a
Najnowsz ˛a dost˛epn ˛a w tej chwili wersj ˛a Octave’a jest wersja 3.6.2. Nale ˙zy zainstalowa´c najnowsz ˛a dost˛epn ˛a wersj˛e, jednak program zaj˛e´c Algebry Liniowej z Geometri ˛a Analityczn ˛a II wymaga tak małego wycinka funkcjonalno´sci Octave’a, ˙ze dowolna inna, w miar˛e nowa wersja pakietu (od 3.0.0 wzwy ˙z) powinna działa´c tak samo. U ˙zytkowni- cy systemów linuksowych instaluj ˛a Octave i wszystkie dost˛epne do niego pakiety funkcji mechanizmem instalacji programów wła´sciwym dla swojego systemu. U ˙zytkownicy systemów Windows i MAC OS informacje o ´sci ˛agni˛eciu Octave’a znajd ˛a na stronie http://octave.sourceforge.net/.
Przy instalacji nale ˙zy wybra´c instalacj˛e wszystkich pakietów, poza „oct2mat”. Osoby, które zainstalowały ten pa- kiet i do´swiadczaj ˛a problemów z wy´swietlaniem grafiki (zagadnienia z ko ´nca semestru), mog ˛a wył ˛aczy´c ten pakiet poleceniem pkg unload oct2mat.
Dodatkowo, mo ˙zna zainstalowa´c program OctaveDE, QtOctave, QOcTerm, GUIOctave, lub podobny (nie trzeba tego robi´c, mo ˙zna zrobi´c pó´zniej). S ˛a to programy dodaj ˛ace do Octave’a interfejs graficzny na wzór tego z Matlaba.
1.2 Uruchomienie i wył ˛aczenie Octave’a
Program uruchamia si˛e z Menu Start w Windowsach (obecny pod pełn ˛a nazw ˛a GNU Octave), a w Linuksach z pozio- mu analogicznego menu lub w terminalu poprzez wpisanie nazwy (nazwa zale ˙zna jest od dystrybucji, np. mo ˙ze to by´c „octave3.6”, albo „octave-3.6.2”). Octave działa w trybie tekstowym - nie obsługuje si˛e go mysz ˛a, a tylko klawia- tur ˛a. Mysz ˛a mo ˙zna jedynie zaznaczy´c wy´swietlony tekst. Octave nie posiada zdefinowanych skrótów klawiszowych.
Cała komunikacja z programem odbywa si˛e poprzez wpisywanie polece ´n.
Aby zamkn ˛a´c program nale ˙zy wpisa´c polecenie exit i nacisn ˛a´c ENTER.
1.3 Instalacja edytora
Do tworzenia własnych funkcji potrzebny mo ˙ze by´c edytor tekstu koloruj ˛acy słowa kluczowe (nazwy funkcji). W sys- temach linuksowych umiej˛etno´s´c t˛e posiada chyba ka ˙zdy edytor dla programistów, np. Geany, Gedit. W Windowsach s ˛a to m. in. Notepad++ czy Geany.
2 Podstawy j˛ezyka
2.1 Kalkulator
W pierwszej kolejno´sci Octave mo ˙ze by´c traktowany jak kalkulator – rozbudowany kalkulator naukowy. Mo ˙zna wi˛ec dodawa´c (+), odejmowa´c (-), mno ˙zy´c (*), dzieli´c (dzielenie prawe / i lewe \), pot˛egowa´c (^), wyci ˛aga´c pier- wiastki kwadratowe (sqrt(x)), oblicza´c warto´sci funkcji wykładniczej (exp(x) lub e^x), trygonometrycznych, hiperbolicznych i wielu, wielu innych, w ciele liczb rzeczywistych i zespolonych, jak równie ˙z np. operacji modulo (mod(p,q)) i reszty z dzielenia (rem(p,q)) dla liczb całkowitych.
Przykłady:
o c t a v e 3 . 2 : 1 > 2+2 ans = 4
o c t a v e 3 . 2 : 1 0 > 2^3 ans = 8
o c t a v e 3 . 2 : 1 1 > s q r t ( 9 ) ans = 3
o c t a v e 3 . 2 : 1 2 > 1/2 ans = 0 . 5 0 0 0 0 o c t a v e 3 . 2 : 1 3 > 10\20 ans = 2
o c t a v e 3 . 2 : 1 7 > s i n ( pi /2) ans = 1
o c t a v e 3 . 2 : 1 8 > exp ( j * pi /2) ans = 6 . 1 2 3 0 e−17 + 1 . 0 0 0 0 e +00 i
ansoznacza odpowied´z („answer”). Ostatni przykład pokazuje niedokładno´s´c oblicze ´n numerycznych. W przykła- dzie tym, zarówno „i” jak i „ j ” oznaczaj ˛a jednostk˛e urojon ˛a. Nale ˙zy zauwa ˙zy´c te ˙z, ˙ze cz˛e´s´c całkowita oddzielona jest od ułamkowej nie przecinkiem, a kropk ˛a.
2.2 Zmienne
Wyniki oblicze ´n mo ˙zna przypisywa´c do zmiennych. Nazwy zmiennych powinny zaczyna´c si˛e od liter (nie mog ˛a zaczyna´c si˛e od cyfr, mog ˛a od niektórych innych znaków). Przypisanie wyniku do zmiennej „a”:
o c t a v e 3 . 2 : 1 > a=2+2
a = 4
Wpisanie nazwy zmiennej spowoduje wy´swietlenie jej warto´sci (mo ˙zna to potraktowa´c jak działanie 0-argumentowe o nazwie takiej, jak nazwa zmiennej). Nazwy zmiennych s ˛a wra ˙zliwe na wielko´s´c liter – zmienna „a” to nie to samo co zmienna „A”.
o c t a v e 3 . 2 : 4 > a
a = 4
o c t a v e 3 . 2 : 5 > A
e r r o r: ‘A’ undefined near l i n e 5 column 1
W tej sytuacji Octave wy´swietlił komunikat o bł˛edzie.
Mo ˙zna te ˙z nada´c zmiennej warto´s´c wprost, aby potem u ˙zy´c jej w obliczeniach.
o c t a v e 3 . 2 : 2 > k=7
k = 7
o c t a v e 3 . 2 : 3 > k^2 ans = 49
anste ˙z jest zmienn ˛a, tyle, ˙ze tworzon ˛a automatycznie przez program. Na niej równie ˙z mo ˙zna wykonywa´c obliczenia, co bywa przydatne, zwłaszcza z u ˙zyciem historii polece ´n:
o c t a v e 3 . 2 : 1 7 > 3
ans = 3
o c t a v e 3 . 2 : 1 8 > ans^2
ans = 9
o c t a v e 3 . 2 : 1 9 > ans^2
ans = 81
o c t a v e 3 . 2 : 2 0 > ans^2
ans = 6561
Nazwy zmiennym mo ˙zna nadawa´c bardzo dowolnie. Mo ˙zna nawet nada´c zmiennej nazw˛e istniej ˛acej funkcji:
o c t a v e 3 . 2 : 5 > cos =7 cos = 7
o c t a v e 3 . 2 : 6 > i =5 i = 5
W takiej sytuacji, aby znów mie´c mo ˙zliwo´s´c skorzystania z funkcji cos czy jednostki urojonej, nale ˙zy wyczy´sci´c zmienne poleceniem clear:
o c t a v e 3 . 2 : 9 > c l e a r i cos o c t a v e 3 . 2 : 1 0 > i
ans = 0 + 1 i
Zmienne do wyczyszczenia nale ˙zy wpisywa´c po słowie clear, oddzielone spacjami. Aby wyczy´sci´c wszystkie zmien- ne, nale ˙zy wpisa´c clear all.
Wydanie polecenia ze znakiem ´srednika na ko ´ncu spowoduje, ˙ze wynik nie zostanie wy´swietlony. Mo ˙zna te ˙z wyda´c kilka komend na raz, w jednej linii, oddzielonych przecinkami (wynik widoczny) lub ´srednikami (wynik niewidocz- ny):
o c t a v e 3 . 2 : 1 8 > a = 2 ; b=a +2 , c=b * 2 ;
b = 4
o c t a v e 3 . 2 : 1 9 > c
c = 8
2.3 Polecenia
Oprócz wspomnianych exit i clear, Octave zawiera jeszcze kilka polece ´n niedotycz ˛acych bezpo´srednio oblicze ´n. S ˛a to m. in. quit (to samo, co exit), close – do zamykania okien z wykresami (u ˙zywa si˛e tak samo, jak clear – „all”
zamyka wszystkie), clc – czy´sci ekran programu, who – wy´swietla list˛e wszystkich zmiennych, whos – wy´swietla szczegółow ˛a list˛e wszystkich zmiennych, oraz trzy najwa ˙zniejsze: diary – uruchamia „pami˛etnik”, format – zmiana sposobu wy´swietlania wyników i help – pomoc programu.
„Pami˛etnik” to plik, w którym Octave zapisuje wszystko to, co wida´c w jego oknie – zarówno polecenia, jak i odpo- wiedzi. Wpisanie diary on wł ˛acza, a diary off wył ˛acza zapis. Domy´slnie, plikiem pami˛etnika jest plik diary w ka- talogu roboczym Octave’a. Mo ˙zna te ˙z nakaza´c zapis w innym pliku, wpisuj ˛ac np. „diary pamietnik.txt”. Nale ˙zy pa- mi˛eta´c, ˙ze plik pami˛etnika jest zapisywany na dysku dopiero w momencie wydania polecenia o zako ´nczeniu zapisu, oraz ˙ze przy ponownym wł ˛aczeniu zapisu w tym samym pliku, stara zawarto´s´c zostanie skasowana.
W przypadku rozwi ˛azywania zada ´n z algebry liniowej przydatne bywa, aby wyniki były przybli ˙zane za pomo- c ˛a liczb wymiernych. W tym celu nale ˙zy wyda´c komend˛e „format rat”. Innym przydatnym formatem jest format optymalnie dopasowuj ˛acy wy´swietlanie ka ˙zdej liczby z osobna: „format short g”. Dla macierzy liczb zespolonych przydatny mo ˙ze by´c tak ˙ze „format free” wy´swietlaj ˛acy liczby w postaci par (x, y), gdzie z = x + i · y. Wpisanie samego polecenia format powoduje powrót do domy´slnego formatowania wyników:
o c t a v e 3 . 2 : 3 > pi ans = 3 . 1 4 1 6
o c t a v e 3 . 2 : 4 > format r a t o c t a v e 3 . 2 : 5 > pi
ans = 355/113
o c t a v e 3 . 2 : 6 > format o c t a v e 3 . 2 : 7 > pi ans = 3 . 1 4 1 6
Wi˛ecej informacji na temat polecenia format znajduje si˛e w pomocy. Wykonanie polecenia help powoduje wy´swietle- nie ogólnego tekstu pomocy, „help komenda” wy´swietla natomiast pomoc do danej komendy, czyli np. help format wy´swietli opis wszystkich mo ˙zliwych formatów. Zazwyczaj w pomocy do danej komendy wymienione s ˛a polecenia o podobnym działaniu, albo działaj ˛ace odwrotnie. Aby zamkn ˛a´c pomoc (jak równie ˙z zmienne niemieszcz ˛ace si˛e na ekranie oraz okna wykresów), nale ˙zy nacisn ˛a´c przycisk „Q” na klawiaturze.
Aby wykona´c wybrane polecenie lub działanie, nale ˙zy wpisa´c odpowiedni ˛a komend˛e i nacisn ˛a´c ENTER. Polecenia s ˛a zapami˛etywane – wci´sni˛ecie strzałki w gór˛e na klawiaturze powoduje pokazanie ostatnio wpisanego polecenia, strzałkami góra/dół mo ˙zna przegl ˛ada´c cał ˛a zapisan ˛a histori˛e polece ´n. Wpisanie ci ˛agu znaków i naci´sni˛ecie strzałki w gór˛e spowoduje przegl ˛adanie tylko tych zapami˛etanych komend, które zaczynały si˛e od tego wpisanego ci ˛agu zna- ków, np. wpisanie „ex” i naci´sni˛ecie strzałki w gór˛e poka ˙ze tylko komendy zaczynaj ˛ace si˛e od „ex”, np. exit i exp(2).
Octave obsługuje te ˙z autouzupełnianie polece ´n. Wpisanie „ex” i dwukrotne naci´sni˛ecie klawisza TAB wy´swietli list˛e wszystkich polece ´n zaczynaj ˛acych si˛e od „ex”. Je´sli wpisany zostanie taki ci ˛ag znaków, który jest prefiksem tylko jednego polecenia, to autouzupełnianie po prostu uzupełni t˛e nazw˛e.
2.3.1 Polecenia systemowe
Kilka polece ´n słu ˙zy do porozumienia si˛e z systemem operacyjnym. pwd pokazuje katalog roboczy Octave’a, czyli ka- talog, w którym b˛edzie on szukał plików (przede wszystkim skryptów i funkcji u ˙zytkownika, o czym mowa w cz˛e´sci 3, str. 12), ls pokazuje zawarto´s´c tego folderu, a cd pozwala zmieni´c katalog roboczy na inny. Takie same polecenia funkcjonuj ˛a w systemach linuksowych. Działanie polece ´n widoczne jest w poni ˙zszym przykładzie.
o c t a v e 3 . 2 : 3 9 > pwd ans = /home/q o c t a v e 3 . 2 : 4 0 > l s
apro .m document . t e x man .m o c t a v e
czasy .m Dokumenty mojaFunkcja .m o b r a z k i .m
d i a r y Lab12 . pdf Obrazy P u l p i t
d i a r y. t x t
o c t a v e 3 . 2 : 4 1 > what
M− f i l e s i n d i r e c t o r y /home/q :
apro .m czasy .m man .m mojaFunkcja .m o b r a z k i .m
o c t a v e 3 . 2 : 4 2 > cd Dokumenty o c t a v e 3 . 2 : 4 3 > pwd
ans = /home/q/Dokumenty o c t a v e 3 . 2 : 4 4 > cd . . o c t a v e 3 . 2 : 4 5 > pwd ans = /home/q
2.4 Macierze
Wi˛ekszo´s´c zmiennych w Octave’ie to macierze. Nawet liczby s ˛a traktowane jak macierze 1 × 1.
2.4.1 Tworzenie
Wprowadzanie macierzy zaczyna si˛e i ko ´nczy nawiasem kwadratowym. Nale ˙zy podawa´c wyrazy wierszami – ko- lejne wyrazy oddzielane spacj ˛a lub przecinkiem (dowolnie), a wiersze oddzielane ´srednikiem, np.:
o c t a v e 3 . 2 : 2 5 > a =[0 2 0 0 ; 1 0 1 0 ; 0 1 0 1 ; 0 0 2 0 ] a =
0 2 0 0
1 0 1 0
0 1 0 1
0 0 2 0
Ka ˙zdy wiersz musi mie´c tyle samo elementów, w przeciwnym razie pojawi si˛e komunikat o bł˛edzie.
Istniej ˛a te ˙z macierze, które tworzymy funkcj ˛a: zeros(n) tworzy macierz zerow ˛a n × n,
a zeros(m,n) macierz zerow ˛a m × n. Podobnie wywoływana jest funkcja ones – tworzy ona macierz z samymi jedyn- kami (nie jednostkow ˛a!). Macierz jednostkowa to eye, z tym zastrze ˙zeniem, ˙ze je´sli wywołana b˛edzie przez eye(m,n), gdzie m 6= n, to wi˛ekszy wymiar uzupełniony b˛edzie zerami:
o c t a v e 3 . 2 : 2 4 > eye ( 2 , 3 ) ans =
Diagonal Matrix
1 0 0
0 1 0
Innymi wbudowanymi macierzami s ˛a: pascal – macierz Pascala, hilb – macierz Hilberta, invhilb – odwrotno´s´c ma- cierzy Hilberta, itp. Opisy tych macierzy i dalsze przykłady w pomocy programu.
Elementem macierzy mo ˙ze by´c inna macierz – je´sli tylko odpowiednio dobrane b˛ed ˛a wymiary macierzy, to umo ˙zli- wia to tworzenie macierzy blokowych. W przypadku dwóch macierzy:
o c t a v e 3 . 2 : 5 4 > a= p a s c a l ( 3 ) a =
1 1 1
1 2 3
1 3 6
o c t a v e 3 . 2 : 5 5 > b=i n v h i l b ( 3 ) b =
9 −36 30
−36 192 −180
30 −180 180
o c t a v e 3 . 2 : 5 6 > [ a , b ] ans =
1 1 1 9 −36 30
1 2 3 −36 192 −180
1 3 6 30 −180 180
o c t a v e 3 . 2 : 5 7 > [ a ; b ] ans =
1 1 1
1 2 3
1 3 6
9 −36 30
−36 192 −180
30 −180 180
W przypadku wi˛ekszej liczby macierzy, te ˙z jest to mo ˙zliwe:
o c t a v e 3 . 2 : 5 9 > a =[1 1 ] ; b = 2 ; c =[3 3 ; 3 3 ] ; d = [ 4 ; 4 ] ; o c t a v e 3 . 2 : 6 0 > [ a b ; c d ]
ans =
1 1 2
3 3 4
3 3 4
2.4.2 Wektory
Wa ˙znym i specyficznym dla j˛ezyka Matlab/Octave elementem jest tzw. „notacja dwukropkowa”. Jej pierwsze zasto- sowanie to tworzenie wektora kolejnych liczb całkowitych:
o c t a v e 3 . 2 : 4 5 > 1 : 5 ans =
1 2 3 4 5
Dwukropek oznacza tu „wszystkie kolejne” od jednego ko ´nca do drugiego. To jednak nie wszystko: zamiast kolej- nych liczb, mo ˙zna wzi ˛a´c np. co trzeci ˛a:
o c t a v e 3 . 2 : 4 7 > 1 : 3 : 1 0 ans =
1 4 7 10
Działa to nie tylko dla liczb całkowitych:
o c t a v e 3 . 2 : 5 2 > 0 . 2 : ( − 0 . 1 5 ) : ( − 0 . 4 ) ans =
0 . 2 0 . 0 5 −0.1 −0.25 −0.4
2.4.3 Odwołania do elementów macierzy
Wiersze i kolumny macierzy numerowane s ˛a „po ludzku”, a nie „po maszynowemu”, tzn od 1. Aby otrzyma´c ele- ment macierzy A z wiersza numer i i kolumny j, nale ˙zy wpisa´c a( i , j ), koniecznie w nawiasie okr ˛agłym.
o c t a v e 3 . 2 : 4 1 > a =[1 2 3 ; 4 5 6 ; 7 8 9 ] a =
1 2 3
4 5 6
7 8 9
o c t a v e 3 . 2 : 4 2 > a ( 1 , 1 )
ans = 1
o c t a v e 3 . 2 : 4 3 > a ( 3 , 3 )
ans = 9
o c t a v e 3 . 2 : 4 4 > a ( 2 , 3 )
ans = 6
Odwoływa´c si˛e mo ˙zna nie tylko do pojedynczych elementów, ale te ˙z wybiera´c podmacierze. Sposób pierwszy, naj- prostszy:
o c t a v e 3 . 2 : 6 2 > a =[1 2 3 ; 4 5 6 ; 7 8 9 ] a =
1 2 3
4 5 6
7 8 9
o c t a v e 3 . 2 : 6 3 > a ( [ 1 , 3 ] , 2 ) ans =
2 8
Do funkcji zostały podane dwa argumenty, ale pierwszy jest wektorem – wektorem zawieraj ˛acym numery wierszy, które chcemy wyłuska´c. Znaj ˛ac tworzenie wektorów za pomoc ˛a notacji dwukropkowej, mo ˙zemy łatwo uzyskiwa´c podmacierze b˛ed ˛ace blokami:
o c t a v e 3 . 2 : 6 4 > a ( 1 : 3 , 1 : 2 ) ans =
1 2
4 5
7 8
Notacja ta ma jednak jeszcze jedno zastosowanie: u ˙zycie dwukropka zamiast numerów współrz˛ednych, wybierze wszystkie współrz˛edne:
o c t a v e 3 . 2 : 6 5 > a ( : , 1 : 2 ) ans =
1 2
4 5
7 8
Czyli osi ˛agn ˛a´c taki sam rezultat szybsz ˛a, ni ˙z poprzednia, metod ˛a.
Zamiast liczy´c lub sprawdza´c ile wierszy lub kolumn ma macierz, mo ˙zna wykorzysta´c automatycznie powstaj ˛ac ˛a zmienn ˛a end, oznaczaj ˛ac ˛a ostatni ˛a współrz˛edn ˛a:
o c t a v e 3 . 2 : 6 6 > a ( end , 2 : end ) ans =
8 9
W wywołaniu dla wektorów jest jeden argument:
o c t a v e 3 . 2 : 9 2 > a = 5 : 9 a =
5 6 7 8 9
o c t a v e 3 . 2 : 9 3 > a ( [ 2 , 4 ] ) ans =
6 8
2.4.4 Działania na macierzach
Na macierzach mo ˙zna wykonywa´c, w taki sam sposób, jak na skalarach, dodawanie, odejmowanie i mno ˙zenie ma- cierzowe. Prawe i lewe dzielenie oznacza tu natomiast mno ˙zenie z prawej i lewej strony przez odwrotno´s´c, tzn.
A\B = A−1· B i B/A = B · A−1. Specyficznymi działaniami s ˛a transpozycja i sprz˛e ˙zenie, za które odpowiada symbol pojedynczego cudzysłowu, ewentualnie poprzedzonego kropk ˛a. Działanie wyja´sni ˛a przykłady.
Je´sli zmienna jest liczb ˛a zespolon ˛a, to operator cudzysłowu jest sprz˛e ˙zeniem liczby.
o c t a v e 3 . 2 : 8 4 > a=2+ i a = 2 + 1 i
o c t a v e 3 . 2 : 8 5 > a ’ ans = 2 − 1 i
Je´sli zmienna jest macierz ˛a zespolon ˛a, to cudzysłów jest operacj ˛a sprz˛e ˙zenia hermitowskiego. Transpozycj ˛a jest wzi˛e- cie operatora „.’ ” – kropka i cudzysłów.
o c t a v e 3 . 2 : 8 6 > b =[ i ; 1− i ] b =
0 + 1 i 1 − 1 i
o c t a v e 3 . 2 : 8 7 > b ’ ans =
0 − 1 i 1 + 1 i o c t a v e 3 . 2 : 8 8 > b . ’ ans =
0 + 1 i 1 − 1 i
Je ˙zeli zmienna jest macierz ˛a rzeczywist ˛a, to cudzysłów jest operacj ˛a transpozycji.
o c t a v e 3 . 2 : 8 9 > c = [ 1 ; 2 ] c =
1 2
o c t a v e 3 . 2 : 9 0 > c ’ ans =
1 2
Octave posiada bardzo wiele funkcji operuj ˛acych na macierzach. najwa ˙zniejsze z nich to: det(a) – wyznacznik macie- rzy a, eig(a) – multizbiór warto´sci własnych, trace (a) – ´slad macierzy, diag(a) – wyłuskiwanie/ustawianie przek ˛atnej:
o c t a v e 3 . 2 : 9 8 > a= p a s c a l ( 3 ) a =
1 1 1
1 2 3
1 3 6
o c t a v e 3 . 2 : 9 9 > b=diag ( a ) b =
1 2 6
o c t a v e 3 . 2 : 1 0 0 > c=diag ( b ) c =
Diagonal Matrix
1 0 0
0 2 0
0 0 6
oraz size:
o c t a v e 3 . 2 : 1 0 0 > [ b , c ]= s i z e ( a )
b = 3
c = 3
2.4.5 „Nadmacierze”
Wiadomo ju ˙z jak otrzyma´c podmacierz. Wiadomo jak zrobi´c macierze blokowe. Ale jest jeszcze jeden droga opero- wania na rozmiarach macierzy. Mo ˙zna powi˛eksza´c istniej ˛ace macierze. Np. mo ˙zna z macierzy 2 × 2 zrobi´c macierz 3 × 4:
o c t a v e 3 . 2 : 1 > a =[2 1 ; 1 2 ] a =
2 1
1 2
o c t a v e 3 . 2 : 2 > a ( 3 , 4 ) = 0 a =
2 1 0 0
1 2 0 0
0 0 0 0
Jest to przydatne zwłaszcza dla wektorów:
o c t a v e 3 . 2 : 3 > b =[2 1 1 2 ] b =
2 1 1 2
o c t a v e 3 . 2 : 4 > b ( 5 ) = 3 b =
2 1 1 2 3
o c t a v e 3 . 2 : 5 > b ( 7 ) = 7 b =
2 1 1 2 3 0 7
Mo ˙zna te ˙z tak:
o c t a v e 3 . 2 : 6 > c =[1 2 3 ; 2 3 4 ] c =
1 2 3
2 3 4
o c t a v e 3 . 2 : 7 > c ( 3 , : ) = 2 * c ( 2 , : ) c =
1 2 3
2 3 4
4 6 8
3 Skrypty i funkcje u˙zytkownika
Octave pozwala na tworzenie własnych funkcji. Mo ˙zna w nich wykorzystywa´c wiele technik programistycznych:
p˛etle, warunki, bloki try-catch, struktury, obsług˛e bł˛edów itp. Nie b˛ed ˛a one jednak potrzebne w zakresie przedmiotu Algebra Liniowa z Geometri ˛a Analityczn ˛a II. Omówione tutaj zostan ˛a podstawowe warunki utworzenia własnej funkcji.
Aby stworzy´c własn ˛a funkcj˛e, nale ˙zy utworzy´c plik tekstowy w dowolnie wybranym edytorze tekstu i zapisa´c go w folderze, który „widzi” Octave. Domy´slnie s ˛a to katalog roboczy i miejsca przechowywania funkcji wbudowa- nych. List˛e tych folderów mo ˙zna wy´swietli´c wywołuj ˛ac polecenie path. Aby doda´c do tej listy kolejny folder, nale ˙zy u ˙zy´c polecenia addpath, np. addpath("D:\Octave") doda do listy folderów folder Octave na dysku D: w systemie Windows. Polecenie takie nale ˙zy wykonywa´c po ka ˙zdym uruchomieniu Octave’a.
3.1 Funkcje
Przyjmijmy, ˙ze chcemy utworzy´c funkcj˛e, która b˛edzie obliczała warto´s´c sin(π · x · y) oraz sin(π · y2)dla argumentów xi y. Tre´s´c pliku z tak ˛a funkcj ˛a wygl ˛adałaby nast˛epuj ˛aco:
f u n c t i o n [ a , b ]= mojaFunkcja ( x , y ) a= s i n ( pi * x * y ) ;
b= s i n ( pi * y ^ 2 ) ;
gdzie function jest poleceniem wskazuj ˛acym Octave’owi, ˙ze dany plik jest funkcj ˛a (bo mo ˙ze nie by´c), [a,b] jest list ˛a zwracanych warto´sci, „mojaFunkcja” jest dowolnie wybran ˛a nazw ˛a funkcji (zasady nazewnictwa podobne jak dla zmiennych, z t ˛a ró ˙znic ˛a, ˙ze nie mo ˙zna u ˙zywa´c istniej ˛acych nazw funkcji), a „(x,y)” to nazwy argumentów. Kolejne linie zawieraj ˛a obliczenia. Tak przygotowany plik trzeba zapisa´c pod nazw ˛a „mojaFunkcja.m” – nie inn ˛a, nazwa funkcji i pliku musi si˛e zgadza´c, a rozszerzenie to zawsze „m” (st ˛ad u ˙zywana nazwa „m-plik”). U ˙zycie takiej funkcji w praktyce wygl ˛ada tak samo, jak u ˙zycie funkcji wbudowanej:
o c t a v e 3 . 2 : 1 > [ u ,w]= mojaFunkcja ( 0 , 0 ) u=0
w=0
Deklaracj˛e funkcji mo ˙zna uzupełni´c o komentarz. Je´sli komentarz b˛edzie wstawiony od drugiej linii, to b˛edzie on słu ˙zył za tre´s´c pomocy do funkcji:
f u n c t i o n [ a , b ]= mojaFunkcja ( x , y )
% To j e s t p i e r w s z a l i n i a pomocy .
% To j e s t d r u g a l i n i a pomocy . a= s i n ( pi * x * y ) ;
b= s i n ( pi * y ^ 2 ) ;
% To j e s t k o m e n t a r z , k t ó r e g o u ˙z y t k o w n i k n i e z o b a c z y .
Wówczas polecenie help mojaFunkcja poka ˙ze:
‘ mojaFunkcja ’ i s a f u n c t i o n from t h e f i l e /home/q/mojaFunkcja .m
To j e s t pierwsza l i n i a pomocy . To j e s t druga l i n i a pomocy .
A d d i t i o n a l help f o r b u i l t −i n f u n c t i o n s and o p e r a t o r s i s a v a i l a b l e i n t h e on−l i n e v e r s i o n o f t h e manual .
Use t h e command doc < t o p i c > t o s e a r c h t h e manual index .
Help and i n f o r m a t i o n about Octave i s a l s o a v a i l a b l e on t h e WWW a t h t t p ://www. o c t a v e . org and v i a t h e help@octave . org
m a i l i n g l i s t .
Według powy ˙zszego schematu zbudowane s ˛a funkcje wykonuj ˛ace operacje wierszowe i kolumnowe, przygotowane na laboratoria z przedmiotu Algebra Liniowa z Geometri ˛a Analityczn ˛a II.
f u n c t i o n a= o d e j m i j i l o c z y n ( a , r i , rk , c )
%a= o d e j m i j i l o c z y n ( a , r i , rk , c )
%Od w i e r s z a m a c i e r z y a o numerze r i
%o d e j m u j e w i e r s z r k pomno ˙zony p r z e z c . a ( r i , : ) − = c . * a ( rk , : ) ;
end
f u n c t i o n a= p o d z i e l w i e r s z ( a , r i , c )
%a= p o d z i e l w i e r s z ( a , r i , c )
%D z i e l i w i e r s z o numerze r i m a c i e r z y a p r z e z l i c z b ˛e c . a ( r i , : ) / = c ;
end
f u n c t i o n a=zamienwiersze ( a , r i , rk )
%a= z a m i e n w i e r s z e ( a , r i , r k )
%Z a m i e n i a dwa w i e r s z e m a c i e r z y a m i e j s c a m i . a ( [ r i , rk ] , : ) = a ( [ rk , r i ] , : ) ;
end
f u n c t i o n a=zerujkolumne ( a , c i , rk )
% Sprowadza kolumne c i m a c i e r z y A do p o s t a c i a ( k , i ) * e i ,
% g d z i e e i t o i −t a kolumna m a c i e r z y j e d n o s t k o w e j ,
% np aby w m a c i e r z y A kolumna d r u g a b y l a t e j p o s t a c i i w a r t o s c n i e z e r o w a
% b y l a w t r z e c i m w i e r s z u , n a l e z y wywolac f u n k c j e n a s t e p u j a c o :
% A= z e r u j k o l u m n e (A, 2 , 3 ) i f ( a ( rk , c i ) ~ = 0 )
f o r i = [ 1 : ( rk −1) , ( rk + 1 ) : rows ( a ) ]
a ( i , : ) = a ( i , : ) − ( a ( i , c i )/ a ( rk , c i ) ) . * a ( rk , : ) ; end
end
3.2 Skrypty
Mo ˙zliwe jest tworzenie plików nieb˛ed ˛acych funkcjami – skryptów. Skrypty nie przyjmuj ˛a argumentów i nie zwracaj ˛a wyników. S ˛a jakby spisanymi kolejnymi poleceniami, tak, jakby kto´s je miał po kolei wpisywa´c do Octave’a. Maj ˛a pełny dost˛ep do zmiennych, które s ˛a w pami˛eci Octave’a. Skrypty nie maj ˛a odpowiednika polecenia function – pocz ˛atkiem skryptu jest komentarz (tre´s´c pomocy) albo pierwsza instrukcja.
Przydatne mo ˙ze by´c stworzenie w katalogu roboczym Octave’a dwóch skryptów z poleceniami cz˛esto u ˙zywanymi:
„start.m” z poleceniami wykonywanymi na pocz ˛atku (wł ˛aczenie pami˛etnika, zmiana formatu wy´swietlania liczb, dodanie ´scie ˙zki do folderu, w którym przechowujemy swoje m-pliki, zmiana katalogu roboczego itp.) i „stop.m”
z poleceniami wykonywanymi na ko ´ncu (wył ˛aczenie pami˛etnika, wył ˛aczenie Octave’a). Wówczas po uruchomieniu Octave’a nale ˙zy wpisa´c nazw˛e skryptu startowego (bez rozszerzenia): start, a po zako ´nczeniu pracy wpisa´c stop.
Skrypty te mog ˛a mie´c nast˛epuj ˛ac ˛a posta´c:
start.m format r a t; cd "D: \ Octave "
d i a r y( [ s t r f t i m e ( "%Y−%m−%d %H−%M−%S " , l o c a l t i m e ( time ) ) , ’ . t x t ’ ] ) ; c l c
stop.m d i a r y o f f ; q u i t
Trzecia linia podanego skryptu startowego powoduje utworzenie w katalogu roboczym pliku dziennika o nazwie b˛ed ˛acej aktualn ˛a dat ˛a i czasem, z rozszerzeniem „txt”, np. „2012-12-20 20-12-00.txt”
Spis tre´sci
1 Kwestie techniczne 2
1.1 Instalacja Octave’a . . . . 2
1.2 Uruchomienie i wył ˛aczenie Octave’a . . . . 2
1.3 Instalacja edytora . . . . 2
2 Podstawy j˛ezyka 3 2.1 Kalkulator . . . . 3
2.2 Zmienne . . . . 3
2.3 Polecenia . . . . 5
2.3.1 Polecenia systemowe . . . . 6
2.4 Macierze . . . . 6
2.4.1 Tworzenie . . . . 6
2.4.2 Wektory . . . . 8
2.4.3 Odwołania do elementów macierzy . . . . 8
2.4.4 Działania na macierzach . . . . 9
2.4.5 „Nadmacierze” . . . . 11
3 Skrypty i funkcje u˙zytkownika 12 3.1 Funkcje . . . . 12
3.2 Skrypty . . . . 14