Struˇ cn´ y n´ avod k programu Octave Octave je interaktivn´ı program vhodn´ y pro technick´e v´ ypoˇcty. Je n´apadnˇe podobn´ y programu MATLAB, na rozd´ıl od nˇeho je zcela zadarmo. Jeho domovsk´ a vebov´ a str´anka je http://www.octave.org/, ale jeho dalˇs´ı kompilace jak pro Windows tak i pro Linux je moˇzno st´ahnout leckde. Staˇc´ı hledat.
´ Uvodn´ ı pozn´ amky
1
1. Vˇsechny promˇenn´e jsou matice. Skal´ ar je a(1,1). Vektor je bud’ ˇr´ adkov´ y a(1,5) nebo sloupcov´ y a(5,1). 2. Stˇredn´ık za zadanou promˇennou a=5; zp˚ usob´ı, ˇze po zad´an´ı promˇenn´e nen´ı ˇz´ adn´ a odezva; po zad´an´ı s ˇc´arkou nebo bez niˇceho, tj. a=5, nebo a=5 se hodnota promˇenn´e vyp´ıˇse na obrazovku. 3. help ”objekt” zobraz´ı n´apovˇedu k objektu. help -i ”objekt” d´a podrobnˇejˇs´ı n´apovˇedu. 4. Koment´aˇr je text zaˇc´ınaj´ıc´ı % 5. Pˇr´ıkazy je moˇzno zapsat do textov´eho souboru s koncovkou .m (batch-file) a spustit je najednou spuˇstˇen´ım jm´ena souboru.
2
Promˇ enn´ e a operace
2.1
Typy promˇ enn´ ych
u: je-li a=’dobry ’; • string, pro z´apis textu: a=’ahoj’. Stringy lze spojovat do vektor˚ b=’den’ a c=[a,b], pak c=’dobry den’. Uˇziteˇcn´a je konverze ˇc´ıslo → ˇretˇezec: s=num2str(a), kde s je string a a double. • double, pro pˇrirozen´e nebo re´aln´e promˇenn´e. Jejich definici je moˇzno prov´est n´asledovnˇe: – Zad´ an´ım hodnoty: hodnoty a=5; ˇr´adkov´eho vektoru a=[3 5 1]; sloupcov´eho vektoru a=[3; 5; 1], coˇz je tot´eˇz jako a=[3 5 1]’ matice a=[2 3 4; 8 7 6]; ·· ·· ·· ··
Prvky vektor˚ u nebo matic se zad´avaj´ı do hranat´ ych z´avorek. Prvky v ˇr´adku se oddˇeluj´ı ˇc´arkou nebo mezerou. Stˇredn´ık ukonˇc´ı ˇr´adek matice a pˇrejde na nov´ y. Transpozice se provede pomoc´ı apostrofu ’.
1
– Pomoc´ı dvojteˇcky: a=5:8 s inkrementem 1 vytvoˇr´ı vektor [5 6 7 8] nebo a=2:3:10; s inkrementem 3 vytvoˇr´ı vektor [2 5 8]. – Funkc´ı a=zeros(2,3) nebo a=ones(2,3) vytvoˇr´ı matici 2 x 3 nul nebo jedniˇcek.
2.2
Operace s promˇ enn´ ymi
• V´ ybˇer prvk˚ u matice: a(3:5) v´ ypis 3,4 a 5 prvku vektoru a. a(:,1) v´ ypis prvn´ıho sloupce matice a a(2:3,:) je v´ ypis 2. a 3. ˇr´adku a. • Operace: + - ∗ / ∗∗ a+b a a-b sˇc´ıt´an´ı a odeˇc´ıt´an´ı (stejn´e rozmˇery!) a*b n´asoben´ı (spr´avn´e rozmˇery!) a/b nebo a\b znamen´a a kr´at inverze b nebo inverze a kr´ at b umocnˇen´ı je **, odmocnˇen´ı funkce a=sqrt(b). • Teˇckov´e operace: .∗ ./ . ∗ ∗ Znamenaj´ı operace prvek po prvku. Napˇr. [1 2 3].*[6 5 4] je [1*6 2*5 3*4] [2 3; 4 1].**[5 3; 2 8] je [2**5 3**3; 4**2 1**8] • Operace s matic´ı a skal´arem: Matice + - * / ** skal´ar plat´ı pro vˇsechny prvky matice: [2 3]*4 je [2*4 3*4] • Logick´e operace: == != < <= >
2.3
>= & (=and) | (=or) ! (=not)
Pr´ ace s promˇ enn´ ymi
• Pˇr´ıkazy who, whos d´avaj´ı informaci o definovan´ ych promˇenn´ ych. • [m,n]=size(a), m=size(a,1), n=size(a,2) d´avaj´ı informaci o rozmˇerech matice a, resp. poˇctu ˇr´adk˚ u, resp. poˇctu sloupc˚ u. • n=length(a) ud´av´a informaci o d´elce vektoru (vˇetˇs´ı z rozmˇer˚ u matice a) • clear, clear all uvolˇ nuje pamˇet’.
2.4
Pr´ ace s daty na disku
• save data nebo save data a b uloˇz´ı na disk do souboru vˇsechny definovan´e promˇenn´e nebo jen promˇenn´e a, b. • load data nebo load data a b nat´ ahne z disku datov´ y soubor data nebo jen promˇenn´e a, b z tohoto souboru.
2
• Je-li za pˇr´ıkazem save nebo load uvedena volba -ascii, budou promˇenn´e uloˇzeny v ascii k´odu.
3
Programovac´ı pˇ r´ıkazy • Podm´ınka if if b>c, a=5; else a=0; end
Je-li splnˇena podm´ınka b> c, provede se pˇr´ıkaz a=5; jinak pˇr´ıkaz a=0;.
• V´ıcen´ asobn´ a podm´ınka if if b>.1, a=5; elseif b<-.1, a=-5; else a=0; end
Je-li splnˇena podm´ınka b> .1, provede se pˇr´ıkaz a=5; a pˇr´ıkaz konˇc´ı. Jinak se testuje podm´ınka b< −.1 a provede se pˇr´ıkaz a=-5; nebo pˇr´ıkaz a=0;.
• Cyklus for for i=1:5 a(i)=2*i; end
Pro i=1,2,3,4,5 se provede pˇr´ıkaz a(i)=2*i;. V´ ysledek: a=[2, 4, 6, 8, 10].
• Cyklus while while i<=5 a(i)=0; i=i+1; end
Dokud je splnˇena podm´ınka i<=5, prov´ adˇej´ı se pˇr´ıkazy a(i)=0; a i=i+1; (inkrement) i. V´ ysledek: a(1:5) se nuluje.
• Break, return – Break: Zp˚ usob´ı ukonˇcen´ı cyklu for nebo while. Program pokraˇcuje za t´ımto cyklem. – Return: Zp˚ usob´ı ukonˇcen´ı prov´ adˇen´e procedury. • Pause, keyboard, input – Pause: Zp˚ usob´ı zastaven´ı programu (pokraˇcuje po stisku lib. kl´avesy) – Keyboard: Zp˚ usob´ı zastaven´ı programu a pˇred´ a ˇr´ızen´ı kl´avesnici - moˇznost kontroly promˇenn´ ych uvnitˇr programu (pokraˇcuje po zad´an´ı pˇr´ıkazu exit). – Input: Zp˚ usob´ı zastaven´ı programu a ˇcek´ a na vstup promˇenn´e (zadat a potvrdit Enter). Napˇr.: a=input(’Zadej hodnotu a: ’); vyp´ıˇse text v apostrofech a zadanou hodnotu pˇriˇrad´ı promˇenn´e a.
3
• Eval Pˇr´ıkaz eval(strig); spust´ı pˇr´ıkaz, kter´ y je textovˇe zaps´an v promˇenn´e string Napˇr. eval(’x=1;’) d´a pˇr´ıkaz x=1 nebo eval([’x’,num2str(i),’=1;’]) pro i=5 d´ a x5=1.
4
Podprogramy a funkce • Libovolnou ˇc´ast programu je moˇzno uloˇzit do samostatn´eho souboru (s koncovkou .m) a volat jej v jin´em programu jako podprogram. Definovan´e promˇenn´e se pˇritom nemˇen´ı. • Funkce se od podprogramu liˇs´ı t´ım, ˇze pˇred´ av´ a parametry, tj. do funkce se pˇredaj´ı jen vstupn´ı parametry a z funkce vystoup´ı jen v´ ystupn´ı parametry. Tvar funkce je n´asleduj´ıc´ı: function [v´ ystupn´ ı parametry] = jmeno(vstupn´ ı parametry) % popis funkce: co dˇ el´ a, v´ yst. a vst. parametry vlastn´ ı program endfunction Napˇr´ıklad: function [m1,m2,v1,v2,co] = momenty(x,y) % [mx,my,vx,vy,co] = momenty(x,y) % prvni a druhe momenty souboru x, y % mx,my prvn´ ı momenty (pr˚ umˇ ery) % vx,vy druh´ e momenty (v´ yb. rozptyly) % co druh´ y vz´ ajemn´ y moment (v´ yb. kovariance) % x,y datov´ e soubory (v´ ybˇ ery) mx=mean(x); my=mean(y); vx=var(x); vy=var(y); co=cov(x,y); endfunction
5
Tiskov´ y v´ ystup
Pro tisk promˇenn´ ych slouˇz´ı pˇr´ıkazy disp (bez form´atu) a printf (s form´atem). • disp(a) zobraz´ı hodnotu promˇenn´e a. • disp(’ahoj’) vyp´ıˇse text ahoj. • printf(’prvek %g vektoru a je %g\n’,i,a(i)); vyp´ıˇse: prvek 5 vektoru a je 4.12 (pokud je to pravda).
4
6
Grafick´ y v´ ystup
Dvojrozmˇ ern´ y graf je moˇzno vykreslit pˇr´ıkazem plot. Pˇr´ıklady: • plot(y) vykresl´ı hodnoty vektoru y. Na ose x je poˇrad´ı sloˇzky vektoru (index). • plot(x,y) vykresl´ı hodnoty vektoru y proti hodnot´am vektoru x – tzv xy-graf. • plot(a) vykresl´ı sloupce matice a. Form´atov´an´ı grafu: typ ˇ car - (pln´a) -@ (s body) -* (s hvˇezdami) -x (s kˇr´ıˇzky)
typ bod˚ u . (bod) + (plus) * (hvˇezda) x (kˇr´ıˇzek)
barva r (red) g (green) b (blue) w (white)
Dalˇs´ı moˇznosti: help -i plot. Pˇr´ıklady: • plot(x,’*r’) vykresl´ı vektor x pomoc´ı ˇcerven´ ych hvˇezdiˇcek. • plot(x,y,’r-+’,u,v,’b-x’) vykresl´ı dvˇe kˇrivky (x,y) a (u,v); prvn´ı ˇcervenou a ˇcarou s plusy, druhou modrou ˇcarou s kˇr´ıˇzky. Trojrozmˇ er´ y graf (zadan´ y matic´ı bod˚ u) se vykresl´ı pˇr´ıkazem mesh. Funkce meshgrid pˇriprav´ı argumenty pro v´ ypoˇcet zobrazovan´e matice. Napˇr´ıklad program x=-2:.1:2; y=x’; sig=.6; [xx yy]=meshgrid(x,y); z=1/sig*exp(-.5/sig**2*(xx.**2+yy.**2)); mesh(z); vykresl´ı nenormovanou hustotu pravdˇepodobnosti norm´aln´ıho rozdˇelen´ı.
5