Cíle
Cílem tohoto semináře je seznámit se základními konstrukcemi pro řízení běhu programu, vytvářením skriptů a s tím souvisejícími tématy.
Proměnné dle rozsahu platnosti
V Matlabu existují tři druhy promměných dle rozsahu platnosti: lokální, globální a persistentní.
Pokud u přeměnné nezadáme jinak, pak je proměnná automaticky lokální. Lokální proměnné fungují podobně jako v jiných jazicích.
Globální proměnné je potřeba deklarovat. K tomu slouží klíčové slovo global
.
Při první deklaraci je hodnota globální proměnné nastavena na práznou 0x0 matici.
Opětovná deklarace globální proměnné samozřejmě hodnotu nemění.
Více o globální proměnných je zde.
Posledním typem jsou persistentní proměnné. Ty se chovají podobně jako lokální ale stím rozdílem,
že si pamatují svou hodnotu i do dalších volání funkce. Pomocí těchto proměnných lze například naprogramovat čítač.
K deklaraci persistentních proměnných se používá klíčové slovo persistent
.
Více o persistentních proměnných je zde.
Datové typy
Seznam datových typů je uveden zde. Výchozí datový typ matice je double (Double-Precision Floating Point).
Větvení - if, elseif, else
Syntax:
if expression
statements
elseif expression
statements
else
statements
end
přičemž elseif
a else
jsou nepovinné.
A = ones(2,3);
B = rand(3,4,5);
if isequal(size(A),size(B))
C = [A; B];
else
disp('A and B are not the same size.')
C = [];
end
Další příklady naleznete zde.
Větvení - switch, case, otherwise
Syntax:
switch switch_expression
case case_expression
statements
case case_expression
statements
otherwise
statements
end
Q: Kdy se používá switch?
A: Když potřebujeme otestovat pouze konečný počet možností. Kód je pak přehlednější.
Příklady jsou zde.
Cykly - for
Syntax:
for index = values
statements
end
Cyklus indexuje po sloupcích, tedy mezi následujícími cykly je rozdíl:
l = 1
for v = [1 5 8 17]
disp(v)
l = l + 1
end
l = 1
for v = [1; 5; 8; 17]
disp(v)
l = l + 1
end
Vyzkoušejte. Další příklady jsou zde.
Cykly - while
Syntax:
while expression
statements
end
Příklady jsou zde.
Pro cykly jsou k dispozici příkazy continue a break.
Ošetření chyb: try a catch
Try
a catch
slouží k ošetřování vyjímek.
Syntax:
try
statements
catch exception
statements
end
Příklad:
try
a = notaFunction(5,6);
catch
warning('Problem using function. Assigning a value of 0.');
a = 0;
end
Další příklady jsou zde.
M-soubory
M-soubor je textový soubor s příponou .m
, který obsahuje zdrojový kód v jazyku Matlab.
Matlab obsahuje zabudovaný editor M-souborů, ve kterém lze upravovat a ladit kód.
Pro editaci slouží příkaz edit
.
Příkaz edit file_name
tedy otevře editor a v něm zadaný soubor s názvem file_name.
Automaticky se prohledává aktuální adresář.
Pokud je soubor umístěn v jiné složce, je třeba přidat tuto cložku do proměnné path
(více help path přímo v Matlabu).
Skripty
Skripty jsou jedním z typů programu v Matlabu. Neobsahují žádné vstupní ani výstupní parametry, mohou pracovat pouze s hlavní pamětí. M-soubor obsahující skript by měl začínat komentářem.
Příklad skriptu. Příkazem
edit mysphere_surface
vytvořte M-soubor s názvem mysphere_surface a vložte do něj následující kód:
% ------------------------------------------------------------------------%
% ---------- The Surface of the sphere -----------------------------------%
%-------------------------------------------------------------------------%
r=1;
u=linspace(0,2*pi,100);
v=linspace(0,2*pi,100);
[u,v]=meshgrid(u,v);
x=r.*sin(v)*cos(u);
y=r.*sin(v)*sin(u);
z=r.*cos(v);
figure(1)
m = mesh(x,y,z);
m.FaceColor = 'flat';
xlabel('X','fontSize',10);
ylabel('Y','fontSize',10);
zlabel('Z','fontsize',10);
title('Sphere','fontsize',10)
%-------------------------------------------------------------------------%
Soubor uložte a zavřete. Skript pak lze spustit zadáním jeho názvu, tedy mysphere_surface
.
Více informací ke skriptům naleznete zde.
Vstup a výstup
Po zadání vstupu slouží funkce input
.
Načtení čísla:
mynumber = input('Enter the number: ');
Načtení textového řetezce:
mystr = input('Enter a string: ', 's');
Výpis lze provést pomocí funkcí disp, display nebo printf.
Vícerozměrná pole
Matlab není omezen jen na matice, umožňuje pracovat i s vícerozměrnými poli. Více v dokumentaci zde.