Difference between revisions of "Matlab/Octave"

From RoboWiki
Jump to: navigation, search
 
Line 13: Line 13:
 
* J. Buša: [http://people.tuke.sk/jan.busa/kega/octave.html Octave] - slovenská príručka
 
* 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
 
* J. Doboš: [http://people.tuke.sk/jan.busa/kega/gnuplot.html 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 <TT>diary on</TT> a <TT>diary off</TT>
 +
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á <TT>help príkaz</TT>.
 +
 +
 +
 +
 +
 +
 +
+ Addition
 +
- Subtraction
 +
* 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, ',')

Revision as of 22:00, 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

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