Strucny navod k programu MATLAB MATLAB je profesionaln interaktivn system urceny pro technicke vypocty. Je vyroben a neustale udrzovan rmou The MathWorks, Inc. a je Protected by U.S. patents (a to bez legrace - skola jej ma legalne zakoupen a studenti si jej mohou po dobu sveho studia pujcit i domu). Jeho vernou napodobeninou je system Octave, ktery je zadarmo a je mozno jej stahnout bud' z nasich stranek www.utia.cas.cz/nagy/skola nebo jejich stranek www.octave.org. 1 Uvodn poznamky 1. Vsechny promenne jsou matice. Skalar je a(1,1). Vektor je bud' radkovy a(1,5) nebo sloupcovy a(5,1). 2. Strednk za zadanou promennou a=5; zpusob, ze po zadan promenne nen zadna odezva; po zadan s carkou nebo bez niceho, tj. a=5, nebo a=5 se hodnota promenne vypse na obrazovku. 3. help "objekt" zobraz napovedu k objektu. ikona? zavola interaktivn stranku HELP. 4. Komentar je text zacnajc % 5. Prkazy je mozno zapsat do textoveho souboru s koncovkou.m (batch-le) a spustit je najednou spustenm jmena souboru. 2 Promenne a operace 2.1 Typy promennych string, pro zapis textu: a='ahoj'. Stringy lze spojovat do vektoru: je-li a='dobry '; b='den' a c=[a,b], pak c='dobry den'. Uzitecna je konverze cslo! retezec: s=num2str(a), kde s je string a a double. double, pro prirozene nebo realne promenne. Jejich denici je mozno provest nasledovne: { Zadanm hodnoty: hodnoty a=5; radkoveho vektoru a=[3 5 1]; sloupcoveho vektoru a=[3; 5; 1], coz je totez jako a=[3 5 1]' matice a=[2 3 4; 8 7 6]; Prvky vektoru nebo matic se zadavaj do hranatych zavorek. Prvky v radku se oddeluj carkou nebo mezerou. Strednk ukonc radek matice a prejde na novy. 1
Transpozice se provede pomoc apostrofu '. { Pomoc dvojtecky: a=5:8 s inkrementem 1 vytvor vektor [5 6 7 8] nebo a=2:3:10; s inkrementem 3 vytvor vektor [2 5 8]. { Funkc a=zeros(2,3) nebo a=ones(2,3) vytvor matici 2 x 3 nul nebo jednicek. 2.2 Operace s promennymi Vyber prvku matice: a(3:5) vypis 3,4 a 5 prvku vektoru a. a(:,1) vypis prvnho sloupce matice a a(2:3,:) je vypis 2. a 3. radku a. Operace: + - / ^ a+b a a-b sctan a odectan (stejne rozmery!) a*b nasoben (spravne rozmery!) a/b nebo anb znamena a krat inverze b nebo inverze a krat b umocnen je ^, odmocnen funkce a=sqrt(b). Teckove operace: : := :^ Znamenaj operace prvek po prvku. Napr. [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 skalarem: Matice + - * / ^ skalar plat pro vsechny prvky matice: [2 3]*4 je [2*4 3*4] Logicke operace: == = < <= > >= & (=and) j (=or) (=not) 2.3 Prace s promennymi Prkazy who, whos davaj informaci o denovanych promennych. [m,n]=size(a), m=size(a,1), n=size(a,2) davaj informaci o rozmerech matice a, resp. poctu radku, resp. poctu sloupcu. n=length(a) udava informaci o delce vektoru (vets z rozmeru matice a) clear, clear all uvolnuje pamet'. 2.4 Prace s daty na disku save data nebo save data a b uloz na disk do souboru data vsechny denovane promenne nebo jen promenne a, b. load data nebo load data a b natahne z disku datovy soubor data nebo jen promenne a, b z tohoto souboru. 2
Je-li za prkazem save nebo load uvedena volba -ascii, budou promenne ulozeny v ascii kodu. 3 Programovac prkazy Podmnka if if b>c, a=5; else a=0; Vcenasobna podmnka if if b>.1, a=5; elseif b<-.1, a=-5; else a=0; Cyklus for for i=1:5 a(i)=2*i; Je-li splnena podmnka b> c, provede se prkaz a=5; jinak prkaz a=0;. Je-li splnena podmnka b> :1, provede se prkaz a=5; a prkaz konc. Jinak se testuje podmnka b< :1 a provede se prkaz a=-5; nebo prkaz a=0;. Pro i=1,2,3,4,5 se provede prkaz a(i)=2*i;. Vysledek: a=[2, 4, 6, 8, 10]. Cyklus while while i<=5 a(i)=0; i=i+1; Dokud je splnena podmnka i<=5, provadej se prkazy a(i)=0; a i=i+1; (inkrement) i. Vysledek: a(1:5) se nuluje. Break, return { Break: Zpusob ukoncen cyklu for nebo while. Program pokracuje za tmto cyklem. { Return: Zpusob ukoncen provadene procedury. Pause, keyboard, input { Pause: Zpusob zastaven programu (pokracuje po stisku lib. klavesy) { Keyboard: Zpusob zastaven programu a preda rzen klavesnici - moznost kontroly promennych uvnitr programu (pokracuje po zadan prkazu exit). { Input: Zpusob zastaven programu a ceka na vstup promenne (zadat a potvrdit Enter). Napr.: a=input('zadej hodnotu a: '); vypse text v apostrofech a zadanou hodnotu prirad promenne a. 3
Eval Prkaz eval(strig); spust prkaz, ktery je textove zapsan v promenne string Napr. eval('x=1;') da prkaz x=1 nebo eval(['x',num2str(i),'=1;']) pro i=5 da x5=1. 4 Podprogramy a funkce Libovolnou cast programu je mozno ulozit do samostatneho souboru (s koncovkou.m) a volat jej v jinem programu jako podprogram. Denovane promenne se pritom nemen. Funkce se od podprogramu lis tm, ze predava parametry, tj. do funkce se predaj jen vstupn parametry a z funkce vystoup jen vystupn parametry. Tvar funkce je nasledujc: function [vystupn parametry] = jmeno(vstupn parametry) % popis funkce: co dela, vyst. a vst. parametry vlastn program function Naprklad: 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 (prumery) % vx,vy druhe momenty (vyb. rozptyly) % co druhy vzajemny moment (vyb. kovariance) % x,y datove soubory (vybery) mx=mean(x); my=mean(y); vx=var(x); vy=var(y); co=cov(x,y); function 5 Tiskovy vystup Pro tisk promennych slouz prkazy disp (bez formatu) a printf (s formatem). disp(a) zobraz hodnotu promenne a. disp('ahoj') vypse text ahoj. fprintf('prvek %g vektoru a je %gnn',i,a(i)); vypse: prvek 5 vektoru a je 4.12 (pokud je to pravda). 4
6 Gracky vystup Dvojrozmerny graf je mozno vykreslit prkazem plot. Prklady: plot(y) vykresl hodnoty vektoru y. Na ose x je porad slozky vektoru (index). plot(x,y) vykresl hodnoty vektoru y proti hodnotam vektoru x { tzv xy-graf. plot(a) vykresl sloupce matice a. Formatovan grafu: typ car typ bodu barva - (plna). (bod) r (red) : (teckovana) + (plus) g (green) -. (cerchovana) o (krouzek) b (blue) -x (carkovana) x (krzek) w (white) Dals moznosti: help plot. Prklady: plot(x,'or') vykresl vektor x pomoc cervenych krouzku. plot(x,y,'r-+',u,v,'b-x') vykresl dve krivky (x,y) a (u,v); prvn cervenou a carou s plusy, druhou modrou carou s krzky. Trojrozmery graf (zadany matic bodu) se vykresl prkazem mesh. Funkce meshgrid priprav argumenty pro vypocet zobrazovane matice. Naprklad 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 pravdepodobnosti normalnho rozdelen. 5