Download as pdf or txt
Download as pdf or txt
You are on page 1of 95

Octave

Janusz Mikiewicz
IFT

Wrocaw, 2011

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

1 / 95

Wstp

Wprowadzenie

Octave jest jzykiem programowania wysokiego poziomu przeznaczonym do oblicze numerycznych. Stanowi on odpowiednik Matlaba, bdc z nim w duym stopniu zgodny. Podstawowym zastosowaniem Octave jest przetwarzanie i analiza danych z tego wzgldu jest on zoptymalizowany pod ktem operacji macierzowych.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

2 / 95

Wstp

Typowe zastosowania Octave to obliczenia numeryczne zbieranie i analiza danych (w szczeglnoci ich duej iloci!) rozwizywanie rwna liniowych (nawet z b. du ilocia niewiadomych) obliczenia macierzowe (znajdowanie wartoci wasnych, wektory wasne rozkad macierzy itp) prezentacja wynikw w postaci wykresw analiza obrazw rozwizywanie rwna nieliniowych rozwizywanie ukadw rwna rniczkowych te obliczenia symboliczne

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

3 / 95

Wstp

Literatura

www.gnu.org http://smilodon.berkeley.edu/octavetut.pdf http://volga.eng.yale.edu/sohrab/matlab_tutorial.html http://pl.wikipedia.org/wiki/GNU_Octave http://pl.wikibooks.org/wiki/GNU_Octave

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

4 / 95

Podstawy jzyka

Obliczenia elementarne
Octave jest programem sterowanym za pomoc konsoli umoliwi przygotowanie skryptw i ich pniejsze wykonywanie. Octave, w zasadzie, operuje wycznie macierzami. Nawet liczby s macierzami 1x1. Deniowanie macierzy: wpisa jawnie odpowiedni list elementw wczyta z pliku utworzy macierz korzystajc z zaimplementowanych funkcji napisa funkcj generujc macierz Gwn zalet jest atwo budowania macierzy nie ma koniecznoci deniowania rozmiaru tablicy, ponadto dziaania take s zdeniowane biorc pod uwag macierze.
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 5 / 95

Podstawy jzyka

Format zapisu danych

Rozpatrzmy prosty przykad: octave:1> 1/7 wynik ans = 0.14286 Jeeli do oblicze odwrotnych wykorzystamy zmienn ans: octave:2> 1/ans ans = 7 ale octave:3> 1/0.14286 ans = 6.9999

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

6 / 95

Podstawy jzyka

Format zapisu danych

Czyli widzielimy wynik przybliony! Zastosowanie penego formatu zapisu danych: > format long daje: octave:5> 1/7 ans = 0.142857142857143 octave:6> 1/ans ans = 7 Czyli otrzymalimy pen zgodno!

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

7 / 95

Podstawy jzyka

Macierze

Example A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] lub A = [16, 3, 2, 13; 5, 10, 11, 8; 9, 6, 7, 12; 4, 15, 14, 1] w wyniku otrzymujemy: 16 3 2 13 5 10 11 8 A= 9 6 7 12 4 15 14 1

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

8 / 95

Podstawy jzyka

Macierze

Example Wprowadzona macierzy jest magiczna. Mona to atwo sprawdzi: sum(A) obliczy sum kadej z kolumn: otrzymamy: ans = 34 34 34 34 ans jest skrtem od answer i pojawia si gdy nie deniujemy obliczanej wartoci. Jak obliczy sum wierszy?

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

9 / 95

Podstawy jzyka

Macierz

Najatwiej zastosowa transpozycj macierzy i sum kolumn (ktra jest sum wierszy macierzy wyjciowej) Example A ans = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

10 / 95

Podstawy jzyka

Macierz

Example wtedy obliczajc: sum(A) ans = 34 34 34 34

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

11 / 95

Podstawy jzyka

Macierze

Example Sprawdmy elementy diagonalne diag(A) ans = 16 10 7 1 i suma sum(diag(A)) ans = 34

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

12 / 95

Podstawy jzyka

Macierze

Example Pozostaa jeszcze antydiagonala. W Octavie nie wystpuje oryginalnie funkcja pozwalajca na takie obliczenia, ale mona uy funkcji zbudowanej do operacji na grace iplr zamieniajcej macierz kolumnami sum(diag(iplr(A))) ans = 34

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

13 / 95

Podstawy jzyka

Macierze

Example Odwoania do poszczeglnych elementw macierzy: A(i,j) np: A(1, 4) + A(2, 4) + A(3, 4) + A(4, 4) daje ans = 34

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

14 / 95

Podstawy jzyka

Macierze
Odwoanie si do elementu przekraczajcego zakres istniejcej macierzy spowoduje wygenerowanie kumunikatu bdu. Example Jeeli jednak dopiszemy dodatkowy element to rozmiar macierzy zostanie automatycznie zwikszony: X=A: X(4,5) = 17 16 3 2 13 0 5 10 11 8 0 A= 9 6 7 12 0 4 15 14 1 17

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

