Uživatel:Jkl~cswikiversity/Studuji Matlab/vscht
Součást samostudijního kurzu Studuji Matlab vycházející z návodu vystaveného na VŠCHT
1. lekce
[editovat]Seznámení s GUI matlabu - to nám bude při používání na vzdálených systémech k ničemu, ale na první rozpinkání ve Windows by to mohlo být užitečné. Matlab má tři režimy - dialogový režim - ovládací konzole, programový režim - de facto editor .m souborů a grafický režim pro vizualizaci výsledků (okna Figure). Ovládání je standardní windowsové. Příkazem format [compact|long] lze zvolit formát výpisu proměnných. Pokud nám chybí operátor na levé straně rovnice, tak se výsledek uloží do proměnné ans (jako answer, odpověď).
Proměnné vznikají přiřazením (asi jako v BASICu), jsou "netypové" charakteru matic. Konvence povolených jmen je stejná jako ve většině civilizovaných programovacích jazků, tedy žádné číslovky na začátku, žádná diakritika, žádné závorky a podobná zvěrstva. Proměnné lze uložit příkazem save a načíst pomocí load, vždy se píše jméno souboru bez přípony.
K číslům se také chováme tradičně - t.j. desetinná tečka nikoliv čárka, zápisy všechny rozumné matematické, komplexní čísla píšeme jako 8+5i. K výpisu použijeme jen jméno proměnné jako příkaz. Proměnné uvolňujeme příkazem clear, bez parametru odstraní všechny !
Předdefinované konstanty (eps,pi,i ...) lze přetížit (!), po použití clear se to ale vrátí.
Pokud nechceme nechat vypsat mezivýsledek, dáme nakonec příkazu středník, čili
>> A=[1 2 3];
nevypíše nic (což je užitečné při definování 20 4-rozměrných matic jedním příkazem ;-).
Více příkazů na jednom řádku oddělujeme čárkou (vypisuje mezivýsledek) nebo středníkem (nevypisuje mezivýsledek). Komentáře se označují znakem procenta (% komentář)
2. lekce
[editovat]Řeší operátory a jejich prioritu. Vcelku nic překvapivého, u sčítání a násobení matic se musí jen dát bacha na shodnost rozměrů (tedy pokud třeba nenásobíme skalárem). Zajímavým operátorem je dvojtečka, která vytváří posloupnost a má syntax nápadně podobný
FOR I = 1 TO 10 STEP 2
- v Matlabu se totéž zapsalo jako 1:10:2.
3. lekce
[editovat]Matlab umí - kupodivu - pracovat i s řetězci. Ty se ukládají v "jednoduchých uvozovkách" - t.j. podobně jako v pascalu, PHP a jinak než v C/C++.Špatný vtip je v tom, že pokud chceme řetězce uložit do matice, musí mít všechny stejnou délku - čili jsou asi implementovány jako char[n] nikoliv jako třeba zero-terminated string jako v Céčku a spol, string s délkou v prvním bytu jako v pascalu či dokonce v nějakém std::stringu jako v C++. Ach jo. Pro práci se stringy existují funkce, které se vesměs jmenují stejně jako Cčkové (známé i z jazyků jím inspirovaných jako je PHP) - str2num, num2str, strcmp, upper,lower ...).
Podmínka se píše jako if, jednoduše bez závorek, bez středníků. Lze použít elseif a to i několikrát, konec podmínkových větví končí příkazem end.
Programy či makra v matlabu se označují jako "skripty". Jedná se o běžně interpretované ASCII soubory s příponou .m, pro jejichž jména platí stejné podmínky jako pro jména proměnných. Matlab má barevný editor pro tyto soubory, ale masochisté je mohou editovat klidně v poznámkovém bloku a frajeři ve vimu. Když chceme skript spustit, musíme být ve stejném adresáři (cd whatever) a pak napíšeme jméno souboru bez přípony. Ano, vše nasvědčuje tomu, že je matlab tak blbý, že neumí spustit skript z jiného než aktuálního adrešáře. Ještě že máme v UNIXu symlinky ...
Jako většina civilizovaných jazyků "umí" matlab i funkce. Ty mají tu "výhodu" že nevidí na globální proměnné a narozdíl třeba od PHPčka neexistuje klauzule global, která by je zpřístupnila. Takže co chceme funkci dát, to jí musíme předat jako vstupní parametr. Fuj. Syntax funkce je function [výstupy]= jmeno_funkce (vstupy). Aby nebylo prasáren dost, může být výstupů víc a pokud je jen jeden, nemusí se psát hranatá závorka. Pokud hned za deklaraci funkce dáme komentáře, tak se vypíšou při volání příkazu help název_funkce. Pokud funkce selže, můžeme volat error, ev. s textovým parametrem (vypadá to stejně jako write() v Pascalu. Funkci musíme uložit pod stejnojmenným názvem do .m souboru. Ach jo. Vypsat funkci lze příkazem type (koho to pobuřuje ve vzpomínce na Pascal s tím souhlasím !!).
Existuje funkce nargin udávající počet vstupních parametrů. Stejně jako v C++ lze ignorovat parametry postupně zprava. Mimochodem - teprve tady zjišťuji, že matlab místo != píše ~= . Fúúúj.
Debugging: F12 breakpoint, F10-F11 krokování.
4. lekce
[editovat]Speciální znaky - opakování předchozího, věc, kterou jsem před tím přehlédl je transpozice matice operátorem apostrofu ' .která převrátí imaginární složku.
Hledáme-li knihovní funkci, lze použít lookfor, která nám vypíše první řádek komentáře funkce. Příklady funkcí:
- skalární funkce - sin,cos, exp. log (ne ln !!), log10, sqrt, abs
- vektorové funkce - min,max,sum,median ...
- maticové funkce - determinant (det), inverzní matice (inv), pseudoinverze (pinv), hodnost matice (rank),skalární součin (dot)
- kromě posledního moc nechápu, asi si budu muset zopakovat teorii matic :-(
- funkce na naplnění matice - zeros,ones, eye (jednotková matice), rand - vždy 1-2 parametry
- size a length
- bude potřeba vyzkoušet, teď mi běží výpočet ...
- výpisy:
- std::cout<<"cosi" -> disp('cosi')
- std::cerr<<"cosi" -> error('cosi')
Matlab umí jednoduše řešit soustavy lineárních rovnic - stačí vydělit - opět věc, kterou bych musel vyzkoušet, abych o ní mohl poreferovat.