Programy se v MATLABu zapisují do souborů typu M-File (přípona .m
).
%%
. Skript je možné spustit zadáním jeho názvu do Command window
. První komentář ve skriptu je přístupný přes příkaz help
.Užitečné zkratky: CTRL+n
vytvoří nový skript, F5
provede aktuální skript, F9
provede vybranou část kódu, CTRL+enter
vykoná aktuální buňku kódu. CTRL+r
zakomentuje blok kodu, CTRL+t
odkomentuje blok kodu, CTRL+i
provede automatické odsazení kódu.
Více o datových typech v MATLABu naleznete zde.
x = 10;
% veskere promenne se stale chovaji jako matice!
>> size(x)
ans =
1 1
Navíc speciální typ uložení (sparse
) pro některé datové typy. Pozor. Při použití proměnné stejné jako je název již existující (či funkce) dojde k jejímu přepsání (je možné např. modifikovat funkci plus
).
Lokální, globální (global
) a persistentní (persistent
). Poslední jsou analogie lokálních proměnných navíc si uchovávají hodnotu mezi voláními funkce.
ans
, inf
, NaN
, version
, computer
.
Uvozují se uvozovkami.
Základní přehled operátorů. Operátory mají obvykle textový a symbolické název (plus
a +
). Nerovnost se netradične označuje ~=
.
if
, elseif
, else
if r == c
A(r,c) = 2;
elseif abs(r-c) == 1
A(r,c) = -1;
else
A(r,c) = 0;
end
switch
n = input('Enter a number: ');
switch n
case -1
disp('negative one')
case 0
disp('zero')
case 1
disp('positive one')
otherwise
disp('other value')
end
for
% zakladni cyklus
s = 10;
H = zeros(s);
for i = 1:s
for j = 1:s
H(r,c) = 1/(i+j-1);
end
end
% uprava kroku
for v = 1.0:-0.2:0.0
disp(v)
end
% iterace pres vektor
for v = [1 5 8 17]
disp(v)
end
% automaticka iterace pres vektory matice
for I = eye(4,3)
disp('Current unit vector:')
disp(I)
end
break
, continue
, pause
, keyboard
(klavesnicový mód, ukončení příkazem return
).
while
n = 10;
f = n;
while n > 1
n = n-1;
f = f*n;
end
disp(['n! = ' num2str(f)])
% nacteni cisla
mynumber = input('Enter the number: ');
% nacteni textoveho retezce
mystr = input('Enter a string: ', 's');
% graficky dialog pro vyber
volba = menu('Vyberte', 'a', 'b', 'c');
% vypsani lze provest pomoci funkci disp, display nebo printf
% fprintf lze aplikovat i na matice
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
). Upravy souboru lze provést příkazem edit
, potlačení výpisu v M-souborech lze provést příkazem echo
. Funkce lookfor
hledá v komentářích na prvních řádcích.
Vytvoře vektor V
obsahující čísla 1 až 10. Následně tento vektor převraťte (bude obsahovat čísla 10 až 1) bez použití funkce fliplr
Vytvořte skript který pouze za použití konstrukce for
vytvoří následující čtvercové matice, kde velikost matice je určena uživatelem (zadána z klávesnice).
A =
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0
B =
1 0 0 0 0
2 4 0 0 0
3 6 9 0 0
4 8 12 16 0
5 10 15 20 25
C =
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
1 1 1 1 1
Napište skript který nalezne minimum, maximum a jejich souřadnice v libovolném vektoru (uvažujte pouze první výskyt).
Rozšiřte předchozí příklad tak aby fungoval i na matice. V případě, že bude minimálních či maximálních hodnot více určete všechny jejich souřadnice.
Vytvoře skript který vypíše matici C v následujícím formátu.
| XXX.X| XXX.XX| XXX.XXX| XXX.XXXX| XXX.XXXXX|
| 326.8| 914.23| 494.428| 710.3683| 664.69605|
| 831.9| 258.22| 769.753| 410.5198| 55.76007|
| 870.9| 972.24| 116.940| 508.0272| 755.56151|
| 109.9| 33.17| 441.425| 129.3269| 971.56759|
| 940.8| 933.39| 983.621| 693.9652| 702.82847|
| 371.8| 64.96| 443.183| 542.6704| 540.73560|
| 786.8| 601.68| 947.330| 631.0347| 878.12019|
| 122.3| 813.84| 977.901| 231.4499| 912.98854|
| 676.0| 725.86| 685.529| 796.9755| 529.87722|
| 754.2| 503.35| 907.058| 123.4441| 852.44109|
Pro vygenerování matice použijte následující kód.
C = rand(10,5) + randi([0 999], 10,5);
Implementujte Floyd-Warshallův algoritmus na hledání nejkratší cesty v matici D
. Algoritmus realizujte jako skript. Pro testování použijte následující matici.
D =
0 5 Inf 2 Inf
Inf 0 2 Inf Inf
3 Inf 0 Inf 7
Inf Inf 4 0 1
1 3 Inf Inf 0
Určete co dělá následující kód pro vstupní matici D
.
n = size(D, 1);
for k = 1 : n
fromitok = repmat(D(:,k), 1, n);
fromktoj = repmat(D(k,:), n, 1);
D = min(D, fromitok + fromktoj);
end
David Kočíř after Martin Trnečka