15 / 95

Podstawy jzyka

Zakresy

Operator zakresu : Operator dwukropka okrela zakres Example zapis 1 : 10 jest wektorem zawierajcym liczby od 1 do 10 niejednostkowy przyrost 100 : 7 : 50 100 93 86 79 .... 51 lub 0 : /4 :

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

16 / 95

Podstawy jzyka

Zakresy

elementy macierzy A(1:k,j) elementy od 1 do k kolumny j sum(A(1:4,4)) suma 4 elementw kolumny 4. sum(1:16) suma liczb od 1 do 16.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

17 / 95

Podstawy jzyka

Liczby
Standardowo Octave stosuje long format liczb wedug specykacji IEEE ok. 16 liczb dokadnoci w zakresie 10308 do 10308 . Mona stosowa zapis plogarytmiczny oznaczajc wykadnik przy pomocy litery e. Ponadto moliwe jest stosowanie liczb zespolonych oznaczanych przez i lub j jako przyrostek np. 16867876,3j Dostpne operatory: +,- dodawanie, odejmowanie * mnoenie / dzielenie \ lewe dzielenie potgowanie sprzenie hermitowskie

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

18 / 95

Podstawy jzyka

Funkcje

Cz funkcji stanowi skadnik podstawowego programu. Bardziej zoone maj posta funkcji zaimplementowanych w plikach m Example Przykady wyrae: (1+sqrt(5))/2 abs(3+4i) sqrt(besselk(4/3,3-2i)) exp(34)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

19 / 95

Podstawy jzyka

Generowanie macierzy
Podstawowe macierze Macierz zerowa: zeros np zeros(2,3) Macierz jedynek ones np. ones(3,4) Jeeli dodatkowo wykonamy 4*ones(3,4) to otrzymamy macierz zoon z 4, bo ten iloczyn bdzie wykonany zgodnie z denicj mnoenia macierzy przez liczb. Macierz losowa o rozkadzie jednorodnym rand np rand(1,10) Macierz o rozkadzie normalnym randn np. randn(4,4)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

20 / 95

Podstawy jzyka

Dane

Wczytywanie danych z pliku: Jeeli posiadamy dane zawarte w pliku ich wczytanie moe si odby przy pomocy instrukcji: load np load dane.dat Zapis danych w pliku: save nazwa_pliku nazwa_zmiennych np. save dane.dat A B Moliwy jest take import i eksport danych przy pomocy instrukcji identycznych jak w C (scanf, printf, fopen, fclose itp.)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

21 / 95

Podstawy jzyka

Edycja macierzy

czenie macierzy: operator [ ] B= [A A+34 ; A+48 A+ 16] Biorc pod uwag, e A byo macierz 4x4, macierz B bdzie 8x8 Usuwanie kolumn operator [ ] moe by take zastosowany do usuwania kolumn, bd wierszy X(:,2)=[] usuwa drug kolumn X Nie mona usuwa pojedynczych elementw macierzy w wyniku nie moemy otrzyma macierzy!

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

22 / 95

Podstawy jzyka

Dziaania na macierzach
Operacje na macierzach Operacje dodawania, odejmowania, mnoenia i dzielenia s realizowane przez zwyke operatory dziaa. Ponadto moemy dokonywa operacji specycznych dla macierzy: wyznacznik: det(A) odwrotno inv(A) Wartoci wasne: eig(A) wspczynniki wielomianu charakterystycznego: poly(A) = det(A I )

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

23 / 95

Podstawy jzyka

Dziaania zbiorowe
Operacji na elementach macierzy (tablicach) moemy dokona stosujc operatory poprzedzone kropk dodawanie i odejmowanie nie wymagaj dodatkowych oznacze w przypadku mnoenia, dzielenia, potgowania powinnimy zastosowa dziaanie z kropk Example np. A. A, A.3 Tworzenie cigu potg n=(0:9); pot = [n n.2 2.n] wygeneruje 3 kolumny kolejne liczby, ich kwadraty i kolejne potgi 2.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

24 / 95

Podstawy jzyka

Dziaania zbiorowe

Uwaga Elementarne funkcje matematyczne dziaaj na tablicach poprzez dziaanie na poszczeglnych jej elementach.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

25 / 95

Podstawy jzyka

Formatowania

Posta wyniku

Formatowanie wyniku: w zalenoci od potrzeb dostpny jest szereg formatowa wyjcia: niech x = [4/3 1.2345e 6] wtedy format short 1.3333 0.0000 format short e 1.3333e+000 1.2345e-006

format short g 1.3333 1.2345e-006

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

26 / 95

Podstawy jzyka

Formatowania

Format wyniku
format long 1.33333333333333

0.00000123450000 1.234500000000000e-006

format long e 1.33333333333333e+000 format long g 1.33333333333333 format bank 1.33 0.00 format rat 4/3 1/810045 format hex 35555555555555
Janusz Mikiewicz (IFT)

