1 GNU Octave GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej. Octave zapewnia: sporą bibliotęke użytecznych funkcji i algorytmów; możliwośc tworzenia przeróżnych wykresów; możliwość pisania własnych funkcji, tym samym na rozszerzanie Octave. Octave jest klonem komercyjnego programu Matlab. Licencja GNU oznacza, że program można pobrać wraz z kodem źródłowym. Przykładowe pola zastosowań to: analiza danych przetwarzanie obrazów; analizy statystyczne; obliczenia w ekonometrii; i wiele innych. Octave nie potrafi prowadzić obliczeń symbolicznych jak Sage czy Mathematica. Instalacja pod Linuksem jest z reguły bardzo prosta (z reguły wystarczy zainstalować pakiet octave), pod Windows jest to nieco bardziej skomplikowane: http://wiki.octave.org/octave_for_windows. 1.1 Zmienne Zmienne skalarne tworzymy i nadajemy im wartości używając operatora = : a = 1 Tworzenie wektorów i macierzy jest podobne: Wektor rzędowy: r = [1 2 3] Wektor kolumnowy: c = [1; 2; 3] Macierz: A = [1 2 3; 4 5 6; 7 8 9] 1
Wielkośc liter ma znaczenie: A to nie to samo co a. Poza tym nazwy są dowolne, choć dobrze trzymać się konwencji: liczby i wektory zaczynają się małymi literami, macierze wielkimi. Aby zmieniać wartości pojedynczych elementów wektorów i macierzy można używać indeksów. Przy powyższych defnicjach możemy napisać: r(2) c(3) A(2,3) Można też pobrać cały rząd czy kolumnę macierzy jako wektor używając dwukropka: A(2,:) A(:,3) Równie dobrze można rząd czy kolumnę macierzy zastąpić innym wektorem, o ile wymiar jest odpowiedni: A(2,:) = r Wyjątkiem od tej reguły jest zapisanie liczby wtedy cały rząd czy kolumna macierzy będzie zamieniona na podaną wartość. Co robią poniższe wyrażenia? r = [r 4 5] A(2,:) = [] r = [1:2:10] Przydatne funkcje: rand tworzy wektory i macierze wypełnione liczbami losowymi z przedziału (0, 1) zeros tworzy wektory i macierze wypełnione zerami ones tworzy wektory i macierze wypełnione jedynkami eye tworzy macierze identycznościowe Aby odczytać zawartość zmiennej wystarczy wpisać ją samą na wejściu Octave. Zmienne można też usuwać używając polecenia clear: clear(a) 2
1.2 Operacje na zmiennych W poniższych przykładach A, B, są macierzami, a, b, liczbami. A+A dodawanie macierzy (tego samego wymiaru) a+a dowanie liczby do każdego elementu macierzy A*B normalny iloczyn macierzy a*a iloczyn macierzy przez liczbę A^a podniesienie macierzy kwadratowej do potęgi A.*B iloczyn Hadamarda macierzy (tego samego wymiaru) det(a) wyznacznik macierzy inv(a) macierz odwrotna cond(a,p) wskażnik uwarunkowania macierzy, jeżeli pominiemy, to p = 2 eig(a) wartości własne macierzy rank(a) ranga macierzy trace(a) ślad macierzy A.^a podniesienie wszystkich elementów macierzy do potęgi A' macierz hermitowsko sprzężona do A A.' macierz transponowana do A A\B rozwiązuje równanie macierzowe Ax = B B/A rozwiązuje równanie macierzowe xa = B 1.3 Porównywanie zmiennych x==y jest prawdą gdy x jest równe y x>y jest prawdą gdy x jest większe y x<y jest prawdą gdy x jest mniejsze y x>=y jest prawdą gdy x jest większe niż y x<=y jest prawdą gdy x jest mniejsze niż y x!=y jest prawdą gdy x jest różne od y 3
1.4 Przydatne funkcje sin(x) sinus cos(x) kosinus tan(x) tangens pi liczba π polyval(r, x) wartość wielomianu o współczynnikach w wektorze r w x, np. polyval([1.8-1 2 0 4], x) == 1.8x 4 x 3 + 2x 2 + 4 exp(x) funkcja wykładnicza log(x) logarytm naturalny e liczba e sqrt(x) pierwiastek kwadratowy nthroot(x, n) n-ty pierwiastek min(r) najmniejszy element wektora x max(r) największy element wektora x sum(a) suma elementów macierzy prod(a) produkt elementów macierzy roots(r) pierwiastki wielomianu o współczynnikach r polyinteg(r) współczynniki całki wielomianu o współczynnikach r polyderive(r) współczynniki pochodnej wielomianu o współczynnikach r Większośc z tych funkcji, gdy argumentem jest macierz, wyliczy macierz odpowiednich wyników. Pełna lista tutaj: http://www.gnu.org/software/octave/doc/interpreter/function-index. html. 4
1.5 Wykresy Kilka przykładów do samodzielnego wykonania (komenda clf czyści obecny wykres): x = [0:0.05:8] f = polyval([0.5-3 -8 5], x) plot(x, f) fplot("sin", [0, 2*pi], 100) x = [-2:0.1:2]; y = x; [X Y] = meshgrid(x, y); Z = X.^3 - X.*Y.^2*3; surface(x, Y, Z) 1.6 Skrypty Polecenie cd <katalog> pozwala na zmianę bieżącego katalogu. Zamiast wpisywać polecenia ręcznie, można kazać Octave pobrać komendy z pliku. Wpisanie skrypt1 znajdzie plik skrypt1.m w biezącym katalogu i wykona go, linijka po linijce tak jakbyśmy wszystko wpisali ręcznie. Wejście, wyjście Skrypt może żądać danych od użytkownika i wypisywać dane jak w poleceniu: a = input("podaj liczbe: ") # To jest komentarz # Tutaj obliczenia disp("wynik: ") disp(a) Instrukcja warunkowa Instrukcja if wygląda następująco: if warunek1 elseif warunek2 5
else endif Warunki proste można łączyć w złożone przez operatory koniunkcji (&&), alternatywy ( ) i negacji (!). Pętla for Pętla for pozwala wykonać zadany kod dla zmiennej przyjmującej zadane wartości: for x=poczatek:skok:koniec endfor Pętla while Pętla while pozwala wykonać zadany kod dopóki warunek jest spełniony while warunek endwhile Pętla do Pętla do pozwala wykonać zadany kod dopóki warunek nie będzie spełniony do until warunek Funkcje Składnia własnych funkcji jest następująca: function [wynik1, wynik2, ] = nazwafunkcji(argument1, argument2, ) endfunction Dla przykładu poniższa funkcja liczy od razu minimum i maksimum: function [mi, ma] = minmax(x) ma = max(x); mi = min(x); 6
endfunction Funkcje mogą też przyjmować jako argumenty inne funkcje, co będzie bardzo przydatne na następnych zajęciach. Poniższa funkcja liczy f (g(x)) function [y] = compose(f, g, x) y = feval(f, x) y = feval(g, y) endfunction Używamy jej następująco: function [y] = square(x) y = x*x; endfunction #obliczymy (2^2)^2 compose("square", "square", 2) 7