wersja 1.5 Jakub Kierzkowski [email protected]/downloads/ALzG2-MiNI-2018... ·...

16
Wprowadzenie do Octave’a wersja 1.5 Jakub Kierzkowski [email protected]

Transcript of wersja 1.5 Jakub Kierzkowski [email protected]/downloads/ALzG2-MiNI-2018... ·...

Page 1: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

Wprowadzenie do Octave’awersja 1.5

Jakub Kierzkowski

[email protected]

Page 2: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

Wstep

Octave jest wolnym i darmowym srodowiskiem do obliczen numerycznych (i róznych innych obliczen matema-

tycznych i inzynierskich) oraz jezykiem do obsługi tego srodowiska. Jezyk ten jest intuicyjny i przyjazny (dla mate-

matyków). Octave jest odpowiednikiem komercyjnego (płatnego, drogiego) srodowiska Matlab. Jezyk Matlab i jezyk

Octave to własciwie ten sam jezyk, tyle, ze w dwóch odmianach. Niektóre zaawansowane funkcje Matlaba nie istnieja

w Octave’ie, a niektóre proste, podstawowe funkcje Octave’a nie wystepuja w Matlabie. W zastosowaniach studenc-

kich, gdzie nie jest tak istotna szybkosc działania, budowanie interfejsów graficznych czy generowanie animacji 3D,

bardziej odpowiedni jest Octave – zarówno jezyk (wiecej interesujacych polecen), jak i sam program (darmowy). Oba

srodowiska mozna zainstalowac i na systemach linuksowych, i na Windowsach, i na MAC OS, a nawet na systemie

Android.

1 Kwestie techniczne

1.1 Instalacja Octave’a

Najnowsza dostepna w tej chwili wersja Octave’a jest wersja 3.6.4 (ale ukonczono juz prace nad wersja 3.8.0). Nalezy

zainstalowac najnowsza dostepna wersje, jednak program zajec Algebry Liniowej z Geometria Analityczna II wyma-

ga tak małego wycinka funkcjonalnosci Octave’a, ze dowolna inna, w miare nowa wersja pakietu powinna działac tak

samo, w szczególnosci 3.2 z repozytoriów starszych wersji Ubuntu. Uzytkownicy systemów linuksowych instaluja

Octave i wszystkie dostepne do niego pakiety funkcji mechanizmem instalacji programów własciwym dla swoje-

go systemu. Uzytkownicy systemów Windows sciagaja Octave ze strony http://octave.sourceforge.net/,

link Windows: installers i tam szukamy linku do najnowszej wersji „MinGW installer” – nalezy pobrac dwa pliki z

rozszerzeniem „7z” i rozpakowac je do katalogu bez spacji w nazwie, np „C://Octave”.

Dodatkowo, mozna zainstalowac program OctaveDE, QtOctave, QOcTerm, GUIOctave, lub podobny (nie trzeba tego

robic, mozna zrobic pózniej). Sa to programy dodajace do Octave’a interfejs graficzny na wzór tego z Matlaba.

1.2 Uruchomienie i wyłaczenie Octave’a

Program uruchamia sie z Menu Start w Windowsach (obecny pod pełna nazwa GNU Octave), a w Linuksach z po-

ziomu analogicznego menu lub w terminalu poprzez wpisanie nazwy (nazwa zalezna jest od dystrybucji, np. moze

to byc postaci „octave3.2”, albo „octave-3.6.3”). Octave działa w trybie tekstowym - nie obsługuje sie go mysza, a tyl-

ko klawiatura. Mysza mozna jedynie zaznaczyc wyswietlony tekst w terminalu. Octave nie posiada zdefinowanych

skrótów klawiszowych. Cała komunikacja z programem odbywa sie poprzez wpisywanie polecen.

Aby zamknac program nalezy wpisac polecenie exit i nacisnac ENTER.

1.3 Instalacja edytora

Do tworzenia własnych funkcji potrzebny moze byc edytor tekstu kolorujacy słowa kluczowe (nazwy funkcji). W sys-

temach linuksowych umiejetnosc te posiada chyba kazdy edytor dla programistów, np. Geany, Gedit. W Windowsach

2

Page 3: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

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

2 Podstawy jezyka

2.1 Kalkulator