1.2345e-006

3eb4b6231abfd271
Octave Wrocaw, 2011 27 / 95

Podstawy jzyka

Formatowania

Format wyniku

Uwaga Jeeli wartoci w tablicy przekraczaj 103 lub s mniejsze od 103 Octave w formatach short i long zastosuje wsplny wspczynnik do wszystkich elementw tablicy. Ponadto dostpny jest jeszcze format compact optymalizujcy wykorzystanie miejsca na ekranie.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

28 / 95

Podstawy jzyka

Formatowania

Format wyniku

Obliczenia porednie Po napisaniu formuy i zaakceptowaniu pojawia si ona na ekranie, jednake przy pracy z duymi tablicami nie jest to konieczne, ponadto zajmuje do duo czasu. W tej sytuacji mona nie wywietla wyniku poprzez zakoczenie linii rednikiem.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

29 / 95

Podstawy jzyka

Formatowania

Formatowania

Jeeli formua jest szczeglnie duga i nie daje si zmieci wtedy zakoczenie linii biecej wielokropkiem ... pozwala przenie pisanie formuy do kolejnego wiersza. Formu poprzedni mona przywoa przy pomocy kursorw. Dostpne s take inne operacje formatowania.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

30 / 95

Funkcje zaawansowane

Obliczenia statystyczne

Uwaga Przy analizie statystycznej przyjmuje si domylnie przyjmuje si e dane znajduj si w kolumnach.

Example mean(A) zwrci wiersz zawierajcy rednie z poszczeglnych kolumn

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

31 / 95

Funkcje zaawansowane

Obliczenia statystyczne
Podstawowe funkcje statystyczne rednia, wariancja, odchylenie standardowe, kowariancja, skono, kurtoza, analiza wariancji ANOVA, T-test, test Kolmogorova-Smirnofa, rozkady statystyczne ...

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

32 / 95

Funkcje zaawansowane

Najczciej wykorzystywane funkcje


Example Wygenerujmy macierz losow a=rand(10,5) 0.7599 0.6651 0.5719 0.6877 0.3569 0.3646 0.6618 0.7656 0.7812 0.7028 0.8130 0.4628 0.2104 0.7922 0.2878 0.5719 0.8326 0.3182 0.0033 0.1025 0.4942 0.2629 0.6871 0.3914 0.4568 0.4973 0.7993 0.6868 0.5661 0.4426 0.9442 0.0408 0.0279 0.7035 0.5057 0.7946 0.0758 0.5439 0.4217 0.4611

0.0489 0.3643 0.6270 0.4874 0.1810 0.7784 0.5156 0.4915 0.2865 0.8511

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

33 / 95

Funkcje zaawansowane

Najczciej wykorzystywane funkcje


Example Podstawowe funkcje statystyczne rednia arytmetyczna b1=mean(a) 0.4562 0.5293 0.5696 0.4965 0.4632 harmoniczna b2=mean(a,h) 0.1507 0.4671 0.0316 0.2069 0.2365 geometryczna b3=mean(a,g) 0.3163 0.4987 0.3560 0.3767 0.3695

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

34 / 95

Funkcje zaawansowane

Najczciej wykorzystywane funkcje


Example mediana b4=median(a) 0.4755 0.5206 0.6169 0.5174 0.4894 odchylenie standardowe b5=std(a) 0.2889 0.1824 0.2790 0.2616 0.2523 kowariancja b6=cov(a) 0.0835 -0.0144 0.0062 -0.0349 -0.0257 -0.0144 0.0332 -0.0012 0.0212 -0.0065 0.0062 -0.0012 0.0778 0.0073 0.0218 -0.0349 0.0212 0.0073 0.0684 -0.0111 -0.0257 -0.0065 0.0218 -0.0111 0.0636
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 35 / 95

Funkcje zaawansowane

Najczciej wykorzystywane funkcje


Example wspczynnik korelacji liniowej b7=corrcoef(a) 1 -0.2739 0.0773 -0.4624 -0.3530 -0.2739 1 -0.0253 0.4462 -0.1420 0.0773 -0.0253 1 0.1001 0.3098 -0.4624 0.4462 0.1001 1 -0.1696 -0.3530 -0.1420 0.3098 -0.1696 1 skono b8=skewness(a) -0.1341 -0.0377 -0.5797 -0.54043 -0.0358 kurtoz b9=kurtosis(a) -1.5911 -1.6662 -0.7581 -1.2250 -1.2707
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 36 / 95

Funkcje zaawansowane

Najczciej wykorzystywane funkcje


Example Zbiorcza statystyka b11=statistics(a) minimum pierwszy kwantyl mediana trzeci kwantyl maximum rednia std skono kurtoza

