MATLAB – základy		I.Pultarová, únor 2002

MATrix LABoratory. Nejnovější je verze 6 (release 12).
Základní internetový odkaz - http://www.mathworks.com.

1.	Prostředí, stručný popis oken

Command Window – příkazové okno pro zadávání příkazů v jazyku Matlabu. 
Workspace – zde se zobrazuje obsah paměti; je možné jednotlivé proměnné editovat.
Command History – dříve zadané příkazy; označení datem.
Current Directory – prohlížeč souborů a adresářů.
Launch Pad – rychlý přístup k hlavním součástem MATLABu.
Help / Matlab Help v hlavní nabídce - zobrazí nápovědu.
File / Set Path nastaví cesty k používaným adresářům.
File / Preferences – základní nastavení komponent Matlabu.

2.	Základní vlastnosti

Základní datový typ je matice.
Za znakem % následuje komentář. 
Středník za příkazem potlačí zobrazení výsledku. 
Příkazy na jednom řádku se oddělují čárkami nebo středníky.
Má-li příkaz pokračovat na dalším řádku, napíše se na konci ... a stiskne Enter.
MATLAB rozlišuje velká a malá písmena (case-sensitive).
Standardně se počítá s desetinnými čísly, vyjádření výsledků ve zlomcích zajistí příkaz format rat. Příkaz format long nebo format long e(zobrazuje se všech 16 cifer), format short (4 desetinná místa).

3.	Některé matematické funkce

cos	kosinus
sin	sinus
tan	tangens
exp	exponenciala o zakladu e
log, log10, log2	logaritmus přirozený, o základu 10 a 2
sqrt	(druhá) odmocnina
abs	absolutní hodnota
imag, real, conj	imaginární a reálná část komplexního čísla, komplexně sdružené číslo
round, floor, ceil	zaokrouhlení, zaokrouhlení doleva, doprava

4.	Relační a logické operátory

<, <=, >, >=, ==, ~=
&, |, ~

5.	Operace s maticemi

u = [7 8 9]	řádkový vektor
v = [3; 4; 5] 	sloupcový vektor
v = u’	transpozice vektoru
w = 2:8 	ektor [ 2 3 4 5 6 7 8]
y = 2:3:20 	vektor [2 5 8 11 14 17 20]
y = 3: end	prvky vektoru y s indexy od 3. do posledního
X = linspace(a, b, N)	řádkový vektor N čísel ekvidistantně rozložených mezi a a b, X(1)=a, X(N)=b
X = logspace(a, b, N)	řádkový vektor N čísel exponenciálně rozložených mezi a a b, X(1)=a, X(N)=b
A = [1 2 3;  5 6 7] 	matice o 2 řádcích a 3 sloupcích
B = sparse(A)	řídká matice

eye(3)   	jednotková matice 3x3
ones(3) 	matice jedniček
zeros(3) 	matice nul
diag(w) 	diagonální matice s vektorem w na diagonále
diag(A)	diagonála matice A (vektor)
spdiags(B, d, m, n)	řídká matice typu m x n vytvořená ze sloupců matice B umístěných na pozice určené vektorem d
full(A)	zobrazení řídké matice v „plném“ tvaru
spy(A)	schematické zobrazení „zaplnění“ matice A
rand(3,4)	matice typu 3 x 4 náhodných čísel mezi 0 a 1 (rovnoměrné rozdělení)
rand('state',0)	nastavení generátoru náhodných čísel do stavu 0
randn(3) 	matice náhodných čísel s normálním rozdělením (střední hodnota je 0, rozptyl je 1)
ones(4, 8) 	obdélníková matice jedniček
zeros(size(B)) 	nulová matice stejného typu jako B
M = zeros(3, 4, 5)	trojrozměrné pole nul

