1. Spuštení MATLABu

Ve většině operačních systému lze MATLAB spustit vypsáním příkazu matlab na příkazový řádek a ukončit příkazem exit nebo quit. Na PC lze MATLAB například spustit (pokud je nainstalován) takto:

C> matlab

a ukončit takto:

>> quit

V systémech podporujících multitasking, jako např. Unix, je z důvodů uvedených v kapitole 14 výhodné ponechat spuštěný jak MATLAB, tak i textový editor.

2. Zadávání matic

MATLAB v podstatě pracuje pouze s jedním druhem objektů - obdélníkovými číselnými maticemi, které mohou mít za prvky komlexní čísla. Všechny proměnné reprezentují matice, specielně maticí 1x1 se rozumí číslo (skalár), matice s jediným řádkem (sloupcem) je potom chápána jako vektor.

Matice mohou být v MATLABu zadávány různě:

Například každý z příkazů

A = [1 2 3; 4 5 6; 7 8 9]

a

A = [
1 2 3
4 5 6
7 8 9 ]

vytvoří čtvercovou matici 3x3 a přiřadí ji proměnné A. Vyzkoušejte. Prvky řádku matice lze oddělit čárkou nebo jen mezerou.

Při zadávání čísla v exponenciálním tvaru (např. 2.34e-9) je nutno provést celý zápis čísla bez mezer. Zadávání rozsáhlých matic je lepší provést pomocí M-souborů, kde se lépe opravují případné chyby (viz kap. 12 a 14).

Vestavěné funkce rand, magic, a hilb nabízejí například snadné generování matic pro pokusné účely. Příkaz rand(n) vytvoří matici n x n s náhodně generovanými prvky z intervalu (0,1), zatímco rand(m,n) vytvoří stejnou matici obdélníkovou m x n. magic(n) vytvoří celočíselnou matici n x n, která je magickým čtvercem (řádky a sloupce mají stejný součet); hilb(n) vytvoří Hilbertovu matici n x n (m a n jsou samozřejmě kladná celá čísla). Matice lze také generovat for-cyklem (viz kap. 6).

Jednotlivé prvky matice a vektoru jsou přístupné pomocí obvyklého indexování, například A(2,3) označuje prvek ze druhého řádku a třetího sloupce matice A a x(3) značí třetí složku vektoru x. Vyzkoušejte. Matice nebo vektor můze být indexována pouze kladnými celými čísly.

3. Maticové a skalární operace

V MATLABu lze používat následující operace:

+sčítání
-odčítání
*násobení
^mocnění
'transpozice
\dělení zleva
/dělení zprava

Tyto maticové operace fungují samozřejmě i pro skaláry (matice 1x1). Pokud rozměr matice nedovoluje provést příslušnou operaci, objeví se chybové hlášení. Výjimkou jsou skalární operace aplikované na matice (sčítání, odčítání, dělení, násobení). V tomto případě je operace provedena po prvcích (po složkách).

"Maticové dělení" je operace zasluhující speciální komentář. Je-li A invertibilní čtvercová matice a b vhodný řádkový (resp. sloupcový) vektor, pak

x = A \ b je řešení soustavy A * x = b a
x = b / A je řešení soustavy x * A = b.

Při dělení zleva, je-li A čtvercová, je upravena Gaussovou eliminací a poté použita k řešení A * x = b. Pokud A není čtvercová, je rozložena pomocí Householderovy ortogonalizace se sloupcovou pivotací a rozklad je použit k řešení s využitím metody nejmenších čtverců. Dělení zprava je definováno pomocí dělení zleva jako b / A = (A' \ b')'.

Skalární operace. Maticové operace sčítání a odčítání vždy probíhají po složkách, ale ostatní výše zmíněné operace nikoli -- jsou to maticové operace. Je důležité, že i tyto operace *, ^, \ a / lze nechat provést po složkách připsáním tečky před operaci. Například [1,2,3,4].*[1,2,3,4] nebo [1,2,3,4].\^2 dá výsledek [1,4,9,16]. Vyzkoušejte. Této vlastnosti lze využít zejména při používání matlabovské grafiky.