0.0279 0.2629 0.0033 0.0408 0.0489 0.2104 0.3646 0.4217 0.3914 0.2865 0.4568 0.4973 0.5719 0.4628 0.4874 0.7599 0.7028 0.7993 0.6877 0.6270 0.8326 0.7922 0.9442 0.7946 0.8511 0.4562 0.5293 0.5696 0.4965 0.4632 0.2889 0.1824 0.2790 0.2616 0.2523 -0.1341 -0.0377 -0.5797 -0.5404 -0.0358 -1.5911 -1.6662 -0.7581 -1.2250 -1.2707

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

37 / 95

Funkcje zaawansowane

Najczciej wykorzystywane funkcje

Example Spearman rank correlations b12=spearman(a) 1 -0.3939 0.2484 -0.5030 -0.2121 -0.3939 1 -0.1757 0.4909 -0.1272 0.2484 -0.1757 1 -0.1272 0.3818 -0.5030 0.4909 -0.1272 1 -0.3939 -0.2121 -0.1272 0.3818 -0.3939 1

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

38 / 95

Funkcje zaawansowane

Najczciej wykorzystywane funkcje


Example Odejmowana jest rednia b13=center(a) 0.3037 0.1357 0.0023 0.1912 -0.4142 -0.0992 -0.1647 0.0922 0.2690 -0.0988 0.3249 0.1734 0.2433 -0.0337 0.1638 -0.2457 0.2629 -0.2817 0.0754 0.0241 0.3764 -0.2111 -0.5662 -0.3940 -0.2821 0.0380 -0.2664 0.1175 -0.1051 0.3152 0.0006 -0.0320 0.2297 0.1902 0.0524 0.1099 -0.0866 0.3746 -0.4556 0.0283 -0.4283 0.17418 -0.0638 0.2980 -0.1767 -0.3804 0.01462 -0.1479 -0.0353 0.3879
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 39 / 95

Funkcje zaawansowane

Najczciej wykorzystywane funkcje


Example Standaryzacja - odejmowana jest rednia i normowana przez odchylenie standardowe b10=studentize(a) 1.0510 0.7442 0.0084 0.73083 -1.6417 -0.3435 -0.9029 0.33052 1.0285 -0.3916 1.1246 0.9511 0.8721 -0.1288 0.6491 -0.8504 1.4414 -1.0098 0.2882 0.0958 1.3027 -1.1574 -2.0294 -1.5061 -1.1182 0.1315 -1.46068 0.4211 -0.4019 1.2493 0.0021 -0.1755 0.8232 0.7270 0.2079 0.3803 -0.4752 1.3426 -1.7416 0.1122 -1.4821 0.9549 -0.2287 1.1392 -0.7002 -1.3164 0.0801 -0.5300 -0.1352 1.5372
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 40 / 95

Funkcje zaawansowane

Najczciej wykorzystywane funkcje


Example Kategoryzacja cut(a(:,1),4) 1 1 1 2 1 4 4 3 2 1

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

41 / 95

Funkcje zaawansowane

Testy statystyczne

anova (y, g) analiza wariancji - czy rednie odpowiednich grup s rne, wektor g zawiera dane dotyczce kategoryzacji danych, jeeli y jest macierz to g nie jest wymagane, a kada z kolumn jest traktowana jako niezalena kategoria bartlett_test (x1, ...) test jednorodnoci wariancji chisquare_test_homogeneity (x, y, c) testuje czy obie prby nale do tego samego rozkadu chisquare_test_independence (x) test niezalenoci danych cor_test (x, y, alt, method) test korelacji obu prbek, alt okrela hipotez !=, <>, >, <; methods: pearson, spearman, kendall

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

42 / 95

Funkcje zaawansowane

Testy statystyczne

kolmogorov_smirnov_test (x, dist, params, alt) zgodnoci z wybranym rozkadem t_test (x, m, alt) test zgodnoci z rozkadem normalnym u_test (x, y, alt) Mann-Whitney U-test Intersujca jest take lista dostpnych rozkadw statystycznych niezwykle bogata!

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

43 / 95

Funkcje zaawansowane

Operacje logiczne

Bardzo uyteczn operacj jest logiczne przypisywanie (subscripting) denicja Niech X bdzie macierz, natomiast L macierz tego samego rozmiaru, tylko bdc wynikiem operacji logicznej. Wtedy X(L) daje macierz dla ktrych L byo niezerowe. Example X= [1, 2, 3, NaN, 4] X=X(isnite(X)) X= [1, 2, 3, 4]

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

44 / 95

Funkcje zaawansowane

Programowanie

Operatory logiczne
Ocatve jest nie doskonaym jzykiem wysokiego rzdu przystosowanym do oblicze numerycznych. Jednym z podstawowych struktur kadego jzyka programowania s instrukcje warunkowe: Dostpnymi tutaj s: if swich and case, for while continue break try - catch return
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 45 / 95

Funkcje zaawansowane

Programowanie

Operatory logiczne
if, elseif, else Example if a==2 b=2 elseif a==3 b=4 else b=5 endif W przypadku liczb powysze instrukcje nie powoduj niejednoznacznoci.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

