2. diel - Prvý skript a základné príkazy
V dnešnej lekcii si ukážeme, ako vytvoríme vlastný skript. Nebojte sa, nie je to nič zložité. Takže sa dáme do toho ...
Vytvorenie skriptu
Po tom, čo sa vám MATLAB načítal, vyberte v záložke HOME -> New -> Script alebo jednoducho použite klávesovú skratku Ctrl + N. Mal by sa vám otvoriť MATLABovský editor a to buď priamo implementovaný do hlavného okna alebo ako samostatné okno. Ak vám vaše rozloženie nevyhovuje, vráťte sa o lekciu späť a tam nájdete odpoveď na váš problém.
Ak teda máme už otvorený nový skript, bolo by fajn, keby sme ho tiež
hneď uložili, pretože okamžite uvidíme, v ktorej zložke sa pohybujeme (čo
je celkom užitočné vedieť, ak pracujeme so súbormi). MATLAB má vlastnú
príponu svojich skriptových súborov a jedná sa o takzvaný m-file
(.m
).
Odporúčaná hlavička každého skriptu
Na začiatku každého skriptu by sme si mali zaistiť, že máme pracovnú plochu čistú, a to preto, aby nám nevznikali chyby zapríčinené premennými z posledných prác. Ďalej by tiež bolo dobré uzavrieť všetky okná s grafmi a ostatnými vykreslovanými prvky. A nakoniec tiež vymazať obsah konzoly (Command Window - CW).
close all; % Zavři vše clear; % Smaž vše clc; % Vyčisti Command Window
Príkaz close <parametr>
uzavrie okno podľa názvu
zadaného ako parameter (napr. close okno1
). Pre uzavretie
všetkých okien slúži parameter all
.
Príkaz clear <parametr>
zmaže premennú podľa názvu
zadaného ako parameter (napr. clear a
). Pre zmazanie všetkých
premenných zadáme príkaz bez parametra (prípadne s parametrom
all
, ktorý sa dnes už neodporúča používať).
Príkaz clc
vymaže všetok obsah Command Window.
Komentáre
Ako ste si iste všimli o kúsok späť, tak sa v kóde nachádzajú
komentáre. MATLAB má ako označovacia znak komentárov percento
%
:
% Toto je obyčejný řádkový komentář
Dajte si pozor na príliš dlhé komentáre. Ak ste nezmenili v nastavení
zalamovanie riadkov, tak sa vám budú komentáre automaticky zalamovať po asi
80 znakoch. To by nebol taký problém, ale na ďalšom riadku sa nevytvára
ďalšie percento a text sa začne brať ako súčasť kódu. Ak začnete
komentár dvoma percentami (%% text
) pri zapnutom móde buniek /
sekcií (Cell mode), sa vytvorí nová sekcia s názvom uvedeným po medzere za
percentami. Tieto sekcie sa potom dajú spúšťať jednotlivo.
%{ Toto je blokový komentář. V editoru se pak nabízí krásná možnost tento blok skrýt. %}
Počiatočné a koncové dva znaky %{
a %}
blokového komentáre musí byť na samostatnom riadku.
Premenné
Definícia premenných je veľmi jednoduchou záležitosťou. V MATLAB nie je potrebné definovať žiadne dátové typy premenných, o to všetko sa stará MATLAB sám. Jediná situácia, kedy by sa mal používateľ starať o dátové typy, je chvíľa, keď chce pracovať s hodnotami v určitom dátovom typu (napr. Pri práci s obrazom). Ale teraz už k našim definíciám premenných.
Jednorozmerné premenné
a = 1 b = 0.2;
Hoci sa táto definícia dvoch premenných môže zdať úplne rovnakú, tak
je v nej rozdiel. Zápisom a = 1
definujeme premennú
a
a zároveň ju nechávame vypísať do Command Window. Kdežto
druhá definícia a to premenné b
definuje iba hodnotu danej
premennej bez jej výpisu. A ešte pozor na správny zápis desatinného
čísla, vždy s bodkou! Čiarka slúži na rozdelenie čísel vo vektore
(rovnako ako medzera, pozri nižšie).
Vektory
Ak chceme generovať nejakú postupnosť hodnôt s určeným krokom,
vytvoríme teda vektor, a to je v podstate matica 1 xn
(alebo
nx 1
). V MATLAB budete pracovať hlavne s maticami a sú preto
tiež uspôsobené všetky jeho funkcie. Ukážeme si, ako je možné
nadefinovať vektor a maticu.
v1 = [1 2 3 4 5] v2 = [1, 2, 3, 4, 5]
Medzi definíciou týchto dvoch vektorov v1
a v2
nie je okrem absencia čiarok žiadny rozdiel. Definujeme riadkový vektor s
piatimi prvkami alebo maticu s jedným riadkom a piatimi stĺpci. Je teda
možné oddeľovať stĺpce buď medzerami, alebo čiarkami. A ak sa pozriete o
krok späť, tak si iste spomeniete, že obe tieto premenné sa nám vypíšu do
Command Window, pretože nie sú zakončené bodkočiarkou.
Matice
M1 = [1, 2, 3, 4, 5; 6, 7, 8, 9, 10; 11, 12, 13, 14, 15]
Tu už definujeme maticu o troch riadkoch a piatich stĺpcoch. Každý riadok je oddelený bodkočiarkou. Ak budete definovať nejakú maticu s určitým rozmerom a nebudete si istí, čo sa píše prvý, tak si vždy povedzte, že je to rovnaké ako násobenie dvoch matíc (Riadok x Stĺpec).
Generovanie postupností
Všeobecná definícia pre postupnosť s určitým krokom je
p : krok : k
, kde p
znamená počiatočnú hodnotu,
krok
je snáď jasný (môže byť tiež záporný a postupnosť
bude klesajúci) a k
je koncová hodnota (napr.
0:2:10
, samozrejme je lepšie písať to bez medzier. Sú tu len
pre lepšiu prehľadnosť).
v1 = 1 : 10 v2 = 0 : .5 : 5 M1 =[1:3; 4:6; 7:9]
Takže na opis. Vektor v1
sme vygenerovali od jednej do desiatej
s krokom jedna, ktorý nie je potrebné písať. Vektor v2
je už
generovaný s krokom 0.5
, ktorý je schválne zapísaný skrátene,
aby som vám ukázal ďalšiu možnosť zápisu desatinného čísla
začínajúceho nulou. A konečne k našej záhadnej maticu M1
. Ide
o maticu 3x3 a generovanie čísel tak, ako sme si ukázali u vektora
v1
.
Výpis do Command Window
Pre výpis do Command Window je veľa možností. Existuje nepreberné množstvo funkcií, ktorými docielime výpisu presne takého, aký potrebujeme.
Základný výpis bez použitia funkcie
Najjednoduchšie možnosťou je zapísať do kódu len názov premennej bez zakončenia bodkočiarkou.
kód:
a = 1; % Nadefinování hodnoty
a % Výpis
výstup:
a = 1 >>
Funkcia disp ()
Použiť môžeme aj funkciu disp(<parametr>)
, kde
môžeme ako parameter použiť buď iba názov premennej
(disp(a)
), pričom výstup bude úplne rovnaký ako o krok
vyššie. Táto funkcia je však celkom užitočná pre výpis textových
reťazcov. Pozor na apostrofy na miesto úvodzoviek
(disp('Retezec')
)!
kód:
disp('Ahoj Svete!');
výstup:
Ahoj Svete! >>
Ak chcete vypisovať aj nejaké premenlivé argumenty a pritom použiť
funkciu disp()
, je to samozrejme možné, avšak pomerne zložité.
Ukážem vám to na jednoduchom prípade, keď zadáte nejakú hodnotu a program
ju následne vypíše. Tým si ukážeme zároveň aj vkladanie hodnôt do
programu cez funkciu
input(<retezec dotazu>, <navracet retezec?>)
, Ktorá
nám navracia hodnotu do premennej a ak má ísť o textový reťazec,
pridávame za dotaz ešte parameter 's'
kód:
disp('Ahoj.'); Jmeno = input('Napis mi sve jmeno: ', 's'); Vek = input('A kolik je Ti?: '); disp(['Jmenujes se ', Jmeno, ' a je Ti ', num2str(Vek), ' let.']);
výstup:
Ahoj. Napis mi sve jmeno: David A kolik je Ti?: 20 Jmenujes se David a je Ti 20 let. >>
Tu sme pomerne zložito vypísali text a nejaké premenné, ale tiež sme si
ukázali načítanie jednotlivých hodnôt. Ďalej ste si mohli všimnúť
funkcie num2str(<proměnná>)
, ktorá prevádza číselnú
hodnotu na textový reťazec. A aby som to uviedol na pravú mieru, tak si
všimnite, že funkcia disp()
obsahuje ako parameter len textové
hodnoty a to ešte uzavreté hranatými zátvorkami, ktoré vždy označujú
hodnotu viacrozmerné premennej! Ide teda o úplne rovnaký prípad ako na
začiatku a vypisujeme hodnotu vektora, ktorý je zložený z textových
reťazcov. Pre úplné pochopenie ukážem príklad.
Úsek 1:
disp(['Jmenujes se ', Jmeno, ' a je Ti ', num2str(Vek), ' let.']);
Úsek 2:
Retezec = ['Jmenujes se ', Jmeno, ' a je Ti ', num2str(Vek), ' let.']; disp(Retezec);
Výstup u týchto dvoch úsekov kódu bude úplne totožný.
Funkcia fprintf ()
Ďalej sa ponúka možnosť vypisovať reťazca textu a ostatné premenné
rovnako ako v jazyku C. A to použitím funkcie
fprintf(<datový proud>, 'text', <argumenty>...)
.
Dátový prúd zapisujeme iba ak pracujeme so súbormi.
kód:
a = 1; b = .2; c = 'retezec'; fprintf('Toto je cele cislo: %d\n', a); fprintf('Toto je desetinne cislo: %f\n', b); fprintf('Toto je text: %s\n', c);
výstup:
Toto je cele cislo: 1 Toto je desetinne cislo: 0.200000 Toto je text: retezec >>
Dva znaky \n
na konci textov znamenajú koniec riadku rovnako
ako je to v množstve ďalších programovacích jazykoch.
%d
- Znamená, že na miesto týchto znakov bude vypísané celé číslo. Možno použiť tiež%i
.%f
- Znamená, že na miesto týchto znakov bude vypísané desatinné číslo.%s
- Znamená, že na miesto týchto znakov bude vypísaný textový reťazec.
Samozrejme je možné použiť všetky tieto argumenty naraz, potom je však potrebné napísať za text premennej v správnom poradí.
fprintf('Toto je cele cislo: %d\nToto je desetinne cislo: %f\nToto je text: %s\n', a, b, c);
Ďalšie možnosti formátovania môžete nájsť tu.
To by bolo pre túto lekciu asi všetko. Nabudúce, v lekcii Práca s maticami a vektormi , si ukážeme prácu s maticami a vektormi.
Pár upozornenie na záver
- Definícia premenné zakončená bodkočiarkou sa vám nevypíše do Command Window, takže sa potom neľakajte, že sa vám premenná nevytvorila. Naozaj je tam ...
- Nemýľte si pri zápise desatinných čísel čiarku a bodku. Desatinné číslo vždy s bodkou.
- Ak zadávate viacrozmerné premenné, hodnoty uvádzajte do hranatých zátvoriek.
- Matica je definovaná vždy ako riadok x stĺpec. Riadky sa oddeľujú bodkočiarkami a stĺpce čiarkami či medzerami a všetko to musí byť v hranatých zátvorkách!
- Ak vám MATLAB vypíše do Command Window nejakú chybu, tak väčšinou píše, naozaj, o akú chybu sa jedná. A myslím, že každý aspoň trošičku zbehlý v angličtine by si s tým mal poradiť. Keby nie, tak sa aspoň zamerajte na číslo riadka, ktoré vám vypísal