4. Příkazy, výrazy a proměnné; uložení práce

MATLAB je "výrazový" jazyk; výrazy, které zadáte jsou přečteny a vyhodnoceny. Příkazy MATLABu mají obvykle tvar

proměnná = výraz, nebo jen jednoduše
výraz

Výrazy se obvykle skládají z operátorů, funkcí a označení proměnných. Vyhodnocením výrazu se vytvoří matice, která je zobrazena na monitor a přiřazena do proměnné pro pozdější použití. Pokud jsou jméno proměnné a znak = vynechány, automaticky se vytvoří proměnná ans (answer = odpověď), do které se přiřadí výsledek.

Příkaz je běžně ukončen koncem řádku (Enter, Return). Lze však zajistit, aby příkaz pokračoval na dalším řádku, a to připsáním tří nebo více teček před ukončením řádku.

Pokud je poslední znak na řádku středník, potlačí se zobrazení na monitor, ale přiřazení do proměnné zůstane zachováno. Lze s výhodou využít k potlačení zobrazování mezivýsledků a podobně.

MATLAB v názvech příkazů, proměnných a funkcí rozlišuje mezi velkými a malými písmeny. Například solveUT není totéž co solveut.

Příkaz who vypíše seznam používaných proměnných. Proměnnou lze zrušit pčíkazem clear jméno proměnné. Samotný příkaz clear smaže všechny nepředdefinované proměnné.

Předdefinovaná proměnná eps (epsilon) udává přesnost - na většině počítačů 10^(-16). Užitečné při určování tolerance u konvergence iterovaných procesů.

Probíhající zobrazování nebo výpočet lze na většině počítačů zastavit bez ukončení MATLABu stiskem CTRL-C (CTRL-BREAK na PC).

Uložení práce. Je-li MATLAB ukončen, všechny proměnné definované při práci se ztrácí. Vyvoláním příkazu save před ukončením MATLABu dojde k zapsání všech proměnných do diskového souboru matlab.mat, který je pro člověka nesrozumitelný. Při dalším otevření MATLABu mohou být znovu vyvolány příkazem load.

5. Funkce pro generování matic

Užitečné funkce pro tvorbu matic jsou:

eyejednotková matice
zerosmatice nul
onesmatice jedniček
diagviz níže
triuhorní trojúhelníková matice
trildolní trojúhelníková matice
randnáhodně generovaná matice
hilbHilbertova matice
magicmagický čtverec
toeplitzviz help toeplitz

Například zeros(m,n) vytvoří matici nul m x n a zeros(n) vytvoří matici nul n x n; Je-li A matice, pak zeros(A) vytvoří matici nul stejných rozměrů, jaké má A.

Je-li x vektor, diag(x) je diagonální matice, která má na diagonále prvky x (shora dolů); je-li A čtvercová matice, pak diag(A) je vektor sestavený z diagonálních prvků matice A. Co je diag(diag(A))? Vyzkoušejte.

Matice mohou být blokové, například je-li A matice 3x3, pak

B = [A, zeros(3,2); zeros(2,3), eye(2)]

vytvoří jistou :-) matici 5x5. Vyzkoušejte.

6. Cykly, podmínky a relace

MATLAB umožňuje využívání těchto nástrojů (v základní podobě) tak, jak je obvyklé ve většině programovacích jazyků.

For. Například for a dvojtečka n - příkaz

x = []; for i = 1:n, x=[x,i^2], end

nebo

x = [];
for i = 1:n
x = [x,i^2]
end

vytvoří jistý n-rozměrný vektor a příkaz

x = []; for i = n:-1:1, x=[x,i^2], end

vytvoří tentýž vektor v opačném pořadí. Vyzkoušejte. Pozor - matice může být prázdná (jako např. x = []). Příkazy