46 / 95

Funkcje zaawansowane

Programowanie

Trudnoci
Jednak w przypadku macierzy wynik operacji A==B nie jest tak jednoznaczna. Instrukcja ta nie sprawdza czy dane macierze s identyczne, a raczej sprawdza gdzie s one rwne. Wynikiem jest inna macierz pokazujc identyczno poszczeglnych elementw macierzy (0,1). Ponadto, gdy rozmiary tych macierzy si rni to zwrcony zostanie kod bdu. Zatem waciw metod deniowania warunkw logicznych jest stosowania odpowiednich funkcji zwracajcych liczb np. isequal(A,B) isempty all any
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 47 / 95

Funkcje zaawansowane

Programowanie

Trudnoci
Co wicej w przypadku wikszoci macierzy, aden z typowych logicznych warunkw (==, <, >) nie daje jednoznacznych wynikw. if A > B wikszy elseif A < B mniejszy elseif A == B rwny else nieokrelony endif Ta procedura w wikszoci przypadkw skoczy si niepowodzeniem.
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 48 / 95

Funkcje zaawansowane

Programowanie

Warunkowe

switch, case Instrukcja warunkowa switch wykonuje grup instrukcji warunkowych na podstawie wartoci parametru. Dopuszczalne s instrukcje: case i otherwise.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

49 / 95

Funkcje zaawansowane

Programowanie

Example switch (a) case 0 zero case 1 jeden case 2 dwa .... otherwise to nie bya liczba endswitch

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

50 / 95

Funkcje zaawansowane

Programowanie

W odrnieniu do jzyka C w Octavie instrukcja switch zostaje przerwana po natraeniu na waciwy warunek zatem nie jest konieczne stosowanie instrukcji przerywajcej wykonywanie caoci switcha. Z drugiej strony nie moemy oczekiwa, e kilka instrukcji speniajcych dany warunek zostanie wykonanych. Example Ptla for s=0 for n =1:30 s = s + n; endfor s Wysumowalimy w ten sposb liczby od 1 do 30. Wskazanym jest stosowanie wci w przypadku ptli.
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 51 / 95

Funkcje zaawansowane

Programowanie

while do spenienia zadanego warunku. Example Rozpatrzmy przypadek bisekcji a = 0; fa = -Inf; b = 3; fb = Inf; while a-b > eps*b x = ( a + b)/2 fx = x3 - 2*x-5; if sign(fx) == sign(fa) a = x; fa = fx; else b = x; fb = fx; end endwhile x

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

52 / 95

Funkcje zaawansowane

Programowanie

Ptla continue Instrukcja continue przerywa wykonanie zestawu instrukcji w ptli i powoduje przejcie do kolejnej iteracji w ptli. Example zliczanie linii kodu w pliku d = fopen(magic.m,r); count = 0; while -feof(d) line = fgetl(d); if isempty(line) | strncmp(line,%,1) continue end count = count + 1; endwhile disp(sprintf(%d linii count));

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

53 / 95

Funkcje zaawansowane

Programowanie

break Instrukcja break pozwala na opuszczenie ptli for lub while, bez koniecznoci jej dalszego wykonania. W przypadku ptli zagniedonych instrukcja break przerywa jedynie ptl wewntrzn.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

54 / 95

Funkcje zaawansowane

Programowanie

Example Poprawiona bisekcja: a = 0; fa = -Inf; b = 3; fb = Inf; while a-b > eps*b x = ( a + b)/2 fx = x3 - 2*x-5; if fx == 0 break elseif sign(fx) == sign(fa) a = x; fa = fx; else b = x; fb = fx; endif endwhile x

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

55 / 95

Funkcje zaawansowane

Programowanie

try catch oglna posta tych instrukcji wyglda nastpujco: try instrukcja ... instrukcja catch instrukcja ... instrukcja end

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

56 / 95

Funkcje zaawansowane

Programowanie

Instrukcje te su kontroli bdw zgaszanych przez program. Dziaanie tego schematu polega na wykonywaniu pierwszej serii instrukcji dopki nie pojawi si bd, wtedy instrukcje catch staraj si zniwelowa efekty wystpienia tego bdu. Jest to mechanizm znany z jzyka C.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

57 / 95

Funkcje zaawansowane

Programowanie

return Instrukcja ta suy do zakoczenia biecej serii instrukcji i przekazania kontroli. Wywoywane funkcje przekazuj kontrol do gwnego programu po zakoczeniu instrukcji. Polecenie return pozwala na wczeniejsze przekazanie kontroli do gwnego nurtu programu.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

58 / 95

Funkcje zaawansowane

Programowanie

Oprcz najbardziej naturalnych macierzy 2 wymiarowych, mona te zadeklarowa i uywa tablic wielowymiarowych. Example R = randn (3,4,5); Otrzymujemy tablic 3x4x5. Do elementw takiej tablicy odwoujemy si poprzez podanie wszystkich wsprzdnych: R(2,4,1)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

