Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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 ;)

 

Predchádzajúci článok
Zoznámenie s užívateľským prostredím
Všetky články v sekcii
Matlab
Preskočiť článok
(neodporúčame)
Práca s maticami a vektormi
Článok pre vás napísal David Oczka
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje vývoji aplikací pro medicínské účely. Momentálně se zabývá vývojem webových aplikací s použitím frameworku Symfony. Další oblasti, ve kterých se nejčastěji pohybuje, jsou C#, Java, Android, Matlab, C/C++ a okrajově i VHDL nebo iOS.
Aktivity