W pierwszej kolejnosci Octave moze byc traktowany jak kalkulator – rozbudowany kalkulator naukowy. Mozna

wiec dodawac (+), odejmowac (-), mnozyc (*), dzielic (dzielenie prawe / i lewe \), potegowac (^), wyciagac pier-

wiastki kwadratowe (sqrt(x)), obliczac wartosci 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:

octave3 . 2 : 1 > 2+2

ans = 4

octave3 .2 :10 > 2^3

ans = 8

octave3 .2 :11 > sqr t ( 9 )

ans = 3

octave3 .2 :12 > 1/2

ans = 0.50000

octave3 .2 :13 > 10\20

ans = 2

octave3 .2 :17 > sin ( pi /2)

ans = 1

octave3 .2 :18 > exp ( j * pi /2)

ans = 6 .1230 e−17 + 1 .0000 e+00 i

ans oznacza odpowiedz („answer”). Ostatni przykład pokazuje niedokładnosc obliczen numerycznych. W przykła-

dzie tym, zarówno „i” jak i „ j” oznaczaja jednostke urojona. Nalezy zauwazyc tez, ze czesc całkowita oddzielona jest

od ułamkowej nie przecinkiem, a kropka.

2.2 Zmienne

Wyniki obliczen mozna przypisywac do zmiennych. Nazwy zmiennych powinny zaczynac sie od liter (nie moga

zaczynac sie od cyfr, moga od niektórych innych znaków). Przypisanie wyniku do zmiennej „a”:

octave3 . 2 : 1 > a=2+2

a = 4

Wpisanie nazwy zmiennej spowoduje wyswietlenie jej wartosci (mozna to potraktowac jak działanie 0-argumentowe

o nazwie takiej, jak nazwa zmiennej). Nazwy zmiennych sa wrazliwe na wielkosc liter – zmienna „a” to nie to samo

co zmienna „A”.

3

Page 4: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

octave3 . 2 : 4 > a

a = 4

octave3 . 2 : 5 > A

e r r o r : ‘A’ undefined near l ine 5 column 1

W tej sytuacji Octave wyswietlił komunikat o błedzie.

Mozna tez nadac zmiennej wartosc wprost, aby potem uzyc jej w obliczeniach.

octave3 . 2 : 2 > k=7

k = 7

octave3 . 2 : 3 > k^2

ans = 49

ans tez jest zmienna, tyle, ze tworzona automatycznie przez program. Na niej równiez mozna wykonywac obliczenia,

co bywa przydatne, zwłaszcza z uzyciem historii polecen:

octave3 .2 :17 > 3

ans = 3

octave3 .2 :18 > ans^2

ans = 9

octave3 .2 :19 > ans^2

ans = 81

octave3 .2 :20 > ans^2

ans = 6561

Nazwy zmiennym mozna nadawac bardzo dowolnie. Mozna nawet nadac zmiennej nazwe istniejacej funkcji:

octave3 . 2 : 5 > cos=7

cos = 7

octave3 . 2 : 6 > i =5

i = 5

W takiej sytuacji, aby znów miec mozliwosc skorzystania z funkcji cos czy jednostki urojonej, nalezy wyczyscic

zmienne poleceniem clear:

octave3 . 2 : 9 > c l e a r i cos

octave3 .2 :10 > i

ans = 0 + 1 i

Zmienne do wyczyszczenia nalezy wpisywac po słowie clear, oddzielone spacjami. Aby wyczyscic wszystkie zmien-

ne, nalezy wpisac clear all .

Wydanie polecenia ze znakiem srednika na koncu spowoduje, ze wynik nie zostanie wyswietlony. Mozna tez wydac

kilka komend na raz, w jednej linii, oddzielonych przecinkami (wynik widoczny) lub srednikami (wynik niewidocz-

ny):

4

Page 5: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

octave3 .2 :18 > a =2; b=a +2 , c=b * 2 ;

b = 4

octave3 .2 :19 > c

c = 8

2.3 Polecenia

Oprócz wspomnianych exit i clear, Octave zawiera jeszcze kilka polecen niedotyczacych bezposrednio obliczen. Sa