59 / 95

Funkcje zaawansowane

Programowanie

Struktury danych komrki macierzowe


Jest to konstrukcja pozwalajca stworzy kopie fragmentu wyjciowej macierzy. Utworzenie komrki macierzowej moe si odby poprzez instrukcj cell lub nawiasy klamrowe. Example C = { A sum A prod(prod(A)) } wynikiem bdzie macierz 1x3 postaci C = [4x4 double] [1x4 double] [20922789888000] Zapis 2 pierwszych jest zawony ze wzgldu na dostpne miejsce.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

60 / 95

Funkcje zaawansowane

Programowanie

Struktury danych

Odwoanie do poszczeglnych elementw komrki macierzowej odbywa si przez podanie indeksw w nawiasach klamrowych. Konstrukcja ta jest szczeglnie uyteczna gdy konieczne jest zapisanie wielu podobnych macierzy. Example M = cell(8,1); for n = 1:8 M(n) = magic(n); end

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

61 / 95

Funkcje zaawansowane

Programowanie

Struktury danych

Litery i znaki Zmienn tekstow moemy wprowadzi posugujc si apostrofami: s=czesc Tekst ten jest zapamitywany przy pomocy macierzy przechowujcej po jednym znaku tego wyrazu. Oczywicie litery s zapamitywane przy pomocy liczb. Moliwa jest konwersja: a = double(s); a take procedura odwrotna s = char(a)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

62 / 95

Funkcje zaawansowane

Programowanie

Struktury danych
Struktury w Octavie s wielowymiarowymi tablicami, do ktrych dostp zapewnia operator pola. Example S.nazwa = Jan Nowak; S.wynik = 35; S.ocena = 4+; Kolejne elementy: S(1).nazwa = Jan Kowalski; S(1).wynik = 38; S(1).ocena = 5;

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

63 / 95

Funkcje zaawansowane

Programowanie

Struktury danych

Dane mog by wprowadzone bezporednio lub przy pomocy funkcji: S(2) = struct(nazwa,Piotr Nowy, wynik,33,ocena,4) Odwoanie si do wszystkich pl: S.ocena Utworzenie komrki macierzowej { S.ocena }

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

64 / 95

Funkcje zaawansowane

Programowanie

Plik funkcji

Pliki Octave mona podzieli na 2 grupy: skrypty funkcje. W przypadku skryptu nie moemy przekaza adnych danych ani nie jest zwracany wynik. Wszystko dzieje si w obrbie tego skryptu. Funkcje mog zwraca wynik oraz pobiera wartoci zmiennych. Wewntrzne zmienne s zmiennymi lokalnymi. Nazwa pliku powinna by zgodna z nazw funkcji, ktr zamierzamy uy. Rozszerzeniem jest litera m. Najprostsze jest umieszczenie tej funkcji w katalogu roboczym.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

65 / 95

Funkcje zaawansowane

Programowanie

Plik funkcji

W przypadku wywoania skryptu nie moemy podawa zmiennych, ani wyrzuca wyniku, jednak po wykonaniu skryptu wartoci jak otrzymay odpowiednie zmienne pozostaj w programie i mona z nich skorzysta.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

66 / 95

Funkcje zaawansowane

Programowanie

Example Utwrzmy plik magicrank.m r = zeros(1,32); for n = 3:32 r(n) = rank(magic(n)); end r bar(r) napisanie polecenia: magicrank Spowoduje wykonanie powyszego skryptu.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

67 / 95

Funkcje zaawansowane

Programowanie

Example Sumowanie liczb w zadanym przedziale (a,b) sumowanie.m function wynik = sumowanie(a,b) % dodatkowe informacje widoczne w instrukcji help s=0; for i= a:b s=s+i; end wynik = s

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

68 / 95

Funkcje zaawansowane

Programowanie

Dostpne typy funkcji anonimowe Najprostsza z funkcji. W zasadzie nie wymaga osobnego pliku, poniewa jest to funkcja mieszczca si w jednej linii. Skadnia: f = (argumenty) wyraenie np. kwadrat = (x) x. 2 nadrzdne i podrzdne Te funkcje wymagaj zapisania ich w plikach. Kady z tych plikw wymaga okrelenia funkcji nadrzdnej, ktrej wynik bdzie zwracany. Natomiast podfunkcje peni funkcj usugow w stosunku do nadrzdnej.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

69 / 95

Funkcje zaawansowane

Programowanie

prywatne Funkcja ta moe by uyta tylko w limitowanej grupie innych funkcji. Funkcje te s umieszczane w specjalnym katalogu private. Katalog ten jest przeszukiwany w pierwszej kolejnoci w poszukiwaniu funkcji wywoywanej przez funkcje zawart w katalogu nadrzdnym. Funkcje te nie s dostpne spoza katalogu nadrzdnego.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

70 / 95

Funkcje zaawansowane

Programowanie

