Difference between revisions of "Matlab/Octave"
(→Základy práce s programom) |
(→Základné príkazy pre matice) |
||
Line 179: | Line 179: | ||
==== Základné príkazy pre matice ==== | ==== Základné príkazy pre matice ==== | ||
− | + | * <TT>length(v)</TT> počet prvkov vektora '''v''' | |
− | + | * <TT>[Rows,Columns] = size(A)</TT> počet riadkov a stĺpcov matice '''A''' | |
+ | * <TT>rank(A)</TT> hodnosť matice '''A''' (počet lineárne nezávislých riadkov alebo stĺpcov) | ||
+ | * <TT>det(A)</TT> -> determinant matice '''A''' | ||
+ | * <TT>inv(A)</TT> -> inverzná matica k '''A''' | ||
+ | * <TT>A'</TT> -> transponovaná matica | ||
− | + | * <TT>eye(n)</TT> -> return an identity matrix of dimension n | |
− | + | * <TT>zeros(n,m)</TT> -> return a 0 matrix of dimension n x m | |
− | + | * <TT>ones(n,m)</TT> -> return a 1 matrix of dimension n x m | |
− | + | * <TT>[vec,val] = eig(A)</TT> -> returns the eigenvalues/vectors of A | |
− | + | * <TT>size(A)</TT> -> return the dimensions of A | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | -> returns the eigenvalues/vectors of A | ||
− | |||
Revision as of 21:59, 18 June 2008
Matlab je programovací jazyk (aj celé prostredie), ktoré umožňuje riešiť zložité matematické a inžinierske výpočty. Jeho názov je skratkou z Matrix Laboratory, čo znamená, že jeho hlavným prvkom sú matice a operácie s nimi.
Octave je programovací jazyk vyvíjaný pod GNU licenciou a je v maximálnej možnej miere kompatibilný s jazykom Matlab. Je určený na numerické výpočty, riešenie lineárnych i nelineárnych problémov. Ako grafickú nadstavbu môže používať Gnuplot.
Zíde sa vám podrobný manuál k Octave on-line alebo aj inštruktážne stránky firmy Mathworks k Matlabu.
Contents
Základy práce s programom
Octave/Matlab nie je kompilátor, ale interpret, príkazy sa vykonávajú bezprostredne po zadaní. Po spustení teda môžeme do príkazového riadku programu písať priamo matematické výrazy, ktoré program bezprostredne vyhodnotí:
octave:1> 2 + 3 ans = 4 octave:2> cos(pi) ans = -1
Octave dokáže priamo pracovať aj s komplexnými číslami:
octave:3> (1+2i)*(3+4i) ans = -5 + 10i
Premenné sú case sensitive a môžeme ich používať kdekoľvek bez predošlej deklarácie. V predošlých príkladoch sa vo výpise objavila jedna premenná, ktorá sa používa na odovzdávanie posledného výsledku (ans).
octave:4> frekvencia = 50 % [Hz] frekvencia = 50 octave:5> ans + 1 % Premenna ans obsahuje posledny vysledok ans = -4 + 10i
V predošlých príkladoch sme ukázali aj používanie komentárov, začínajú znakom percento. Ak sa nám z nejakého dôvodu nehodí zobrazovanie výsledku, ukončíme príkaz bodkočiarkou. Tá potlačí výpis odpovede. Ak je riadok príliš dlhý, môžeme troma bodkami naznačiť jeho pokračovanie na nasledujúcom...
octave:6> suma = 1 + 1/2 + 1/3 + ... > 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9;
Reťazce môžeme uzatvárať do úvodzoviek, alebo apostrofov. Druhý spôsob tu nebudeme používať, pretože apostrof sa používa aj na transpozíciu a okrem toho sa nepáči ani tejto wiki.
octave:7> napis = "Ahoj Peter!";
Ak chceme zobraziť hodnotu v nejakej premennej, jednoducho napíšeme jej názov (bez bodkočiarky)
octave:8> suma suma = 2.8290
Ak si chcete uchovať záznam z práce s programom, príkazmi diary on a diary off zapnete či vypnete logovanie do súboru, ktorý sa volá diary. Ku každému príkazu v systéme existuje help, ktorý sa vyvolá help príkaz.
Matice, vektory, skaláry
V Matlabe/Octave je všetko matica. Vektor je špeciálny prípad matice s jedným riadkom/stĺpcom, skalár je špeciálny prípad matice s jedným riadkom a jedným stĺpcom.
octave:9> skalar = 37; octave:10> riadkovy_vektor = [ 1 2 3 4 5 6 7 ] % ak treba, mozeme oddelovat ciarkami riadkovy_vektor = 1 2 3 4 5 6 7 octave:11> stlpcovy_vektor = [0.1; 0.2; 0.3; 0.4; 0.5]; stlpcovy_vektor = 0.10000 0.20000 0.30000 0.40000 0.50000 octave:12> matica = [ 0 1 2; 3 4 5 ; 6 7 8 ] matica = 0 1 2 3 4 5 6 7 8
Viacrozmerná matica (používa sa napríklad pri obrázkoch - pre RGB zložky) Konkrétne táto má rozmer 2 x 2 x 3
octave:34> c(1,1,:)=[1 2 3]; octave:35> c(1,2,:)=[4 5 6]; octave:36> c(2,1,:)=[7 8 9]; octave:37> c(2,2,:)=[0 0 0]; octave:38> c c = ans(:,:,1) = 1 4 7 0 ans(:,:,2) = 2 5 8 0 ans(:,:,3) = 3 6 9 0
Základné operátory
+ Súčet - Rozdiel * Súčin / Podiel ^ Mocnina ' Komplexne združená transpozícia .* Súčin po prvkoch vektora/matice ./ Podiel po prvkoch .^ Umocnenie po prvkoch .' Nekonjugovaná transpozícia
Operátor dvojbodka
Toto je veľmi mocný nástroj. Dá sa použiť napríklad pre vytvorenie postupnosti čísel buď s krokom 1, alebo s definovaným krokom
octave.exe:40> n = 5; octave.exe:41> A = 1:n A = 1 2 3 4 5 octave.exe:42> A = 1:0.3:n A = Columns 1 through 8: 1.0000 1.3000 1.6000 1.9000 2.2000 2.5000 2.8000 3.1000 Columns 9 through 14: 3.4000 3.7000 4.0000 4.3000 4.6000 4.9000
Prístup k prvkom matice
Pre jednotlivé prvky použijeme indexy v okrúhlych zátvorkách
octave.exe:44> A = [ 0 1 2; 3 4 5 ; 6 7 8 ] A = 0 1 2 3 4 5 6 7 8 octave.exe:46> A(1,3) ans = 2 octave.exe:48> A(2,:) ans = 3 4 5 octave.exe:49> A(1:2,1:2) ans = 0 1 3 4
Základné príkazy pre matice
- length(v) počet prvkov vektora v
- [Rows,Columns] = size(A) počet riadkov a stĺpcov matice A
- rank(A) hodnosť matice A (počet lineárne nezávislých riadkov alebo stĺpcov)
- det(A) -> determinant matice A
- inv(A) -> inverzná matica k A
- A' -> transponovaná matica
- eye(n) -> return an identity matrix of dimension n
- zeros(n,m) -> return a 0 matrix of dimension n x m
- ones(n,m) -> return a 1 matrix of dimension n x m
- [vec,val] = eig(A) -> returns the eigenvalues/vectors of A
- size(A) -> return the dimensions of A
for for i = 1:m for j = 1:2:n H(i,j) = 1/(i+j); end end
Functions 3. External Macros: Create a file called “statistics.m” with the following contents: function [mean,stdev] = statistics(x) n = length(x); mean = sum(x)/n; stdev = sqrt(sum((x-mean).^2/n)); You can now call your statistics() function from other Matlab programs: A = [ 0, 1, 2, 3, 4, 5] [mean, stdev] = statistics(A)
Loading Data • Loading single column data is easy X = load sunspots.dat • For multicolumn data, it's almost as easy: load sunspots.dat year = sunspots(:,1) magnitude = sunspots(:,2)
Saving Data • You can save your entire workspace in Matlab format... save workspace.mat • Or just individual variables p = rand(1, 10); q = ones(10); save('variables.mat', 'p', 'q')
You can export your data to a CSV text file:
A = [ 1, 2, 3, 4 ; 5, 6, 7, 8];
dlmwrite('outputfile.out', A, ',')