Uživatel:Jkl~cswikiversity/Studuji Matlab/vscht

Z Wikiverzity
Skočit na navigaci Skočit na vyhledávání

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.

5. lekce[editovat]

6. lekce[editovat]

7. lekce[editovat]

8. lekce[editovat]

9. lekce[editovat]