zagniedone np.: function x = A(p1,p2) .... B(p2) function y = B(p3) ... end ... endfunction Funkcje te maj wydzielon swoj przestrze w pamici. Do zmiennych tam zawartych maj dostp wszystkie funkcje, w ktrych wstpuje dana funkcja. przecione Dziaaj w sposb analogiczny do innych jzykw programowania.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

71 / 95

Funkcje zaawansowane

Programowanie

Zmienne globalne: Gdy konieczne jest stosowanie tej samej zmiennej w rnych funkcjach to wskazane jest zadeklarowanie tej zmiennej jako zmienn globaln: funkcja spadek.m function h = spadek(t) global GRAVITY h = 1/2*GRAVITY*t 2; Wtedy piszc w programie: global GRAVITY GRAVITY = 10; y = spadek((0:.1:5)); Otrzymujemy wynik zaleny od uprzednio wprowadzonej wartoci zmiennej.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

72 / 95

Funkcje zaawansowane

Programowanie

Funkcja funkcji Dotyczy to nieliniowych funkcji o zmiennych skalarnych. Funkcja ta operuje na wartociach innej funkcji. Tego typu funkcje wystpuj w nastpujcych zagadnieniach: znajdowanie miejsc zerowych optymalizacja kwadratury (numeryczne cakowanie) rwnania rniczkowe

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

73 / 95

Funkcje zaawansowane

Programowanie

Przyspieszanie oblicze Wektoryzacja Znaczce przyspieszenie oblicze mona uzyska korzystajc z wektorowych wasnoci Octave i zamieniajc ptle na operacje wektorowe lub macierzowe. Example x = .01; for k = 1:1001 y(k) = log10(x); x = x + .01; end lub x = .01:.01:10; y = log10(x);

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

74 / 95

Funkcje zaawansowane

Programowanie

Przyspieszanie oblicze W przypadku gdy nie jest moliwa rezygnacja z ptli wskazane jest wstpne zaalokowanie pamici Example r = zeros(32,1); for n = 1:32 r(n) = rank(magic(n)); end Bez wczeniejszej alokacji w kadym kroku macierz bdzie powikszana, czyli kopiowana do wikszej co znaczco spowalnia dziaanie programu.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

75 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Aproksymacja na przykadzie

Parametry funkcji aproksymowanej moemy w atwy sposb znale stosujc operator backslasha \ Example Mamy dane: t = [0 .3 .8 1.1 1.6 2.3] ; y = [0.5 0.82 0.82 1.14 1.25 1.35 1.4] ; plot(t,y,+)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

76 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Aproksymacja na przykadzie
Wykresem tych danych jest:
1.4 1.3 1.2 1.1 1 0.9 0.8 0.7 0.6 0.5 0.4 0 0.5 1 1.5 2 2.5

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

77 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Wielomian
Dopasujmy wielomian drugiego rzdu. Problem dopasowania metod najmniejszych kwadratw mona sprowadzi do rozwizania ukadu rwna: 2 y1 1 t1 t1 2 y2 1 t2 t2 a0 y3 1 t3 t 2 3 y4 = 1 t4 t 2 a1 4 a2 y5 1 t5 t 2 5 2 y6 1 t6 t6 macierz X generujemy: X = [ones(size(t)) t t.2 ] Natomiast odpowiednie wspczynniki otrzymamy: a=X\y

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

78 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Wynik
W efekcie dostajemy krzyw
1.5 1.4 1.3 1.2 1.1 1 0.9 0.8 0.7 0.6 0.5 0.4 0 0.5 1 1.5 2 2.5

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

79 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Udoskonalenie
Jeeli stwierdzimy, e wskazana jest znacznie bardziej zoona funkcja to procedur naley powtrzy: y = a0 + a1 e t + a2 te t otrzymujc:
1.5 1.4 1.3 1.2 1.1 1 0.9 0.8 0.7 0.6 0.5 0.4 0 0.5 1 1.5 2 2.5

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

80 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Wysze wymiary
Podobnie moemy rozway problem wielowymiarowy. Mamy dane: x1 = [.2 .5 .6 .6 1.0 1.1] ; x2 = [.1 .3 .4 .9 1.1 1.4] ; y = [.17 .26 .28 .23 .27 .24] ; Poszukiwane rwnanie ma posta: y = a0 + a1 x1 + a2 x2 Deniujc macierz: X = [ones(size(x1)) x1 x2]; Obliczamy warto wspczynnikw: a =X \y a= 0.1018 0.4844 0.2847
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 81 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Jako dopasowania

Jako otrzymanego wyniku moemy sprawdzi badajc bd maksymalny: Y=X*a; blmax= max(abs(Y-y)) blmax = 0.0038

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

82 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Interpolacja wielomianowa

Instrukcja wielomian = polyt (danex, daney, rzd) Otrzymujemy wspczynniki wielomianu o zadanym stopniu Funkcj komplementarn do znajdowania wielomianu jest funkcja obliczajca warto znalezionego wielomianu: Instrukcja polyval (wielomian,dane)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

