11. Matlab – M-súbory a Editor
07. August, 2009, Autor článku: Blaho Michal, MATLAB/Comsol
Ročník 2, číslo 8
Pridať príspevok
V predchádzajúcich častiach sme na zadávanie príkazov využívali príkazový riadok (Command Window). Predstavme si, že potrebujeme spracovať nejakú postupnosť príkazov, ale pomýlime sa. Znamená to, že musíme napísať všetky príkazy odznova, alebo ich naklikať pomocou Command History. Pri väčších projektoch by to bolo náročné a pravdepodobnosť, že sa znova pomýlime je veľká. Preto je lepšie najskôr príkazy zadať do textového súbora a až potom spustiť. V Matlabe sa tieto súbory nazývaju M-súbory (M-files). Matlab obsahuje aj textový editor na zjednodušenie práce s nimi a poskytuje rôzne ďalšie funkcie na uľahčenie práce s M-súbormi.
Ako už bolo spomenuté v úvode M-súbor je textový súbor, ktorý obsahuje príkazy Matlabu. Zvyčajne sa ukladá s príponou .m. M-súbory môžeme rozdeliť na dva typy:
- Skripty – neprímajú vstupné a nevracajú výstupné argumenty, operujú nad dátami workspace
- Funkcie – prímajú vstupné a vracajú výstupné argumenty, interné premenné sú lokálne premenné funkcie
Keď sa spúšťa skript, Matlab vykonáva príkazy, ktoré sa nachádzajú v súbore po riadkoch. Skripty môžu využívať existujúce dáta Workspace, alebo môžu vytvárať nové dáta. Skripty nevracajú žiadne argumenty, avšak premenné, ktoré vytvoria ostanú vo Workspace. Funkcie si popíšeme v ďalších častiach nášho seriálu.
Matlab obsahuje vlastný textový editor M-súborov. Editor poskytuje grafické užívateľské prostredie na písanie textu a krokovanie M-súborov. Editor sa spúšťa príkazom edit, prípadne pomocou menu File > New. Pre vytvorenie prázdneho M-súboru s menom treba napísať nasledujúci príkaz a potvrdiť voľbu.
>>edit subor.m
Existujúce M-súbory sa dajú otvoriť v menu File > Open, alebo pomocou príkazou edit a open. Súbor môžeme otvoriť ako novú záložku presunutím pomocou myši z Current Directory do editora využitím funkcie Drag and Drop. Súbor si môžeme vypísať ako text v Command Window pomocou príkazu type.
>>open subor.m
>>edit subor.m
>>type subor.m
Skripty nemusíte písať hneď do prázdnych M-súborov. Väčšinou užívatelia píšu príkazy do príkazového riadka (prompt v Command Window), ktoré sa ukladajú do Histórie príkazov (Command History). V Histórii označte príkazy, ktoré chcete mať v skripte a po stlačení pravého tlačidla na myši zvoľte z ponuky Create M-file. Dá sa využiť aj funkcia Drag and Drop, kde označíte príkazy z histórie a presuniete ich držaním ľavého tlačidla na myši do editora. Na tvorbu M-súborov môžete využiť aj už existujúce súbory, ktoré treba ináč nazvať, aby nevznikali konflikty pri spúšťaní.
Obr.1 Vytvorenie M-súboru z Command History
Na tvorbu M-súborov môžete využiť aj iné textové editory a v editore Matlab-u sa môžu už len krokovať (debugovať). Pre nastavenie iného editora, ako štandardného Matlab-ového editora využite menu File > Preferences > Editor/Debugger. Editovať môžeme rôzne textové súbory napríklad pre HTML, Java, C/C++ a ďalšie iné.
Niekedy je vhodné nevykonávať učité časti príkazov v M-súbore. Na túto činnosť slúžia komentáre. Komentár začína znakom percenta a končí na konci aktuálneho riadku. Pre lepšiu identifikáciu sa komentáre zvýrazňujú štandardne zelenou farbou. Viacriadkové komentáre sa robia vložením symbolov %{ a }% na samostatné riadky pred a za blok riadkov, ktoré chceme zakomentovať. Komentáre môžete do seba vnárať.
Ďalšou užitočnou funkciou v editore je dokončovanie príkazov pomocou tabulátora. Príkaz alebo meno premennej netreba zadávať celé, stačí zadať časť a po stlačení tabulátora sa zobrazí sa ponuka na doplnenie textu. Zrýchľuje to písanie skriptov a dopĺňat môžeme aj vlastnosti príkazov alebo časti v štruktúrach. Súbory môžeme porovnať medzi sebou pomocou nástroja v menu Tools > Compare Against a môžeme súbor porovnať s jeho autosave-om alebo iným súborom, kde nám matlab zobrazí rozdiely v súboroch. Túto operáciu vieme vykonať aj s adresármi priamo v Matlab-e v menu Desktop.
Uloženie zmien súborov sa robí v menu File > Save, File > Save As alebo File > Save All podľa toho či chceme súbor uložiť štandardne, pod iným menom alebo uložiť všetky otvorené súbory v editore. Na uloženie môžeme použiť aj tlačidlá na panely nástrojov. Matlab priebežne ukladá M-súbor do súbora s príponou asv každých 5 minút. Ďalšie funkcie editora ako sú zvýrazňovanie textu, hľadanie a nahradzovanie reťazcov, klávesové skratky a tlačenie súborov nájdete v užívateľskom manuály (Help-e).
Na spustenie súbora sa využije tlačidlo Run z toolbaru, prípadne menu Debug > Run menosubora, z príkazového riadka pomocou príkazu run, alebo samostatným menom M-súbora.
>>run subor
>>subor
Častokrát sa stane, že sa v M-súbore pomýlime pri zadávaní príkazov. V M-súboroch sa môžu vyskytovať dva typy chýb:
- Syntaktické chyby – zlé meno príkazu, zabudnuté zátvorky a pod.
- Chyby behu programu – väčšinou chyba v algoritme, neuskutočniteľný výpočet a pod.
Na opravu chýb poskytuje Matlab niekoľko možností. Najčastejšie sa používa na hľadanie chýb zvýrazňovanie textu, chybové hlášky, a programy na krokovanie programu. Krokovanie M-súbora môžeme robiť v Editore alebo v príkazovom riadku. My si popíšeme len editor a postup pomocou príkazového riadka nájdete v užívateľskej príručke. Krokovaním sa všeobecne myslí zastavenie na určitom riadku programu a skontrolovanie hodnôt premenných, prípadne posúvanie sa ďalej po riadkoch od bodov zastavenia (breakpoints). Existujú 3 typy breakpointov:
- štandardné – zastavenie na určitom riadku
- podmienené – zastavenie je po vyhodnotení podmienky
- chybové – zastavenie na upozornenie, chybu, hodnoty NaN alebo inf
Štandardný breakpoint priradíme riadku kliknutím na pomlčku vedľa čísla riadku alebo pomocou príslušného tlačidla na toolbare. Breakpoint môžeme zmeniť na ďalšie typu pomocou pravého tlačidla myši, prípadne ho dočasne zakázať. Úplne zrušenie spravíme kliknutím na breakpoint, pomocou v menu pravým tlačidlom alebo ikonkou.
Po nastavení breakpointov môžeme spustiť skript pomocou tlačidla Run. Skript zastane na prvom breakpointe a riadok, v ktorom sa aktuálne nachádza je označený zelenou šípkou. Šípka označuje riadok, ktorý sa vykoná nasledovný. V príkazovom riadku sa zmení symbol prompt na K>> čo znamená, že sme v režíme krokovania. Na krokovanie sa využívajú tlačídka z panelu Step (vykoná aktuálny riadok), Step in (vykoná riadok a ak je to funkcia ide do nej), Step out (dokončí všetky príkazy funkcie a odíde z nej, ak je v hlavnom skripte dokončí ho), Continue (dokončí krokovanie skriptu alebo vykoná príkazy po ďalší breakpoint) a Exit debug mode (ukončí krokovanie).
Prezeranie hodnôt môžeme robiť presunutím kurzora nad premennú, po ktorom sa zobrazi okno s obsahom premennej, v príkazovom riadku zadaním mena premennej alebo pomocou Workspace. Takýmto spôsobom vieme zistiť chybu v programe. Zvyšné typy breakpointov sa nepoužívajú až tak často, preto ich nepopisujeme, ale nájdete ich v užívateľskej príručke.
Breakpointy zrušíte kliknutím na samostatný breakpoint alebo pomocou tlačidla na toolbare. Pokročilé časti Matlab-u ako sú M-Lint Code Analyzer, M-file cells (cells v tomto prípade označuje časť skriptu), Profiling (optimalizácia skriptov z časového hľadiska), Publikovanie M-súborov (napríklad ako HTML) nepopisujeme v tomto článku (keďže ich bežný užívateľ väčšinou nepoužíva), ale nájdete ich v užívateľskej príručke.
V tejto časti sme si popísali čo sú to M-súbory, ako ich vytvoriť a krokovať pomocou textového editora Matlab-u. Venovali sme sa skriptom a funkcie si popíšeme v nasledujúcej časti.