to m. in. quit (to samo, co exit), close – do zamykania okien z wykresami (uzywa sie tak samo, jak clear – „all”

zamyka wszystkie), clc – czysci ekran programu, who – wyswietla liste wszystkich zmiennych, whos – wyswietla

szczegółowa liste wszystkich zmiennych, what – wyswietla liste plików .m w biezacym katalogu, oraz trzy dla nas

najwazniejsze: diary – uruchamia „pamietnik”, format – zmiana sposobu wyswietlania wyników i help – pomoc

programu.

„Pamietnik” to plik, w którym Octave zapisuje wszystko to, co widac w jego oknie – zarówno polecenia, jak i odpo-

wiedzi. Wpisanie diary on włacza, a diary off wyłacza zapis. Domyslnie, plikiem pamietnika jest plik diary w ka-

talogu roboczym Octave’a. Mozna tez nakazac zapis w innym pliku, wpisujac np. „diary pamietnik.txt”. Nalezy

pamietac, ze plik pamietnika jest zapisywany na dysku dopiero w momencie wydania polecenia o zakonczeniu za-

pisu (lub zamknieciu programu), oraz ze przy ponownym właczeniu zapisu w tym samym pliku, nowa zawartosc

zostanie zapisana na koncu starej.

W przypadku rozwiazywania zadan z algebry liniowej przydatne bywa, aby wyniki były przyblizane za pomo-

ca liczb wymiernych. W tym celu nalezy wydac komende „format rat”. Innym przydatnym formatem jest format

optymalnie dopasowujacy wyswietlanie kazdej liczby z osobna: „format short g”. Dla macierzy liczb zespolonych

przydatny moze byc takze „format free” wyswietlajacy liczby w postaci par (x, y), gdzie z = x + i · y. Wpisanie

samego polecenia format powoduje powrót do domyslnego formatowania wyników:

octave3 . 2 : 3 > pi

ans = 3 .1416

octave3 . 2 : 4 > format r a t

octave3 . 2 : 5 > pi

ans = 355/113

octave3 . 2 : 6 > format

octave3 . 2 : 7 > pi

ans = 3 .1416

Wiecej informacji na temat polecenia format znajduje sie w pomocy. Wykonanie polecenia help powoduje wyswietle-

nie ogólnego tekstu pomocy, „help komenda” wyswietla natomiast pomoc do danej komendy, czyli np. help format

wyswietli opis wszystkich mozliwych formatów. Zazwyczaj w pomocy do danej komendy wymienione sa polecenia

o podobnym działaniu, albo działajace odwrotnie. Aby zamknac pomoc (jak równiez zmienne niemieszczace sie na

ekranie oraz okna wykresów), nalezy nacisnac przycisk „Q” na klawiaturze.

Aby wykonac wybrane polecenie lub działanie, nalezy wpisac odpowiednia komende i nacisnac ENTER. Polecenia

sa zapamietywane – wcisniecie strzałki w góre na klawiaturze powoduje pokazanie ostatnio wpisanego polecenia,

5

Page 6: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

strzałkami góra/dół mozna przegladac cała zapisana historie polecen. Wpisanie ciagu znaków i nacisniecie strzałki

w góre spowoduje przegladanie tylko tych zapamietanych komend, które zaczynały sie od tego wpisanego ciagu zna-

ków, np. wpisanie „ex” i nacisniecie strzałki w góre pokaze tylko komendy zaczynajace sie od „ex”, np. exit i exp(2).

Octave obsługuje tez autouzupełnianie polecen. Wpisanie „ex” i dwukrotne nacisniecie klawisza TAB wyswietli liste

wszystkich polecen zaczynajacych sie od „ex”. Jesli wpisany zostanie taki ciag znaków, który jest prefiksem tylko

jednego polecenia, to autouzupełnianie po prostu uzupełni te nazwe.

2.3.1 Polecenia systemowe

Kilka polecen słuzy do porozumienia sie z systemem operacyjnym. pwd pokazuje katalog roboczy Octave’a, czyli ka-

talog, w którym bedzie on szukał plików (przede wszystkim skryptów i funkcji uzytkownika, o czym mowa w czesci

3, str. 12), ls pokazuje zawartosc tego folderu, a cd pozwala zmienic katalog roboczy na inny. Takie same polecenia

