Difference between revisions of "Matlab/Octave"
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 21: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.
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, ',')