Matlab/Octave

From RoboWiki
Revision as of 22:06, 18 June 2008 by Balogh (talk | contribs) (Základné príkazy pre matice)
Jump to: navigation, search

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.

  • J. Buša: Octave - slovenská príručka
  • J. Doboš: Gnuplot - slovenská príručka


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
  • 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

Funkcie sa dajú písať aj inline, ale najčastejšie sa používa externý súbor, tzv. m-file.


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)


Načítanie externých dát - Import

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)

Uloženie dát do súboru - Export

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, ',')