83 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Interpolacja

Okrelenie granic bdu Przy okrelaniu granic bdu istotne jest przyjcie okrelonego modelu statystycznego. W wikszoci przypadkw przyjmuje si, e dane s opisane rozkadem normalnym. Tym samym przedzia ufnoci otrzymujemy na podstawie odchylenia standardowego.

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

84 / 95

Funkcje zaawansowane

Aproksymacje i interpolacje

Przykad

load dane load czas sdane = (dane - mean(dane))./ std(dane) [p2, s2] = polyt(sdane, czas, 2); [pop2, del 2] = polyval (p2, sdane, s2); plot(dane,czas,+, dane,pop2,g-,dane,pop2+2*del2,r:, ... dane.pop2-2*del2,r:), grid on

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

85 / 95

Funkcje zaawansowane

Wykresy

Wykresy

Przy sporzdzaniu wykresw Octave korzysta z GnuPlota. Cz polece zostaa jednak przedeniowana, zatem skadnia jest podobna ale nie identyczna. Praktyka pokazuje, e najwygodniej jest wyniki wyeksportowa do pliku a same wykresy sporzdzi w GnuPlocie. Octave dysponuje mozliwoci zapisu wykresu do popularnych formatw gracznych (ps, eps, jpeg, ti ...).

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

86 / 95

Funkcje zaawansowane

Wykresy

Wykresy

Podstawow instrukcj jest plot , ktra jako argumenty przyjmuje wsprzdne X i Y punktw naszego wykresu. Mona poda tylko wartoci funkcji Y, wtedy jako zmienn x przyjmowany jest numer kolejny. Dodatkowe parametry linia / punkty -, . rodzaj znacznikw +,*, o, x, ; kolory liczby od 1 do 6 tytu ;title;

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

87 / 95

Funkcje zaawansowane

Wykresy

Przykady

1.5 lin

0.5

-0.5

-1 0 1 2 3 4 5 6 7

x=0:0.1:6.3 plot(x,sin(x),"-",x,cos(x),"*",x,0.2*x,"x;lin;")

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

88 / 95

Funkcje zaawansowane

Wykresy

Przykady
1.5 sin(x) cos(x) y=0.2x

0.5

-0.5

-1 0 1 2 3 4 5 6 7

x=0:0.1:6.3 plot(x,sin(x),"-;sin(x);",x,cos(x),"*4;cos(x); \\ ",x,0.2*x,"x2;y=0.2x;")


Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 89 / 95

Funkcje zaawansowane

Wykresy

Przykady

x=0:0.1:6.3 y=sin(x) plot(x,y,"o","markersize", 15)


Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 90 / 95

Funkcje zaawansowane

Wykresy

Wykresy uwaga

Octave nie jest progamem symbolicznym, zatem do wykonania wykresu potrzebuje tabeli danych. Najpierw generujemy tabele argumentw funkcji: x=0:2:1000 x=linspace(0,1000,500) x=logspace(0,1000,500)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

91 / 95

Funkcje zaawansowane

Wykresy

Wykresy zapis do pliku

Zapis do pliku umoliwia funkcja print . Example print(prz3.eps,-depsc2) Funkcja ta umoliwia okrelenie formatu (ps, eps, png, jpg, gif, pdf ... ), rozdzielczoci (-rNUM w pixelach na cal), rozmiaru (-Sxsize, ysize np. -S640,489) rodzaju czcionki (-Ffontname:size)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

92 / 95

Funkcje zaawansowane

Wykresy

Wykres

Example x= 0: pi/100:2*pi; y= sin(x); plot(x,y) Opis wykresu: xlabel(x=0: pi/100:2*pi) ylabel(sin(x)) title(wykres funkcji sinus)

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

93 / 95

Funkcje zaawansowane

Wykresy

Wykresy wielokrotne
Wykres wielokrotny: subplot(m,n,p) n,m oznaczaj wymiar tablicy wynikw, a p konkretne pole. Example subplot(2,2,1) octave:28> plot(x,y) octave:29> subplot(2,2,2) octave:30> plot(x,2*y) octave:31> plot(x,abs(y)) octave:32> subplot(2,2,3) octave:33> plot(x,y.2) octave:34> subplot(2,2,4) octave:35> plot(x,-y.2) octave:36> print(prz4.eps,-depsc2)
Janusz Mikiewicz (IFT) Octave Wrocaw, 2011 94 / 95

Funkcje zaawansowane

Wykresy

Przykady

0.8 0.5

0.6 0 0.4

-0.5 0.2

-1 0 1 2 3 4 5 6 7

0 0 1 2 3 4 5 6 7

0.8

-0.2

0.6

-0.4

0.4

-0.6

0.2

-0.8

0 0 1 2 3 4 5 6 7

-1 0 1 2 3 4 5 6 7

Janusz Mikiewicz (IFT)

Octave

Wrocaw, 2011

95 / 95

You might also like