Wprowadzenie do Octave’a wersja 1.5

Jakub Kierzkowski [email protected]

Wst˛ep ˙ Octave jest wolnym i darmowym s´ rodowiskiem do obliczen´ numerycznych (i róznych innych obliczen´ matema˙ tycznych i inzynierskich) oraz j˛ezykiem do obsługi tego s´ rodowiska. J˛ezyk ten jest intuicyjny i przyjazny (dla matematyków). Octave jest odpowiednikiem komercyjnego (płatnego, drogiego) s´ rodowiska Matlab. J˛ezyk Matlab i j˛ezyk ˙ w dwóch odmianach. Niektóre zaawansowane funkcje Matlaba nie istnieja˛ Octave to wła´sciwie ten sam j˛ezyk, tyle, ze w Octave’ie, a niektóre proste, podstawowe funkcje Octave’a nie wyst˛epuja˛ w Matlabie. W zastosowaniach studenckich, gdzie nie jest tak istotna szybko´sc´ działania, budowanie interfejsów graficznych czy generowanie animacji 3D, bardziej odpowiedni jest Octave – zarówno j˛ezyk (wi˛ecej interesujacych ˛ polecen), ´ jak i sam program (darmowy). Oba ˙ zainstalowa´c i na systemach linuksowych, i na Windowsach, i na MAC OS, a nawet na systemie s´ rodowiska mozna Android.

1 1.1

Kwestie techniczne Instalacja Octave’a

˙ Najnowsza˛ dost˛epna˛ w tej chwili wersja˛ Octave’a jest wersja 3.6.4 (ale ukonczono ´ juz prace nad wersja˛ 3.8.0). Nalezy zainstalowa´c najnowsza˛ dost˛epna˛ wersj˛e, jednak program zaj˛ec´ Algebry Liniowej z Geometria˛ Analityczna˛ II wyma˙ dowolna inna, w miar˛e nowa wersja pakietu powinna działa´c tak ga tak małego wycinka funkcjonalno´sci Octave’a, ze ˙ samo, w szczególno´sci 3.2 z repozytoriów starszych wersji Ubuntu. Uzytkownicy systemów linuksowych instaluja˛ Octave i wszystkie dost˛epne do niego pakiety funkcji mechanizmem instalacji programów wła´sciwym dla swoje˙ go systemu. Uzytkownicy systemów Windows s´ ciagaj ˛ a˛ Octave ze strony http://octave.sourceforge.net/, ˙ pobra´c dwa pliki z link Windows: installers i tam szukamy linku do najnowszej wersji „MinGW installer” – nalezy rozszerzeniem „7z” i rozpakowa´c je do katalogu bez spacji w nazwie, np „C://Octave”. ˙ zainstalowa´c program OctaveDE, QtOctave, QOcTerm, GUIOctave, lub podobny (nie trzeba tego Dodatkowo, mozna ˙ zrobi´c pó´zniej). Sa˛ to programy dodajace robi´c, mozna ˛ 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łna˛ nazwa˛ GNU Octave), a w Linuksach z po˙ jest od dystrybucji, np. moze ˙ ziomu analogicznego menu lub w terminalu poprzez wpisanie nazwy (nazwa zalezna to by´c postaci „octave3.2”, albo „octave-3.6.3”). Octave działa w trybie tekstowym - nie obsługuje si˛e go mysza,˛ a tyl˙ jedynie zaznaczy´c wy´swietlony tekst w terminalu. Octave nie posiada zdefinowanych ko klawiatura.˛ Mysza˛ mozna skrótów klawiszowych. Cała komunikacja z programem odbywa si˛e poprzez wpisywanie polecen. ´ ˙ wpisa´c polecenie exit i nacisna´ Aby zamkna´ ˛c program nalezy ˛c ENTER.

1.3

Instalacja edytora

˙ by´c edytor tekstu kolorujacy Do tworzenia własnych funkcji potrzebny moze ˛ słowa kluczowe (nazwy funkcji). W sys˙ edytor dla programistów, np. Geany, Gedit. W Windowsach temach linuksowych umiej˛etno´sc´ t˛e posiada chyba kazdy

2

sa˛ to m. in. Notepad++ czy Geany. Nie b˛edzie to potrzebne na poziomi kursu z algebry liniowej.

2 2.1

Podstawy j˛ezyka Kalkulator

