Difference between revisions of "Matlab/Octave"
(→Literatúra) |
|||
(9 intermediate revisions by the same user not shown) | |||
Line 22: | Line 22: | ||
octave:1> 2 + 3 | octave:1> 2 + 3 | ||
− | ans = | + | ans = 5 |
octave:2> cos(pi) | octave:2> cos(pi) | ||
ans = -1 | ans = -1 | ||
Line 232: | Line 232: | ||
== Načítanie externých dát - Import == | == Načítanie externých dát - Import == | ||
− | + | ||
− | + | Ak máme data uložené ako ASCII čísla v textovom súbore, potom príkaz | |
− | X = load | + | X = load teplota.dat |
− | + | načíta tieto data do vektora X. Ak je v súbore viac stĺpcov s datami, potom | |
− | load | + | load teplota.dat |
− | + | T1 = teplota(:,1) | |
− | + | T2 = teplota(:,2) | |
+ | urobí rozdelenie do dvoch vektorov. | ||
+ | |||
+ | Na načítanie dát z CSV (comma separated values) súboru existuje príkaz | ||
+ | <TT>csvread()</TT>, na načítanie zvukového súboru do matice príkaz <TT>wavread()</TT> a | ||
+ | na načítanie obrázku <TT>imread()</TT>. Podrobnosti získate napr. príkazom | ||
+ | <TT>help imread</TT>. | ||
== Uloženie dát do súboru - Export == | == Uloženie dát do súboru - Export == | ||
− | + | Jednotlivé matice je možné uložiť do externého ASCII súboru a použiť napr. na nakreslenie | |
− | + | grafu, alebo prenos do Excelu a pod. | |
− | + | ||
− | + | octave.exe:90> save("premenne.mat","A","c"); | |
− | + | ||
− | + | V súbore <TT>premenne.mat</TT> budu uložené matice '''A''' a '''c'''. | |
− | + | Ak chceme uložiť súbor ako rad hodnôt oddelených čiarkami (CSV file), použijeme | |
+ | |||
+ | octave.exe:91> csvwrite("pokus.csv",A); | ||
+ | |||
+ | Okrem toho existujú príkazy na export do .wav súboru (<TT>wavwrite</TT>) | ||
+ | a na ukladanie obrázkov (<TT>imwrite</TT>) | ||
+ | |||
+ | |||
+ | == Riešenie rovníc (aj sústavy, aj nelineárnych) == | ||
+ | |||
+ | octave:1># Zadefinujeme funkciu | ||
+ | octave:1> function y = f (x) | ||
+ | > y=x^3+x^2-3*x-3; | ||
+ | > endfunction | ||
+ | |||
+ | octave:2># Solve System for Root Starting at x0=+1.0: | ||
+ | octave:2> [x, info] = fsolve ("f", 1.) | ||
+ | |||
+ | x = 1.7321 | ||
+ | |||
+ | info = 1 | ||
+ | |||
+ | octave:3> # Comment: Solve System for Root Starting at x0=0.0: | ||
+ | octave:3> [x, info] = fsolve ("f", 0.) | ||
+ | |||
+ | x = -1 | ||
+ | |||
+ | info = 1 | ||
+ | |||
+ | octave:3> # Comment: Solve System for Root Starting at x0=-2.0: | ||
+ | octave:3> [x,info]=fsolve("f",-2.) | ||
+ | x = -1.7321 | ||
+ | |||
+ | info = 1 | ||
+ | |||
+ | octave:4> # Comment: Go to Next Problem: | ||
+ | |||
+ | Solution of 2 Equations in 2 Unknowns: | ||
+ | |||
+ | octave:4> # Comment: Define Function: | ||
+ | octave:4> function y = f (x) | ||
+ | > y(1) = -2*x(1)^2 + 3*x(1)*x(2) + 4*sin(x(2)) - 6; | ||
+ | > y(2) = 3*x(1)^2 - 2*x(1)*x(2)^2 + 3*cos(x(1)) + 4; | ||
+ | > endfunction | ||
+ | |||
+ | octave:5> # Comment: Solve System for Vector Root Starting at [1; 2]: | ||
+ | octave:5> [x, info] = fsolve ("f", [1; 2]) | ||
+ | |||
+ | x = | ||
+ | |||
+ | 0.57983 | ||
+ | 2.54621 | ||
+ | |||
+ | info = 1 | ||
+ | |||
+ | |||
+ | == Literatúra == | ||
+ | |||
+ | * J. Buša: ''[http://people.tuke.sk/jan.busa/kega/octave.html Octave]'' - slovenská príručka | ||
+ | * J. Doboš: ''[http://people.tuke.sk/jan.busa/kega/gnuplot.html Gnuplot]'' - slovenská príručka | ||
+ | * David F. Griffiths: ''[http://www.maths.dundee.ac.uk/~ftp/na-reports/MatlabNotes.pdf An Introduction to Matlab]'' | ||
+ | * Hubert Selhofer: ''[http://math.jacobs-university.de/oliver/teaching/iub/resources/octave/octave-intro.pdf Introduction to GNU Octave]'' | ||
+ | * Dr. P.J.G. Long: ''[http://www-mdp.eng.cam.ac.uk/CD/engapps/octave/octavetut.pdf Introduction to Octave]'' | ||
+ | * Kermit Sigmon: ''[http://cs.gmu.edu/~zduric/cs580/primer40.pdf Matlab primer]'' ([http://artax.karlin.mff.cuni.cz/~beda/cz/matlab/primercz/matlab-primer.html preklad do češtiny]) | ||
+ | * [http://www.octave.cz/ http://www.octave.cz/] | ||
+ | * Pavel Karban: ''Vypocty a simulace v programech Matlab a Simulink.'' Vyslo v Computer Press. | ||
− | + | [[Category:DSP]] | |
− | |||
− |
Latest revision as of 11:02, 15 February 2012
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
- 1 Základy práce s programom
- 2 Matice, vektory, skaláry
- 3 Základné operátory
- 4 Operátor dvojbodka
- 5 Prístup k prvkom matice
- 6 Základné príkazy pre matice
- 7 Riadiace príkazy
- 8 Funkcie
- 9 Načítanie externých dát - Import
- 10 Uloženie dát do súboru - Export
- 11 Riešenie rovníc (aj sústavy, aj nelineárnych)
- 12 Literatúra
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 = 5 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
- det(A) determinant matice A
- inv(A) inverzná matica k A
- A' transponovaná matica
- rank(A) hodnosť matice A (počet lineárne nezávislých riadkov alebo stĺpcov)
- eye(n) vytvorí jednotkovú maticu rozmeru n x n
- zeros(n,m) vytvorí nulovú maticu rozmerov n x m
- ones(n,m) vytvorí maticu zo samých 1 rozmerov n x m
Riadiace príkazy
Ako každý poriadny programovací jazyk, aj tento má testy if a case a cykly while a for
for i = 1 : n c(i) = 1/i; end
Funkcie
Do externého súboru, tzv. skriptu, alebo m-file môžeme uložiť ľubovoľnú postupnosť príkazov. Po jeho skončení ostávajú všetky medzivýsledky a premenné v pamäti.
Ak sa začiatok súboru označí ako function, môžeme odovzdávať aj parametre a medzivýsledky po skončení funkcie zaniknú.
Funkcie sa dajú písať aj inline, ale najčastejšie sa používa externý súbor, tzv. m-file.
Do súboru maxmin.m uložte nasledovné príkazy
function [minimum,maximum] = maxmin(x)
%
% Funkcia MAXMIN najde maximum a minimum vektora x.
% Text, ktory je tu sa vypisuje pri help maxmin
%
n = length(x);
minimum = min(x);
maximum = max(x);
Odteraz môžeme zavolať z našich programov funkciu maxmin()
octave:51> A = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; octave:52> [x1, x2] = maxmin(A) x1 = 1 x2 = 10
Načítanie externých dát - Import
Ak máme data uložené ako ASCII čísla v textovom súbore, potom príkaz
X = load teplota.dat
načíta tieto data do vektora X. Ak je v súbore viac stĺpcov s datami, potom
load teplota.dat T1 = teplota(:,1) T2 = teplota(:,2)
urobí rozdelenie do dvoch vektorov.
Na načítanie dát z CSV (comma separated values) súboru existuje príkaz csvread(), na načítanie zvukového súboru do matice príkaz wavread() a na načítanie obrázku imread(). Podrobnosti získate napr. príkazom help imread.
Uloženie dát do súboru - Export
Jednotlivé matice je možné uložiť do externého ASCII súboru a použiť napr. na nakreslenie grafu, alebo prenos do Excelu a pod.
octave.exe:90> save("premenne.mat","A","c");
V súbore premenne.mat budu uložené matice A a c. Ak chceme uložiť súbor ako rad hodnôt oddelených čiarkami (CSV file), použijeme
octave.exe:91> csvwrite("pokus.csv",A);
Okrem toho existujú príkazy na export do .wav súboru (wavwrite) a na ukladanie obrázkov (imwrite)
Riešenie rovníc (aj sústavy, aj nelineárnych)
octave:1># Zadefinujeme funkciu octave:1> function y = f (x) > y=x^3+x^2-3*x-3; > endfunction octave:2># Solve System for Root Starting at x0=+1.0: octave:2> [x, info] = fsolve ("f", 1.) x = 1.7321 info = 1
octave:3> # Comment: Solve System for Root Starting at x0=0.0: octave:3> [x, info] = fsolve ("f", 0.) x = -1 info = 1 octave:3> # Comment: Solve System for Root Starting at x0=-2.0: octave:3> [x,info]=fsolve("f",-2.) x = -1.7321 info = 1 octave:4> # Comment: Go to Next Problem: Solution of 2 Equations in 2 Unknowns: octave:4> # Comment: Define Function: octave:4> function y = f (x) > y(1) = -2*x(1)^2 + 3*x(1)*x(2) + 4*sin(x(2)) - 6; > y(2) = 3*x(1)^2 - 2*x(1)*x(2)^2 + 3*cos(x(1)) + 4; > endfunction octave:5> # Comment: Solve System for Vector Root Starting at [1; 2]: octave:5> [x, info] = fsolve ("f", [1; 2]) x = 0.57983 2.54621 info = 1
Literatúra
- J. Buša: Octave - slovenská príručka
- J. Doboš: Gnuplot - slovenská príručka
- David F. Griffiths: An Introduction to Matlab
- Hubert Selhofer: Introduction to GNU Octave
- Dr. P.J.G. Long: Introduction to Octave
- Kermit Sigmon: Matlab primer (preklad do češtiny)
- http://www.octave.cz/
- Pavel Karban: Vypocty a simulace v programech Matlab a Simulink. Vyslo v Computer Press.