for i = 1:m
for j = 1:n
H(i, j) = 1/(i+j-1);
end
end
H

vytvoří a zobrazí Hilbertovu matici m x n. Středník za vnitřním příkazem potlačí výstup mezivýslekdu, naopak koncové H zobrazí konečný výsledek.

While. Základní podoba while cyklu je

while relace
příkazy
end

Příkazy jsou opakovaně prováděny tak dlouho, dokud platí relace (podmínka). Například následující cyklus pro dané číslo a spočítá a vypíše nejmenší nezáporné číslo n, pro které platí 2^n>= a:

n = 0;
while 2^n < a
n = n + 1;
end
n

If. Základní podoba jednoduchého příkazu if je

if relace
příkazy
end

Příkazy budou provedeny pouze pokud relace platí. Je možné i větvení, jak ukazuje následující příklad:

if n < 0
parity = 0;
elseif rem(n,2) == 0
parity = 2;
else
parity = 1;
end

Při větvení na dvě části lze pochopitelně část elseif vynechat.

Relace. Relační operátory v MATLABu jsou

<menší než
>větší než
<=menší nebo rovno
>=větší nebo rovno
==rovno
~=není rovno.

Pozor! Znak "=" se používá v přiřazovacím příkazu, zatímco pro rovnost je zaveden znak "==". Relace mohou být spojovány nebo kvantifikovány pomocí logických operátorů

&and (a)
|or (nebo)
~not (negace)

Při aplikaci na skaláry je výsledek relace také skalár s hodnotou 1 nebo 0 v závislosti na tom, zda platí nebo ne. Vyzkoušejte 3 < 5, 3 > 5, 3 == 5, a 3 == 3. Při aplikaci na matice stejných rozměrů je výsledkem relace matice nul a jedniček, která udává výsledky relace pro jednotlivé vzájemně si odpovídající prvky. Vyzkoušejte a = rand(5), b = triu(a), a == b.

Relace mezi maticemi je v příkazech while a if chápána jako true (1, splněno), pouze pokud všechny prvky relační matice jsou nenulové. Chcete-li tedy provést příkaz když se matice A a B rovnají, stačí napsat

if A == B
příkaz
end

pokud však chcete příkaz provést, když A není rovno B, použijte zápis

if any(any(A ~= B))
příkaz
end

nebo jednodušeji

if A == B else
příkaz
end

Pozor! Zdánlivě logicky správné

if A ~= B, příkaz, end

nevrátí zamýšlený výsledek, neboť se příkaz provede pouze v případě, ze každá dvojice vzájemně si odpovídajících prvků matic A a B relaci == porušuje. Funkce any a all mohou být využity k redukci maticových relací na vektorové a skalární. Ve zmíněném příkladě je nutno psát dvakrát any, protože any je vektorový operátor (viz kap. 8).

Příkaz for povoluje použít namísto zápisu 1:n libovolnou matici. Pro podrobnější popis tohoto použití příkazu for viz manuál.

7. Skalární funkce

Jisté funkce jsou v MATLABu zavedeny v podstatě pouze pro skaláry. Při aplikaci na matici se aplikují po prvcích (po složkách). Nejběžnější z těchto funkcí jsou

sinasinexpabsround
cosacoslog (přirozeny log)sqrtfloor
tanatanrem (zbytek)signceil

8. Vektorové funkce

Jiné funkce jsou v MATLABu definovány pro vektor (řádkový nebo sloupcový), ale lze je aplikovat i na matici m x n (m >= 2) - aplikace probíhá po sloupcích, výsledkem je řádkový vektor obsahující výsledky z jednotlivých sloupců. Aplikaci po řádcích lze zajistit tranpozicí, například mean(A')'. Některé z těchto funkcí jsou

maxsummedianany
minprodmeanall
sortstd

Například maximální prvek matice A lze určit jako max(max(A)), ale pozor na nesprávný zápis max(A). Vyzkoušejte.

[pokračovat další kapitolou]
[návrat na obsah]