˙ by´c traktowany jak kalkulator – rozbudowany kalkulator naukowy. Mozna ˙ W pierwszej kolejno´sci Octave moze ˙ c (*), dzieli´c (dzielenie prawe / i lewe \), pot˛egowa´c (^), wyciaga´ wi˛ec dodawa´c (+), odejmowa´c (-), mnozy´ ˛ c pierwiastki 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ówniez˙ 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

octave3 .2:11 > sqrt ( 9 ) ans =

3

o c t a v e 3 . 2 : 1 2 > 1/2 ans =

0.50000

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 ans oznacza odpowied´z („answer”). Ostatni przykład pokazuje niedokładno´sc´ obliczen´ numerycznych. W przykła˙ zauwazy´ ˙ c tez, ˙ ze ˙ cz˛es´ c´ całkowita oddzielona jest dzie tym, zarówno „i” jak i „ j ” oznaczaja˛ jednostk˛e urojona.˛ Nalezy od ułamkowej nie przecinkiem, a kropka.˛

2.2

Zmienne

˙ Wyniki obliczen´ mozna przypisywa´c do zmiennych. Nazwy zmiennych powinny zaczyna´c si˛e od liter (nie moga˛ zaczyna´c si˛e od cyfr, moga˛ 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

˙ to potraktowa´c jak działanie 0-argumentowe Wpisanie nazwy zmiennej spowoduje wy´swietlenie jej warto´sci (mozna ˙ o nazwie takiej, jak nazwa zmiennej). Nazwy zmiennych sa˛ wrazliwe na wielko´sc´ liter – zmienna „a” to nie to samo co zmienna „A”. 3

octave3 .2:4 > a a =

4

octave3 .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. ˙ tez˙ nada´c zmiennej warto´sc´ wprost, aby potem uzy´ ˙ c jej w obliczeniach. Mozna 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

˙ tworzona˛ automatycznie przez program. Na niej równiez˙ mozna ˙ wykonywa´c obliczenia, ans tez˙ jest zmienna,˛ tyle, ze ˙ co bywa przydatne, zwłaszcza z uzyciem historii polecen: ´ octave3 .2:17 > 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

˙ nadawa´c bardzo dowolnie. Mozna ˙ nawet nada´c zmiennej nazw˛e istniejacej Nazwy zmiennym mozna ˛ 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

˙ ˙ wyczy´sci´c W takiej sytuacji, aby znów mie´c mozliwo´ sc´ skorzystania z funkcji cos czy jednostki urojonej, nalezy zmienne poleceniem clear: o c t a v e 3 . 2 : 9 > c l e a r i cos octave3 .2:10 > i ans =

0 + 1i

˙ wpisywa´c po słowie clear, oddzielone spacjami. Aby wyczy´sci´c wszystkie zmienZmienne do wyczyszczenia nalezy ˙ wpisa´c clear all. ne, nalezy ˙ wynik nie zostanie wy´swietlony. Mozna ˙ tez˙ wyda´c Wydanie polecenia ze znakiem s´ rednika na koncu ´ spowoduje, ze kilka komend na raz, w jednej linii, oddzielonych przecinkami (wynik widoczny) lub s´ rednikami (wynik niewidoczny): 4

o c t a v e 3 . 2 : 1 8 > a = 2 ; b=a +2 , c=b * 2 ; b = 4 octave3 .2:19 > c c =

2.3

8

Polecenia

Oprócz wspomnianych exit i clear, Octave zawiera jeszcze kilka polecen´ niedotyczacych ˛ bezpo´srednio obliczen. ´ Sa˛ ˙ to m. in. quit (to samo, co exit), close – do zamykania okien z wykresami (uzywa 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ółowa˛ list˛e wszystkich zmiennych, what – wy´swietla list˛e plików . m w biez˙ acym ˛ katalogu, oraz trzy dla nas ˙ najwazniejsze: 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 odpowiedzi. 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. Mozna tez˙ nakaza´c zapis w innym pliku, wpisujac ˛ np. „diary pamietnik.txt”. Nalezy ˙ plik pami˛etnika jest zapisywany na dysku dopiero w momencie wydania polecenia o zakonczeniu pami˛eta´c, ze ´ za˙ przy ponownym właczeniu pisu (lub zamkni˛eciu programu), oraz ze ˛ zapisu w tym samym pliku, nowa zawarto´sc´ zostanie zapisana na koncu ´ starej. ˙ W przypadku rozwiazywania ˛ zadan´ z algebry liniowej przydatne bywa, aby wyniki były przyblizane za pomo˙ wyda´c komend˛e „format rat”. Innym przydatnym formatem jest format ca˛ liczb wymiernych. W tym celu nalezy ˙ optymalnie dopasowujacy ˛ wy´swietlanie kazdej liczby z osobna: „format short g”. Dla macierzy liczb zespolonych ˙ by´c takze ˙ „format free” wy´swietlajacy przydatny moze ˛ 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.1416

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.1416

Wi˛ecej informacji na temat polecenia format znajduje si˛e w pomocy. Wykonanie polecenia help powoduje wy´swietlenie ogólnego tekstu pomocy, „help komenda” wy´swietla natomiast pomoc do danej komendy, czyli np. help format ˙ wy´swietli opis wszystkich mozliwych formatów. Zazwyczaj w pomocy do danej komendy wymienione sa˛ polecenia o podobnym działaniu, albo działajace ˛ odwrotnie. Aby zamkna´ ˛c pomoc (jak równiez˙ zmienne niemieszczace ˛ si˛e na ˙ nacisna´ ekranie oraz okna wykresów), nalezy ˛c przycisk „Q” na klawiaturze. ˙ wpisa´c odpowiednia˛ komend˛e i nacisna´ Aby wykona´c wybrane polecenie lub działanie, nalezy ˛c ENTER. Polecenia sa˛ zapami˛etywane – wci´sni˛ecie strzałki w gór˛e na klawiaturze powoduje pokazanie ostatnio wpisanego polecenia, 5

˙ przeglada´ strzałkami góra/dół mozna ˛ c cała˛ zapisana˛ histori˛e polecen. ´ Wpisanie ciagu ˛ znaków i naci´sni˛ecie strzałki w gór˛e spowoduje przegladanie ˛ tylko tych zapami˛etanych komend, które zaczynały si˛e od tego wpisanego ciagu ˛ zna˙ tylko komendy zaczynajace ków, np. wpisanie „ex” i naci´sni˛ecie strzałki w gór˛e pokaze ˛ si˛e od „ex”, np. exit i exp(2). Octave obsługuje tez˙ autouzupełnianie polecen. ´ Wpisanie „ex” i dwukrotne naci´sni˛ecie klawisza TAB wy´swietli list˛e wszystkich polecen´ zaczynajacych ˛ si˛e od „ex”. Je´sli wpisany zostanie taki ciag ˛ 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

˙ do porozumienia si˛e z systemem operacyjnym. pwd pokazuje katalog roboczy Octave’a, czyli kaKilka polecen´ słuzy ˙ talog, w którym b˛edzie on szukał plików (przede wszystkim skryptów i funkcji uzytkownika, o czym mowa w cz˛es´ ci 3, str. 12), ls pokazuje zawarto´sc´ tego folderu, a cd pozwala zmieni´c katalog roboczy na inny. Takie same polecenia ˙ funkcjonuja˛ w systemach linuksowych. Działanie polecen´ widoczne jest w ponizszym przykładzie. o c t a v e 3 . 2 : 3 9 > pwd ans = /home/q octave3 .2:40 > l s apro .m

document . t e x

man .m

octave

czasy .m

Dokumenty

mojaFunkcja .m

o b r a z k i .m

diary

Lab12 . pdf

Obrazy

Pulpit

diary . t x t o c t a v e 3 . 2 : 4 1 > cd Dokumenty o c t a v e 3 . 2 : 4 2 > pwd ans = /home/q/Dokumenty o c t a v e 3 . 2 : 4 3 > cd . . o c t a v e 3 . 2 : 4 4 > pwd ans = /home/q

2.4

Macierze

Wi˛ekszo´sc´ zmiennych w Octave’ie to macierze. Nawet liczby sa˛ traktowane jak macierze 1 × 1.

2.4.1

Tworzenie

˙ podawa´c wyrazy wierszami – koWprowadzanie macierzy zaczyna si˛e i konczy ´ nawiasem kwadratowym. Nalezy lejne wyrazy oddzielane spacja˛ lub przecinkiem (dowolnie), a wiersze oddzielane s´ rednikiem, 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

6

˙ Kazdy wiersz musi mie´c tyle samo elementów, w przeciwnym razie pojawi si˛e komunikat o bł˛edzie. Istnieja˛ tez˙ macierze, które tworzymy funkcja:˛ zeros(n) tworzy macierz zerowa˛ n × n, a zeros(m,n) macierz zerowa˛ m × n. Podobnie wywoływana jest funkcja ones – tworzy ona macierz z samymi jedyn˙ ˙ je´sli wywołana b˛edzie przez eye(m,n), kami (nie jednostkowa!). ˛ Macierz jednostkowa to eye, z tym zastrzezeniem, ze 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 sa:˛ pascal – macierz Pascala, hilb – macierz Hilberta, invhilb – odwrotno´sc´ macierzy Hilberta, itp. Opisy tych macierzy i dalsze przykłady w pomocy programu. ˙ by´c inna macierz – je´sli tylko odpowiednio dobrane b˛eda˛ wymiary macierzy, to umozli˙ Elementem macierzy moze 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

octave3 .2:56 > [ a , b ] ans = 1

1

1

9

−36

30

1

2

3

−36

192

−180

1

3

6

30

−180

180

octave3 .2:57 > [ 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, tez˙ jest to mozliwe:

7

o c t a v e 3 . 2 : 5 9 > a =[1 1 ] ; b = 2 ; c =[3 3 ; 3 3 ] ; d = [ 4 ; 4 ] ; octave3 .2:60 > [ a b ; c d] ans =

2.4.2

1

1

2

3

3

4

3

3

4

Wektory

˙ Waznym i specyficznym dla j˛ezyka Matlab/Octave elementem jest tzw. „notacja dwukropkowa”. Jej pierwsze zastosowanie to tworzenie wektora kolejnych liczb całkowitych: octave3 .2:45 > 1 : 5 ans = 1

2

3

4

5

Dwukropek oznacza tu „wszystkie kolejne” od jednego konca ´ do drugiego. To jednak nie wszystko: zamiast kolej˙ wzia´ nych liczb, mozna ˛c np. co trzecia:˛ octave3 .2:47 > 1 : 3 : 1 0 ans = 1

4

7

10

−0.1

−0.25

Działa to nie tylko dla liczb całkowitych: octave3 .2:52 > 0 . 2 : ( − 0 . 1 5 ) : ( − 0 . 4 ) ans = 0.2

2.4.3

0.05

−0.4

Odwołania do elementów macierzy

Wiersze i kolumny macierzy numerowane sa˛ „po ludzku”, a nie „po maszynowemu”, tzn od 1. Aby otrzyma´c ele˙ wpisa´c a( i , j ), koniecznie w nawiasie okragłym. ment macierzy A z wiersza numer i i kolumny j, nalezy ˛ 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

octave3 .2:42 > a ( 1 , 1 ) ans =

1

octave3 .2:43 > a ( 3 , 3 ) ans =

9 8

octave3 .2:44 > a ( 2 , 3 ) ans =

6

˙ nie tylko do pojedynczych elementów, ale tez˙ wybiera´c podmacierze. Sposób pierwszy, najOdwoływa´c si˛e mozna 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

octave3 .2:63 > a ( [ 1 , 3 ] , 2 ) ans = 2 8 Do funkcji zostały podane dwa argumenty, ale pierwszy jest wektorem – wektorem zawierajacym ˛ numery wierszy, ˙ które chcemy wyłuska´c. Znajac ˛ tworzenie wektorów za pomoca˛ notacji dwukropkowej, mozemy łatwo uzyskiwa´c podmacierze b˛edace ˛ blokami: octave3 .2:64 > a ( 1 : 3 , 1 : 2 ) ans = 1

2

4

5

7

8

˙ Notacja ta ma jednak jeszcze jedno zastosowanie: uzycie dwukropka zamiast numerów współrz˛ednych, wybierze wszystkie współrz˛edne: octave3 .2:65 > a ( : , 1 : 2 ) ans = 1

2

4

5

7

8

Czyli osiagn ˛ a´ ˛c taki sam rezultat szybsza,˛ niz˙ poprzednia, metoda.˛ ˙ Zamiast liczy´c lub sprawdza´c ile wierszy lub kolumn ma macierz, mozna wykorzysta´c automatycznie powstajac ˛ a˛ zmienna˛ end, oznaczajac ˛ a˛ ostatnia˛ współrz˛edna:˛ o c t a v e 3 . 2 : 6 6 > a ( end , 2 : end ) ans = 8

9

9

W wywołaniu dla wektorów jest jeden argument: octave3 .2:92 > a =5:9 a = 5

6

7

8

9

octave3 .2:93 > a ( [ 2 , 4 ] ) ans = 6

2.4.4

8

Działania na macierzach

˙ wykonywa´c, w taki sam sposób, jak na skalarach, dodawanie, odejmowanie i mnozenie ˙ Na macierzach mozna ma˙ cierzowe. Prawe i lewe dzielenie oznacza tu natomiast mnozenie z prawej i lewej strony przez odwrotno´sc´ , tzn. ˙ A\B = A−1 · B i B/A = B · A−1 . Specyficznymi działaniami sa˛ transpozycja i sprz˛ezenie, za które odpowiada symbol pojedynczego cudzysłowu, ewentualnie poprzedzonego kropka.˛ Działanie wyja´snia˛ przykłady. ˙ Je´sli zmienna jest liczba˛ zespolona,˛ to operator cudzysłowu jest sprz˛ezeniem liczby. o c t a v e 3 . 2 : 8 4 > a=2+ i a =

2 + 1i

octave3 .2:85 > a ’ ans =

2 − 1i

˙ Je´sli zmienna jest macierza˛ zespolona,˛ to cudzysłów jest operacja˛ sprz˛ezenia hermitowskiego. Transpozycja˛ jest wzi˛ecie operatora „.’ ” – kropka i cudzysłów. o c t a v e 3 . 2 : 8 6 > b =[ i ; 1− i ] b = 0 + 1i 1 − 1i octave3 .2:87 > b ’ ans = 0 − 1i

1 + 1i

octave3 .2:88 > b . ’ ans = 0 + 1i

1 − 1i

˙ zmienna jest macierza˛ rzeczywista,˛ to cudzysłów jest operacja˛ transpozycji. Jezeli octave3 .2:89 > c = [ 1 ; 2 ] c = 1 2 octave3 .2:90 > c ’ ans = 10

1

2

˙ Octave posiada bardzo wiele funkcji operujacych ˛ na macierzach. najwazniejsze z nich to: det(a) – wyznacznik macierzy a, eig(a) – multizbiór warto´sci własnych, trace (a) – s´ lad macierzy, diag(a) – wyłuskiwanie/ustawianie przekatnej: ˛ 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 juz˙ jak otrzyma´c podmacierz. Wiadomo jak zrobi´c macierze blokowe. Ale jest jeszcze jeden droga opero˙ ˙ wania na rozmiarach macierzy. Mozna powi˛eksza´c istniejace ˛ macierze. Np. mozna 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

octave3 .2:2 > a (3 ,4)=0 a = 2

1

0

0

1

2

0

0

0

0

0

0

11

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

octave3 .2:4 > b (5)=3 b = 2

1

1

2

3

octave3 .2:5 > b (7)=7 b = 2

1

1

2

3

0

7

˙ tez˙ tak: Mozna o c t a v e 3 . 2 : 6 > c =[1 2 3 ; 2 3 4 ] c = 1

2

3

2

3

4

octave3 .2:7 > c ( 3 , : ) = 2 * c ( 2 , : ) c =

3

1

2

3

2

3

4

4

6

8

Skrypty i funkcje uz˙ ytkownika

˙ Octave pozwala na tworzenie własnych funkcji. Mozna w nich wykorzystywa´c wiele technik programistycznych: p˛etle, warunki, bloki try-catch, struktury, obsług˛e bł˛edów itp. Nie b˛eda˛ one jednak potrzebne w zakresie przedmiotu Algebra Liniowa z Geometria˛ Analityczna˛ II. Omówione tutaj zostana˛ podstawowe warunki utworzenia własnej funkcji. ˙ utworzy´c plik tekstowy w dowolnie wybranym edytorze tekstu i zapisa´c go Aby stworzy´c własna˛ funkcj˛e, nalezy w folderze, który „widzi” Octave. Domy´slnie sa˛ to katalog roboczy i miejsca przechowywania funkcji wbudowa˙ wy´swietli´c wywołujac ˙ nych. List˛e tych folderów mozna ˛ polecenie path. Aby doda´c do tej listy kolejny folder, nalezy ˙ c polecenia addpath, np. addpath("D:\Octave") doda do listy folderów folder Octave na dysku D: w systemie uzy´ ˙ wykonywa´c po kazdym ˙ Windows. Polecenie takie nalezy uruchomieniu Octave’a.

3.1

Funkcje

˙ chcemy utworzy´c funkcj˛e, która b˛edzie obliczała warto´sc´ sin(π · x · y) oraz sin(π · y 2 ) dla argumentów Przyjmijmy, ze x i y. Tre´sc´ pliku z taka˛ funkcja˛ wygladałaby ˛ nast˛epujaco: ˛ f u n c t i o n [ a , b ]= mojaFunkcja ( x , y )

12

a=s i n ( pi * x * y ) ; b= s i n ( pi * y ^ 2 ) ; ˙ dany plik jest funkcja˛ (bo moze ˙ nie by´c), [a,b] jest lista˛ gdzie function jest poleceniem wskazujacym ˛ Octave’owi, ze zwracanych warto´sci, „mojaFunkcja” jest dowolnie wybrana˛ nazwa˛ funkcji (zasady nazewnictwa podobne jak dla ˙ a,˛ ze ˙ nie mozna ˙ ˙ zmiennych, z ta˛ róznic uzywa´ c istniejacych ˛ nazw funkcji), a „(x,y)” to nazwy argumentów. Kolejne linie zawieraja˛ obliczenia. Tak przygotowany plik trzeba zapisa´c pod nazwa˛ „mojaFunkcja.m” – nie inna,˛ nazwa ˙ ˙ funkcji i pliku musi si˛e zgadza´c, a rozszerzenie to zawsze „m” (stad ˛ uzywana nazwa „m-plik”). Uzycie takiej funkcji ˙ w praktyce wyglada ˛ tak samo, jak uzycie funkcji wbudowanej: o c t a v e 3 . 2 : 1 > [ u ,w]= mojaFunkcja ( 0 , 0 ) u=0 w=0 ˙ Deklaracj˛e funkcji mozna uzupełni´c o komentarz. Je´sli komentarz b˛edzie wstawiony od drugiej linii, to b˛edzie on ˙ za tre´sc´ pomocy do funkcji: słuzył 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 ,

kt rego

u y t k o w n i k nie zobaczy .

˙ Wówczas polecenie help mojaFunkcja pokaze: ‘ 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 mailing l i s t . ˙ Według powyzszego schematu zbudowane sa˛ funkcje wykonujace ˛ operacje wierszowe i kolumnowe, przygotowane na laboratoria z przedmiotu Algebra Liniowa z Geometria˛ Analityczna˛ 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 13

%o d e j m u j e w i e r s z r k p o m n o o n y p r z e z s k a l a r 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 s k a l a r c . a ( ri ,:)/= 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=redukujkolumne ( a , rk , c i ) % %

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= r e d u k u j k o l u m n e (A, 3 , 2 )

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

˙ Mozliwe jest tworzenie plików nieb˛edacych ˛ funkcjami – skryptów. Skrypty nie przyjmuja˛ argumentów i nie zwracaja˛ wyników. Sa˛ jakby spisanymi kolejnymi poleceniami, tak, jakby kto´s je miał po kolei wpisywa´c do Octave’a. Maja˛ pełny dost˛ep do zmiennych, które sa˛ w pami˛eci Octave’a. Skrypty nie maja˛ odpowiednika polecenia function – poczatkiem ˛ skryptu jest komentarz (tre´sc´ pomocy) albo pierwsza instrukcja. ˙ by´c stworzenie w katalogu roboczym Octave’a dwóch skryptów z poleceniami cz˛esto uzywanymi: ˙ Przydatne moze „start.m” z poleceniami wykonywanymi na poczatku ˛ (właczenie ˛ pami˛etnika, zmiana formatu wy´swietlania liczb, ˙ do folderu, w którym przechowujemy swoje m-pliki, zmiana katalogu roboczego itp.) i „stop.m” dodanie s´ ciezki z poleceniami wykonywanymi na koncu ´ (wyłaczenie ˛ pami˛etnika, wyłaczenie ˛ Octave’a). Wówczas po uruchomieniu ˙ wpisa´c nazw˛e skryptu startowego (bez rozszerzenia): start, a po zakonczeniu Octave’a nalezy ´ pracy wpisa´c stop. Skrypty te moga˛ mie´c nast˛epujac ˛ a˛ posta´c:

14

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 ’ ] ) ; clc stop.m diary o f f ; quit Trzecia linia podanego skryptu startowego powoduje utworzenie w katalogu roboczym pliku dziennika o nazwie b˛edacej ˛ aktualna˛ data˛ i czasem, z rozszerzeniem „txt”, np. „2014-01-20 20-12-00.txt”

15

Spis tre´sci 1

2

Kwestie techniczne

2

1.1

Instalacja Octave’a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

1.2

Uruchomienie i wyłaczenie ˛ Octave’a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

1.3

Instalacja edytora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

Podstawy j˛ezyka

3

2.1

Kalkulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

2.2

Zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

2.3

Polecenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

2.3.1

Polecenia systemowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

2.4.5

„Nadmacierze” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

2.4

3

Skrypty i funkcje u˙zytkownika

12

3.1

Funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

3.2

Skrypty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

16