Programováí v Matlabu Obsah: m-fukce a skripty; Krokováí laděí) fukcí/skriptů; Podmíěý příkaz; Cyklus s předem zámým počtem opakováí iteračí cyklus); Cyklus řízeý podmíkou Zoltá Szabó FBMI 2007 http://webzam.fbmi.cvut.cz/szabo/matlab/
m-fukce a skripty m-fukce a skripty jsou obyčejé textové soubory, a proto je lze psát i v libovolém textovém editoru. Z důvodu vyššího komfortu zvýrazěí sytaxe, možost krokováí) součást MATLABu také m-editor/debugger File Ope ebo File New M-file). >> edit
Skripty Skript je posloupost příkazů uložeých do souboru. Může vytvářet ové proměé ebo mazat či měit vybraé. Výsledky skriptu tedy zůstávají v pracovím prostředí i po jeho skočeí. Skripty samozřejmě mohou volat jié skripty ebo fukce, vytvářet grafická oka, vypisovat do Commad Widow,atd. % a simple MATLAB m-file to calculate the % average of 5 umbers. average_script.m % first defie variables for the 5 umbers: a = 5; b = 10; c = 15; d = 20; e = 25; % ow calculate the average of these ad prit it out: five_umber_average = a + b + c + d + e) / 5; five_umber_average
Skripty Jméo skriptu musí splňovat stejá pravidla jako ázev proměé - může obsahovat pouze písmea aglické abecedy, podtržítko a číslice číslicí esmí začíat). Skript můžeme spustit buď a) v Commad Widow - stačí zadat jméo souboru bez přípoy tj. skript priklad.m spustíme příkazem >> priklad), aebo b) v M-editoru/Debuggeru pomocí meu Debug Ru klávesa F5).
m-fukce m-fukce má své vlastí pracoví prostředí, které je odděleo od pracovího prostředí Commad Widow. Všechy proměé ve fukci jsou lokálí existují je po dobu spuštěí fukce). Prví řádek obsahuje defiici fukce, po ěm mohou ásledovat řádky s ápovědou k fukci kometáře) a zbytek souboru tvoří příkazy kód fukce, algoritmus). ázev souboru se musí shodovat s ázvem daé fukce
m-fukce
Příklady soucet.m fuctio [s]=souceta,b) % SOUCET - soucet dvou cisel % s=souceta,b) % a,b... scitace % s... vysledek soucet) % priklad volai: s=soucet10,-2.5) s = a+b; prepoa.m fuctio [prep]=prepoaodvesa1,odvesa2) % PREPONA - vypocet prepoy pravouhleho trojuheliku prep = odvesa1^2 + odvesa2^2)^1/2); % pouziti Pythagorovy vety
Pozámky Nápověda k fukci eí poviou součástí fukce. Nápověda k fukci začíá druhým řádkem, pokud je teto řádek kometářem. Nápověda k fukci kočí jakýmkoli řádkem, který již eí kometářem tj. i třeba prázdým řádkem). Pokud je v M-souboru fukce obsažea ápověda, zobrazíme ji příkazem >> help jméo_fukce. Prví řádek ápovědy by měl obsahovat jméo fukce a vystihovat její čiost, protože je vypisová příkazem >> lookfor slovo slouží pro výpis všech fukcí obsahujících daé slovo). Další řádky ápovědy by měly obsahovat popis vstupů a výstupů fukce a také příklad jejího použití voláí). Kód fukce algoritmus; příkazy) začíá hed za ápovědou a obsahuje posloupost příkazů, pomocí ichž fukce vypočítá své výstupy. Všechy výstupy fukce musí být jejím kódem vytvořey, jiak je po spuštěí fukce ohlášea chyba. Všechy přiřazovací příkazy uvitř fukce by měly být ukočey středíkem aby fukce eobtěžovala okolí výpisem pomocých proměých).
Spuštěí fukce Pokud jsme vytvořili vlastí fukci, můžeme ji spustit z Commad Widow aebo z jiých fukcí či skriptů). Příkaz pro spuštěí fukce vypadá obecě takto: >> [vystupy]=jmeofcevstupy), pokud chceme uložit výsledky do ějakých proměých ebo takto: >> jmeofcevstupy), pokud echceme výsledky ukládat do proměých
Pozámky počet vstupích argumetů se musí shodovat s její defiicí pořadí vstupích argumetů při voláí je zavazující výstupy z fukce ejsme povii odebírat pokud eapíšeme za voláím fukce středík, prví z výstupů se vypíše pomocí as) Příklady: >> s=soucet7,14); - s odebráím výstupu a bez jeho výpisu >> vysledek=soucet7,14) - s odebráím výstupu i jeho vypsáím >> x=7; y=14; soucetx,y) - bez odebráí výstupu, ale vypsáím výsledku pomocí as) >> soucet3.1,8.14); - bez odebráí výstupu, bez vypsáí výsledku v podstatě zbytečá akce)
Krokováí laděí) fukcí/skriptů Zobrazeí kódu fukce Kód fukce tj. obsah M-souboru) vidíme v M-editoru/Debuggeru, ale můžeme jej zobrazit také v Commad Widow příkazem >> type jmeofce, kde jmeofce je ázev fukce ázev M-souboru bez přípoy). Krokováí: 1. v M-editoru astavíme breakpoit F12) a ějakém řádku s příkazem 2. spustíme fukci s jejími parametry z Commad widow) - v Commad Widow se objeví K>> a v M-editoru svítí zeleá šipka před řádkem, který bude ásledě zpracová 3. pomocí F10 a F11 v M-editoru krokujeme spouštíme jedotlivé příkazy) - výsledky kotrolujeme pomocí myši pohyb ad ázvem proměé, jejíž obsah ás zajímá) ebo pomocí oka Workspace kde by měl být astave Stack pro krokovaou fukci) 4. výsledkem celého sažeí je alezeí chyby, její oprava a uložeí opraveé fukce
Krokováí laděí) fukcí/skriptů
Podmíěý příkaz větveí) if podmíka příkazy ed Pozámky: V případě, že součástí podmíky je matice typu m, je podmíka pravdivá je tehdy, pokud je pravdivá pro všechy prvky této matice. V případě, že v ějaké podmíce použijeme biárí logický operátor & ebo ) a po vyhodoceí prvího argumetu je už zřejmý výsledek, tak se druhý argumet evyhodocuje zkráceé vyhodocováí). Jedotlivé příkazy if se mohou vořovat, tj. uvitř ifu může být další příkaz if.
Podmíěý příkaz 2) if podmíka1 příkazy1 else příkazy2 ed Čiost příkazu if-else: ejprve se testuje podmíka - je-li pravdivá, provedou se příkazy1, je-li epravdivá, provedou se příkazy2. Vždycky se tedy provede jeda skupia příkazů.
Podmíěý příkaz 3) if podmíka1 příkazy1 elseif podmíka2 příkazy2 else příkazy3 ed Pozámky: větev if musí být právě jeda větev elseif emusí být vůbec, případě jich může být více větev else může být aejvýš jeda
Cykly cyklus s předem zámým počtem opakováí iteračí cyklus; realizovaý pomocí for) cyklus řízeý podmíkou realizovaý pomocí while)
Cyklus s předem zámým počtem opakováí iteračí cyklus) for proměá=výraz příkazy ed Pozámky: Koec cyklu může astat předčasě, pokud je v těle cyklu obsaže příkaz break ebo retur Cyklus for používáme vždy, když záme počet opakováí určité čiosti. Iteračí cyklus se často využívá pro tvorbu matic jejichž prvky jsou geerováy podle ějakého vzorce) a také je používá při zpracováváí matice prvek po prvku.
Cyklus řízeý podmíkou while podmíka příkazy ed Pozámky: Čiost cyklu lze vyjádřit větou: dokud platí podmíka, prováděj příkazy. Koec cyklu může astat i při prvím testu podmíky je-li ulová), takže se může stát, že příkazy v těle cyklu se eprovedou ai jedou. Řídicí podmíka cyklu by měla být ovlivňováa prováděím příkazů v těle cyklu tak, aby jedou přestala platit. Jiak totiž cyklus ikdy eskočí tzv. ekoečý cyklus) - pozáme to tím, že v Commad Widow se eobjeví >> a zpravidla se také eustále ěco vypisuje. Pokud chceme ukočit prováděí ekoečého cyklu, stiskeme CTRL+C.
Příklady Příklad cyklu ze života: Příklad větveí uvitř cyklu: zalez_do_postele; while uave zdrimi_si; ed vylez_z_postele; Příklad cyklu s počítadlem esežraých sušeek: jdi_a_avstevu; pocet_suseek=29; while pocet_suseek>0 sez_suseku; pocet_suseek=pocet_suseek-1; ed jdi_domu; jdi_do_prace; while cas<16.00 if ekdo_jde_kolem predstirej_praci; else zdrimi_si; ed ed jdi_domu;
Příklady k řešeí 1. Sestavte fukci pro výpočet součtu prvích přirozeých čísel. 2. Vytvořte fukci a výpočet faktoriálu zadaého čísla a pricipu:!=*-1)*-2)*...*1, resp.!=1*2*...*) 3. Diskrétí kovoluci lze vyjádřit dvěma rovoceými vztahy viz íže). Vytvořte fukci, pro výpočet kovoluce dvou vektorů h a x. = = + + + = = + + + = = i i h x h x h x i h i x y x h x h x h i x i h y 0 0 0) ) 1) 1) ) 0) ) ) ) 0) ) 1) 1) ) 0) ) ) ) L L