Professional Documents
Culture Documents
Octave
Octave
Janusz Mikiewicz
IFT
Wrocaw, 2011
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.
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
Octave
Wrocaw, 2011
3 / 95
Wstp
Literatura
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
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
Octave
Wrocaw, 2011
6 / 95
Podstawy jzyka
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!
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
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?
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
Octave
Wrocaw, 2011
10 / 95
Podstawy jzyka
Macierz
Octave
Wrocaw, 2011
11 / 95
Podstawy jzyka
Macierze
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
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
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
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 :
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.
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
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)
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)
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.)
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!
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 )
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.
Octave
Wrocaw, 2011
24 / 95
Podstawy jzyka
Dziaania zbiorowe
Uwaga Elementarne funkcje matematyczne dziaaj na tablicach poprzez dziaanie na poszczeglnych jej elementach.
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
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.
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.
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.
Octave
Wrocaw, 2011
30 / 95
Funkcje zaawansowane
Obliczenia statystyczne
Uwaga Przy analizie statystycznej przyjmuje si domylnie przyjmuje si e dane znajduj si w kolumnach.
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 ...
Octave
Wrocaw, 2011
32 / 95
Funkcje zaawansowane
0.0489 0.3643 0.6270 0.4874 0.1810 0.7784 0.5156 0.4915 0.2865 0.8511
Octave
Wrocaw, 2011
33 / 95
Funkcje zaawansowane
Octave
Wrocaw, 2011
34 / 95
Funkcje zaawansowane
Funkcje zaawansowane
Funkcje zaawansowane
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
Octave
Wrocaw, 2011
37 / 95
Funkcje zaawansowane
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
Octave
Wrocaw, 2011
38 / 95
Funkcje zaawansowane
Funkcje zaawansowane
Funkcje zaawansowane
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
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!
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]
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.
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.
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
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
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));
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.
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
Octave
Wrocaw, 2011
55 / 95
Funkcje zaawansowane
Programowanie
try catch oglna posta tych instrukcji wyglda nastpujco: try instrukcja ... instrukcja catch instrukcja ... instrukcja end
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.
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.
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)
Octave
Wrocaw, 2011
59 / 95
Funkcje zaawansowane
Programowanie
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
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)
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;
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 }
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.
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.
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.
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
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.
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.
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.
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.
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
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);
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.
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,+)
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
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
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
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
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
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)
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.
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
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 ...).
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;
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;")
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
Funkcje zaawansowane
Wykresy
Przykady
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)
Octave
Wrocaw, 2011
91 / 95
Funkcje zaawansowane
Wykresy
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)
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)
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
Octave
Wrocaw, 2011
95 / 95