funkcjonuja w systemach linuksowych. Działanie polecen widoczne jest w ponizszym przykładzie.

octave3 .2 :39 > pwd

ans = /home/q

octave3 .2 :40 > l s

apro .m document . tex man .m octave

czasy .m Dokumenty mojaFunkcja .m obrazki .m

diary Lab12 . pdf Obrazy P u l p i t

diary . t x t

octave3 .2 :41 > cd Dokumenty

octave3 .2 :42 > pwd

ans = /home/q/Dokumenty

octave3 .2 :43 > cd . .

octave3 .2 :44 > pwd

ans = /home/q

2.4 Macierze

Wiekszosc zmiennych w Octave’ie to macierze. Nawet liczby sa traktowane jak macierze 1× 1.

2.4.1 Tworzenie

Wprowadzanie macierzy zaczyna sie i konczy nawiasem kwadratowym. Nalezy podawac wyrazy wierszami – ko-

lejne wyrazy oddzielane spacja lub przecinkiem (dowolnie), a wiersze oddzielane srednikiem, np.:

octave3 .2 :25 > 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

Page 7: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

Kazdy wiersz musi miec tyle samo elementów, w przeciwnym razie pojawi sie 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-

kami (nie jednostkowa!). Macierz jednostkowa to eye, z tym zastrzezeniem, ze jesli wywołana bedzie przez eye(m,n),

gdzie m 6= n, to wiekszy wymiar uzupełniony bedzie zerami:

octave3 .2 :24 > eye ( 2 , 3 )

ans =

Diagonal Matrix

1 0 0

0 1 0

Innymi wbudowanymi macierzami sa: pascal – macierz Pascala, hilb – macierz Hilberta, invhilb – odwrotnosc ma-

cierzy Hilberta, itp. Opisy tych macierzy i dalsze przykłady w pomocy programu.

Elementem macierzy moze byc inna macierz – jesli tylko odpowiednio dobrane beda wymiary macierzy, to umozli-

wia to tworzenie macierzy blokowych. W przypadku dwóch macierzy:

octave3 .2 :54 > a=pascal ( 3 )

a =

1 1 1

1 2 3

1 3 6

