Wprowadzenie do Octave

Transkrypt

Wprowadzenie do Octave
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)
1.2
Operacje na zmiennych
W poniższych przykładach 𝐴, 𝐵, … są macierzami, 𝑎, 𝑏, … liczbami.
2
• 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
𝑝=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.' – macierz transponowana do 𝐴
• A\B – rozwiązuje równanie macierzowe 𝐴𝑥 = 𝐵
• B/A – rozwiązuje równanie macierzowe 𝑥𝐴 = 𝐵
1.3
Porównywanie zmiennych
• x==y – jest prawdą gdy 𝑥 jest równe 𝑦
• x>y – jest prawdą gdy 𝑥 jest większe 𝑦
• x<y – jest prawdą gdy 𝑥 jest mniejsze 𝑦
• x>=y – jest prawdą gdy 𝑥 jest większe niż 𝑦
• x<=y – jest prawdą gdy 𝑥 jest mniejsze niż 𝑦
• x!=y – jest prawdą gdy 𝑥 jest różne od 𝑦
3
1.4
Przydatne funkcje
• sin(x) – sinus
• cos(x) – kosinus
• tan(x) – kosinus
• 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.8𝑥4 − 𝑥3 + 2𝑥2 + 4
• exp(x) – funkcja wykładnicza
• log(x) – logarytm naturalny
• e – liczba 𝑒
• 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);
endfunction
6
Funkcje mogą też przyjmować jako argumenty inne funkcje, co będzie bardzo
przydatne na następnych zajęciach. Poniższa funkcja liczy 𝑓 (𝑔(𝑥))
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