B(3,1) = 8  	změna prvku v matici
B(k)	k-tý prvek v matici (počítáno po sloupcích)
1:8 nebo 1:0.3:2	operátor dvojtečka: vektor [1 2 3 4 5 6 7 8] nebo [1 1.3 1.6 1.9]
u = A(:, 3) 	vektoru u se přiřadí hodnoty třetího sloupce z matice A, symbol dvojtečka se zde dosazuje místo hodnoty "všechny"
A(2, :) = v	druhému řádku v matici A se přidělí hodnoty vektoru v
A([2 5], :)	2. a 5. řádek v matici A
A([2 5], :) = A([5 2], :)prohození 2. a 5. řádku v matici A
A(2 : 5, 3 : 4)	submatice matice A složená z průsečíků řádků 2 až 5 a sloupců 3 až 4
A(:)	sloupcový vektor složený ze všech sloupců matice A
B = [A b]	matice složená z matice A a vektoru b
B = [A A'; inv(A), A]	matice složená ze 4 submatic
B = A([2 1 3], :)	permutace řádků matice
A(:, 2) = []	odstranění 2. sloupce z matice
v(2: 2: 10) = []	odstranění všech sudých složek vektoru

Operátory: +,  -,  , /, \ (tzv. dělení "zleva"), ^ (umocnění), '(vytvoření adjungované matice), .* (násobení po prvcích), ./ (dělení po prvcích), .\ (dělení zleva po prvcích), .^ (umocnění po prvcích), .' (transpozice bez komplexního sdružení)
A = A + 1	přičtení 1 ke všem prvkům matice A
B = A + ones(3) 	součet dvou matic
v = B * u 	násobení matic (vektorů)
A * B	násobení matic
A .* B	násobení matic "po prvcích" 
A' 	transpozice matice 
reshape(A, m, n)	změna tvaru matice – sloupce se seřadí do jednoho a ten se poskládá do tvaru m x n
sum(A)	součet prvků ve sloupcích matice A, výsledek je řádkový vektor
inv(A) 	inverse matice (A musí být čtvercová a regulární)
pinv(A)	pseudoinverse matice A
x = A \ B 	maticové dělení - vyřešení soustavy rovnic s maticí A (čtvercová a regulární) a maticí pravé strany B (použvá se zhruba řečeno Gaussova eliminace);
	jestliže A není regulární, je řešení získáno metodou nejmenších čtverců (pro přeurčené soustavy) nebo je výsledkem jedno řešení nehomogenní soustavy s největším počtem nulových slože (pro nedourčené soustavy)
x = pinv(A) * B	řešení nedourčené soustavy lineárních rovnic pomocí Moore-Penroseovy pseudoinverze (minimalizace normy vektoru řešení)
null(A)	báze nulového prostoru matice A
A / B 	maticové dělení - výsledkem je B' \ A'
A ./ B	dělení "po prvcích a / b"
A .\ B 	dělení "po prvcích b / a" 
dot(x, y)	skalární součin
triu(A,n)	horní trojúhelníková matice (od n-té diagonály) z matice A
tril(A,m)	dolní trojúhelníková matice (od m-té diagonály) z matice A

det(A)	determinant matice A (čtvercová)
rank(A)	hodnost matice A
norm(A, p)	norma matice A- sloupcová (p=1), řádková (p=Inf), největší singulární hodnota – viz. funkce svd (p=2), Frobeniova (p='fro')
norm(v, p)	lp norma vektoru v (1 ≤ p ≤ Inf)
size(A)	dvojice čísel [m n] (počet řádků a sloupců)
length(A)	ten větší z rozměrů matice
numel(A)	počet prvků v matici A
trace(A)	stopa 
[L, U, P] = lu(A)	LU-rozklad matice A; platí PA = LU
e = eig(A)	vektor vlastních čísel matice A
[U, S, V] = svd(A)	rozklad na singulární čísla: A = U * S * V', U a V jsou unitární matice, S je diagonální matice singulárních čísel
conv(u, v)	konvoluce vektorů u, v

isprime(A)	test na prvočíslo, výsledek je 0 nebo 1
finite(A)	test na Inf nebo NaN, výsledek je 0 nebo 1
mod(n, p)	zbytek po celočíselném dělení n/p
find(A > 7)	vyhledávání
sort(A)	třídění

6.	Pole s dimenzí větší než 2

Třetí dimenzi představuje 3. index, je nazývána „page“.
A = zeros(2, 3, 4)	trojrozměrné pole nul
B = zeros(7, 8); 
B(:, :, 2) = ones(7, 8)	přidání druhé „stránky“ k matici B

7.	Polynomy

p = [1 –2 8]	reprezentace polynomu pomocí vektoru jeho koeficientů (v pořadí od nejvyšší mocniny)
polyval(p, A)	vyčíslení polynomu p v prvcích matice A 
polyvalm(p, A)	vyčíslení polynomu v matici A (dosazení A za nezávisle proměnnou)
roots(p)	kořeny polynomu p
p = polyfit(x, y, n)	aproximace dat [x, y] polynomem stupne n ve smyslu nejmenších čtverců

8.	Znaky a řeťezce

a = 'slovo'	proměnná typu řetězec
a'	transpozice
a(2:4)	část řetězce
disp(a)	zobrazení bez označení proměnné
str2num(s)	převede pole řetězců na pole znaků

9.	Některé optimalizační funkce

p = polyfit(x, y, n)	aproximace dat [x, y] polynomem stupne n ve smyslu nejmenších čtverců
yk = pchip(x, y, xk)	interpolace po částech kubickým Hermiteovým polynomem
yk = spline(x, y, xk)	interpolace kubickou spline funkcí
lsqcurvefit(@F, [x0], xdata, ydata)	nelineární interpolace (metodou nejmenších čtverců); řeší úlohu najít x, pro které výraz norm(F(x,xdata) – ydata, 2)^2 nabývá svého minima
x = fsolve(@F, x0)	řešení rovnice F(x) = 0; počáteční přiblížení x0

10.	Funkce pro řibližné řešení diferenciálních rovnic

[T, Y] = ode45(@F, [0 1], [a b])	metoda Runge-Kutta 4.řádu pro soustavy diferenciálních rovnic
odeset('AbsTol', 1e-6)		nastavení parametrů pro řešiče diferenciálních rovnic

11.	Některé další důležité konstanty a funkce

pi	číslo π
i nebo j	imaginární jednotka
real(x)	reálná část komplexního čísla/vektoru
imag(x)	imaginární část komplexního čísla/vektoru
eps	relativní přesnost pro operace v pohyblivé řádové čárce; např. 1 + 2^(-53) je 1	
realmin	2^(-1022) nejmenší nenulové reálné číslo, (ale ve skutečnosti 2^(-1074) ≠ 0, 2^(-1074) = 0)
realmax	(2-eps)^1023 největší reálné číslo menší než Inf, (ale (2-eps)^1024 < Inf)
Inf, inf	"nekonečno", např 1/0 nebo hodnota větší než realmax
NaN, nan	nenumerický výraz (Not-a-Number)
set()	nastavení parametrů objektů
get()	parametry objektů
f = inline('sin(x+a)', 'x', 'a')	jednoářdková definice funkce
clear all, clear functions, clear JmenoFunkce	vymazání z paměti

12.	M-soubory

M-soubory jsou textové soubory s koncovkou .m, do kterých se píší funkce a skripty. Spouští se napsáním jména souboru na příkazový řádek a stisknutím Enter. Je vhodné volit název funkce stejný jako název souboru. Skript může pracovat s proměnnými v paměti MATLAbu a také po skončení běhu skriptu hodnoty proměnných zůstanou v paměti. Skripty nemají vstupní ani návratové hodnoty. Funkce používá vlastní paměťový prostor, může mít vstupní argumenty a vracet hodnoty. Po definici hlavní funkce mohou v m-souboru následovat definice dalších funkcí (tzv. subfunctions). Funkce i skripty obsahují příkazy v jazyku MATLAB.

if  (n > 0 && mod(n, 2) == 0) m = n / 2 else m = n end; 	rozhodování
if  (x < a) x = a ,elseif  (x > b) x = b, else x = (a + b) / 2, end; 	rozhodování
switch  (Vyraz) case Hodnota, Prikaz, case Hodnota, Prikaz, ..., otherwise Prikaz, end;
		rozhodování – příkaz switch
for i = 1 : 10, x(i) = i^2,  end;	cyklus
for i = 1 : 2 : 10, x(i) = 0,  end;	cyklus
while (Vyraz) Prikaz end;	cyklus
continue		skok na další smyčku cyklu
break		ukončení cyklu
disp('Chyba!')		výpis na příkazový řádek

function [VystupniData] = JmenoFunkce(VstupniData) Prikazy end	zápis funkce

function [maxim, minim] = extremy (a, b, delta)	příklad definice funkce
i = 1;
for c = a : delta : b; x(i) = sin(c)*c; i = i + 1; end;
maxim = max(x);
minim = min(x); 
plot(a : delta : b, x);

[u,v] = extremy(1,30,0.5)	příklad volání funkce

13.	Soubory a adresáře

!dir	za znakem ! následují příkazy systému
path	zobrazení prohledávaných cest (lze i z hlavní nabídky)
addpath Cesta	přidání k seznamu prohledávaných cest (lze i z hlavní nabídky)
cd JmenoAdresare	změna aktuálního adresáře
type JmenoSouboru  	výpis souboru
whos 	zobrazí proměnné v paměti a jejich hodnoty
save 'JmenoSouboru' 	proměnné a jejich hodnoty se uloží do souboru JmenoSouboru.mat
load 'JmenoSouboru' 	zkopíruje se do paměti obsah souboru JmenoSouboru.mat
diary	uložení příkazů z klávesnice do souboru	
ver	informace o Matlabu a toolboxech	

s1 = fopen('soubor', 'w')	otevření souboru pro zápis
fprintf(s1, '%6.2f,  %12d\n', x, n)	formátovaný zápis do souboru (syntaxe dle jazyka C)	
s2 = fopen('soubor', 'r')	otevření souboru pro čtení
A = fscanf(s2, '%6.2f,  %12d\n')	čtení formátovaných dat ze souboru 
fclose(s1)		uzavření souboru, uložení na disk
y = wavread('soubor.wav')	čtení zvukových wav-souborů
wavwrite(y, 'soubor.wav')	zápis zvukového wav-souboru

14.	Kreslení

Matlab umožňuje pokročilé grafické operace využitím „ukazatelů“ na grafické objekty. Se stromovou strukturou grafických objektů se lze seznámit v nápovědě: z hlavní nabídky Help / Matlab Help / karta Contents / složka Matlab / Reference / Graphics Object Propery Browser.

fplot('sin', [-2   10])	vykreslí funkci
x = 0 : pi/100 : 2*pi; y = sin(x); plot(x, y)
 	vykreslí body o souřadnicích xi, yi spojené lomenou čarou
plot(y)	vykreslí body o souřadnicích i, yi spojené lomenou čarou
plot(x, y, ':', x, sin(x-0.3), 'b--') vykreslí dva grafy do stejného obrázku, první tečkovaně, druhý čárkovaně modře
plot(A)	vykreslí sloupce matice (několik sérií bodů spojených lomenou čarou)
plot(Z)	je-li Z vektor komplexních čísel, vykreslí se body o souřadnicích real(Z) a imag(Z)	
t=0:0.2:2*pi; plot(cos(t)+i*sin(t), '*')	kreslení komplexního vektoru (kružnice)
t = 0 : pi/50 : 10*pi; plot3(sin(t), cos(t), t)	parametrické 3-D kreslení
t = 0:.01:2*pi; polar(t, abs(sin(2 * t) .* cos(2 * t)));	parametrické kreslení
[x, y, z] = pol2cart(theta, r, z)		převedení z polárních nebo cylindrických souřadnic do kartézských
[theta, r] = cart2pol(x, y)		převedení z kartézských souřadnic do polárních nebo cylindrických
[x, y, z] = sph2cart(theta, phi, r)	převedení ze sférických souřadnic do kartézských
[theta, phi, r] = cart2sph(x, y, z)	převedení z kartézských souřadnic do sférických

xlabel('rychlost [m/s]')	označení vodorovné osy
ylabel('čas [s]')	označení svislé osy
title('Pohyb kyvadla')	nadpis grafu
axis square, axis([-pi pi -1 1])	nastavení os souřadnic
grid on, grid off	zapnutí / vypnutí zobrazení souřadnic
text(1, 1.5,'{\itNalezněte lokální maxima.}')	umístění textu do grafu, používá se jazyka TeX
hold on	výstup do existujícího (posledního vytvořeného) grafu
hold off 	překreslení předchozího grafického výstupu
subplot(m, n, p)	rozdělení aktuálního grafického okna na mxn částí v m řádcích a n sloupcích a nastavení grafického výstupu do p-tého z nich (počítáno po řádcích)
cla	vymazání aktivního grafu
clf	vymazání aktivního grafického okna

[X, Y] = meshgrid(x, y)	vytvoří uspořádanou množinu všech uspořádaných dvojic ze složek vektorů x a y, např.: 
[X, Y] = meshgrid(0:0.1:3, 0:0.4:5); surf(X, Y, sin(X .* Y))	
[X, Y] = meshgrid(0:0.1:3, 0:0.1:3); surf(X, Y, sin(X .* Y), 'FaceColor', 'red', 'EdgeColor', 'none');...
camlight left; lighting phong 		jiný příklad použití
contour(X, Y, cos(X + Y))		vrstevnice
contourf(X, Y, cos(X + Y))		vrstevnice (vybarvené plochy)
surf([0 1;0 1;0 1],[0 0;1 1; 2 2],[1 1; 6 6; 1 1])	kreslení plochy po trojúhelnících (střecha)
surfc(X, Y, cos(X + Y))		kreslení plochy a vrstevnic
for k = 1: 50 ; y(k) = rand(1, 1) * k; plot(x, y); M(k) = getframe; end; movie(M, 2, 30)		"pohyblivé" obrázky, přehrání (1x při nahrávání +) 2x, a to frekvencí 30 obr./s
movie2avi(M, 'soubor')	převedení sekvence obrázků na soubor formátu avi
disp('Slova')	výpis hlášení
text(x, y, 'Slova')	umístění textu do obrázku na souřadnice x, y
b = ginput(3)	vstup souřadnic 3 bodů vybraných pomocí myši
gca	“ukazatel” na aktivní graf
gcf	“ukazatel” na aktivní grafické okno
set()	nastavení parametrů grafického výstupu, např.:
set(gca, 'DataAspectRatio', [1 1 1])	nastavení poměrů měřítek os souřadnic v aktivním grafu
get()	odečtení parametrů grafického výstupu, např.:
get(gcf, 'Color')	barva pozadí aktivního grafického okna