octave3 .2 :55 > b=invhilb ( 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 wiekszej liczby macierzy, tez jest to mozliwe:

7

Page 8: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

octave3 .2 :59 > a =[1 1 ] ; b =2; c =[3 3 ; 3 3 ] ; d = [ 4 ; 4 ] ;

octave3 .2 :60 > [ a b ; c d ]

ans =

1 1 2

3 3 4

3 3 4

2.4.2 Wektory

Waznym i specyficznym dla jezyka Matlab/Octave elementem jest tzw. „notacja dwukropkowa”. Jej pierwsze zasto-

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

nych liczb, mozna wziac np. co trzecia:

octave3 .2 :47 > 1 : 3 : 1 0

ans =

1 4 7 10

Działa to nie tylko dla liczb całkowitych:

octave3 .2 :52 > 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 sa „po ludzku”, a nie „po maszynowemu”, tzn od 1. Aby otrzymac ele-

ment macierzy A z wiersza numer i i kolumny j, nalezy wpisac a( i , j ), koniecznie w nawiasie okragłym.

octave3 .2 :41 > 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

Page 9: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

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

ans = 6

Odwoływac sie mozna nie tylko do pojedynczych elementów, ale tez wybierac podmacierze. Sposób pierwszy, naj-

prostszy:

octave3 .2 :62 > 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łuskac. Znajac tworzenie wektorów za pomoca notacji dwukropkowej, mozemy łatwo uzyskiwac

podmacierze bedace 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ółrzednych, wybierze

wszystkie współrzedne:

octave3 .2 :65 > a ( : , 1 : 2 )

ans =

1 2

4 5

7 8

Czyli osiagnac taki sam rezultat szybsza, niz poprzednia, metoda.

Zamiast liczyc lub sprawdzac ile wierszy lub kolumn ma macierz, mozna wykorzystac automatycznie powstajaca

zmienna end, oznaczajaca ostatnia współrzedna:

octave3 .2 :66 > a ( end , 2 : end )

ans =

8 9

9

Page 10: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

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 8

2.4.4 Działania na macierzach

Na macierzach mozna wykonywac, w taki sam sposób, jak na skalarach, dodawanie, odejmowanie i mnozenie ma-

cierzowe. Prawe i lewe dzielenie oznacza tu natomiast mnozenie z prawej i lewej strony przez odwrotnosc, tzn.

A\B = A−1 ·B iB/A = B ·A−1. Specyficznymi działaniami sa transpozycja i sprzezenie, za które odpowiada symbol

pojedynczego cudzysłowu, ewentualnie poprzedzonego kropka. Działanie wyjasnia przykłady.

Jesli zmienna jest liczba zespolona, to operator cudzysłowu jest sprzezeniem liczby.

octave3 .2 :84 > a=2+ i

a = 2 + 1 i

octave3 .2 :85 > a ’

ans = 2 − 1 i

Jesli zmienna jest macierza zespolona, to cudzysłów jest operacja sprzezenia hermitowskiego. Transpozycja jest wzie-

cie operatora „.’ ” – kropka i cudzysłów.

octave3 .2 :86 > b=[ i ; 1− i ]

b =

0 + 1 i

1 − 1 i

octave3 .2 :87 > b ’

ans =

0 − 1 i 1 + 1 i

octave3 .2 :88 > b . ’

ans =

0 + 1 i 1 − 1 i

Jezeli zmienna jest macierza rzeczywista, to cudzysłów jest operacja transpozycji.

octave3 .2 :89 > c = [ 1 ; 2 ]

c =

1

2

octave3 .2 :90 > c ’

ans =

10

Page 11: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

1 2

Octave posiada bardzo wiele funkcji operujacych na macierzach. najwazniejsze z nich to: det(a) – wyznacznik macie-

rzy a, eig(a) – multizbiór wartosci własnych, trace (a) – slad macierzy, diag(a) – wyłuskiwanie/ustawianie przekatnej:

octave3 .2 :98 > a=pascal ( 3 )

a =

1 1 1

1 2 3

1 3 6

octave3 .2 :99 > b=diag ( a )

b =

1

2

6

octave3 .2 :100 > c=diag ( b )

c =

Diagonal Matrix

1 0 0

0 2 0

0 0 6

oraz size:

octave3 .2 :100 > [ b , c ]= s ize ( a )

b = 3

c = 3

2.4.5 „Nadmacierze”

Wiadomo juz jak otrzymac podmacierz. Wiadomo jak zrobic macierze blokowe. Ale jest jeszcze jeden droga opero-

wania na rozmiarach macierzy. Mozna powiekszac istniejace macierze. Np. mozna z macierzy 2 × 2 zrobic macierz

3× 4:

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

Page 12: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

Jest to przydatne zwłaszcza dla wektorów:

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

Mozna tez tak:

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

1 2 3

2 3 4

4 6 8

3 Skrypty i funkcje uzytkownika

Octave pozwala na tworzenie własnych funkcji. Mozna w nich wykorzystywac wiele technik programistycznych:

petle, warunki, bloki try-catch, struktury, obsługe błedów itp. Nie beda one jednak potrzebne w zakresie przedmiotu

Algebra Liniowa z Geometria Analityczna II. Omówione tutaj zostana podstawowe warunki utworzenia własnej

funkcji.

Aby stworzyc własna funkcje, nalezy utworzyc plik tekstowy w dowolnie wybranym edytorze tekstu i zapisac go

w folderze, który „widzi” Octave. Domyslnie sa to katalog roboczy i miejsca przechowywania funkcji wbudowa-

nych. Liste tych folderów mozna wyswietlic wywołujac polecenie path. Aby dodac do tej listy kolejny folder, nalezy

uzyc polecenia addpath, np. addpath("D:\Octave") doda do listy folderów folder Octave na dysku D: w systemie

Windows. Polecenie takie nalezy wykonywac po kazdym uruchomieniu Octave’a.

3.1 Funkcje

Przyjmijmy, ze chcemy utworzyc funkcje, która bedzie obliczała wartosc sin(π · x · y) oraz sin(π · y2) dla argumentów

x i y. Tresc pliku z taka funkcja wygladałaby nastepujaco:

function [ a , b]= mojaFunkcja ( x , y )

12

Page 13: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

a=sin ( pi * x * y ) ;

b=sin ( pi * y ^ 2 ) ;

gdzie function jest poleceniem wskazujacym Octave’owi, ze dany plik jest funkcja (bo moze nie byc), [a,b] jest lista

zwracanych wartosci, „mojaFunkcja” jest dowolnie wybrana nazwa funkcji (zasady nazewnictwa podobne jak dla

zmiennych, z ta róznica, ze nie mozna uzywac istniejacych nazw funkcji), a „(x,y)” to nazwy argumentów. Kolejne

linie zawieraja obliczenia. Tak przygotowany plik trzeba zapisac pod nazwa „mojaFunkcja.m” – nie inna, nazwa

funkcji i pliku musi sie zgadzac, a rozszerzenie to zawsze „m” (stad uzywana nazwa „m-plik”). Uzycie takiej funkcji

w praktyce wyglada tak samo, jak uzycie funkcji wbudowanej:

octave3 . 2 : 1 > [ u ,w]= mojaFunkcja ( 0 , 0 )

u=0

w=0

Deklaracje funkcji mozna uzupełnic o komentarz. Jesli komentarz bedzie wstawiony od drugiej linii, to bedzie on

słuzył za tresc pomocy do funkcji:

function [ 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 druga l i n i a pomocy .

a=sin ( pi * x * y ) ;

b=sin ( pi * y ^ 2 ) ;

% To j e s t komentarz , k t r e g o u y t k o w n i k n i e z o b a c z y .

Wówczas polecenie help mojaFunkcja pokaze:

‘ mojaFunkcja ’ i s a function from the 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 .

Addit ional help for b u i l t−in f u n c t i o n s and operators i s

a v a i l a b l e in the on−l ine version of the manual .

Use the command doc <topic > to search the manual index .

Help and information about Octave i s a l s o a v a i l a b l e on the WWW

at http ://www. octave . org and via the help@octave . org

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

function 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

Page 14: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

%o d e j m u j e w i e r s z rk 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

function a=podzie lwiersz ( 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 ( r i , : ) / = c ;

end

function 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 )

%Zamienia 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

function 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 druga 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 wierszu , 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=reduku jko lumne (A, 3 , 2 )

i f ( a ( rk , c i )~=0)

for 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 niebedacych funkcjami – skryptów. Skrypty nie przyjmuja argumentów i nie zwracaja

wyników. Sa jakby spisanymi kolejnymi poleceniami, tak, jakby ktos je miał po kolei wpisywac do Octave’a. Maja

pełny dostep do zmiennych, które sa w pamieci Octave’a. Skrypty nie maja odpowiednika polecenia function –

poczatkiem skryptu jest komentarz (tresc pomocy) albo pierwsza instrukcja.

Przydatne moze byc stworzenie w katalogu roboczym Octave’a dwóch skryptów z poleceniami czesto uzywanymi:

„start.m” z poleceniami wykonywanymi na poczatku (właczenie pamietnika, zmiana formatu wyswietlania liczb,

dodanie sciezki do folderu, w którym przechowujemy swoje m-pliki, zmiana katalogu roboczego itp.) i „stop.m”

z poleceniami wykonywanymi na koncu (wyłaczenie pamietnika, wyłaczenie Octave’a). Wówczas po uruchomieniu

Octave’a nalezy wpisac nazwe skryptu startowego (bez rozszerzenia): start, a po zakonczeniu pracy wpisac stop.

Skrypty te moga miec nastepujaca postac:

14

Page 15: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

start.m

format r a t ;

cd "D:\ Octave "

diary ( [ 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

diary o f f ;

quit

Trzecia linia podanego skryptu startowego powoduje utworzenie w katalogu roboczym pliku dziennika o nazwie

bedacej aktualna data i czasem, z rozszerzeniem „txt”, np. „2014-01-20 20-12-00.txt”

15

Page 16: wersja 1.5 Jakub Kierzkowski J.Kierzkowski@mini.pw.eduzwierzynskim/downloads/ALzG2-MiNI-2018... · jednego polecenia, to autouzupełnianie po prostu uzupełni te˛ nazwe.˛ 2.3.1

Spis tresci

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

2.4.5 „Nadmacierze” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Skrypty i funkcje uzytkownika 12

3.1 Funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.2 Skrypty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

16