Difference between revisions of "Matlab/Octave"

From RoboWiki
Jump to: navigation, search
Line 57: Line 57:
 
existuje help, ktorý sa vyvolá <TT>help príkaz</TT>.
 
existuje help, ktorý sa vyvolá <TT>help príkaz</TT>.
  
 +
 +
{|
 +
|+
 +
|Addition
 +
|----
 +
|-
 +
|Subtraction
 +
|----
 +
|2
 +
|Anca
 +
|----
 +
|3
 +
|Mária
 +
|----
 +
|}
  
  
Line 62: Line 77:
  
  
+ Addition
 
- Subtraction
 
 
* Multiplication
 
* Multiplication
 
/ Division
 
/ Division

Revision as of 21:02, 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.

  • 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 sa nepáči wiki.

octave:6> napis = "Ahoj Peter!";

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.


Addition
Subtraction
2 Anca
3 Mária



  • Multiplication

/ Division ^ Power ' Complex conjugate transpose .* Element-by-element multiplication ./ Element-by-element division .^ Element-by-element power .' Unconjugated array transpose


Basic Data Structures • Scalars scalar = 1 • Row Vector rowvector = [ 1, 2, 3, 4, 5 ] •Column vector colvector = [ 1; 2; 3; 4; 5 ]

Array (matrix) matrix = [ 1, 2 ; 3, 4 ]


Shortcuts • You can create an array of integers 1..n by: A = [ 1:n ] • You can change the step size by: A = [ 1:0.1:n ]

Accessing elements of a vector and array a = [1, 2; 3, 4]; a(1, 2) ans = 2 • Accessing rows/columns of a vector and array a = [1, 2, 3; 4, 5, 6]; a(1,:) ans = 1 2 3 Accessing arrays

Accessing a submatrix of an array a = [1, 2, 3; 4, 5, 6; 7, 8, 9]; a(1:2, 1:2) ans = 1 2 4 5 Accessing arrays


Basic Matrix Commands • rank(A) -> rank of A • det(A) -> determinant of A • inv(A) -> finds inverse of A if possible • A' -> transpose of A (conjugate if complex) • 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 • rref(A) -> return the reduced row echelon of A • [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, ',')