Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Java. Zároveň využij akce až 80 % zdarma při nákupu e-learningu. Více informací:

Lekce 2 - První skript a základní příkazy

V dnešní lekci si ukážeme, jak vytvoříme vlastní skript. Nebojte se, není to nic složitého. Takže se dáme do toho... ;)

Vytvoření skriptu

Po tom, co se vám MATLAB načetl, zvolte v záložce HOME -> New -> Script nebo jednoduše použijte klávesovou zkratku Ctrl + N. Měl by se vám otevřít MATLABovský editor a to buď přímo implementovaný do hlavního okna nebo jako samostatné okno. Pokud vám vaše rozložení nevyhovuje, vraťte se o lekci zpět a tam najdete odpověď na váš problém.

Pokud tedy máme již otevřen nový skript, bylo by fajn, kdybychom jej také hned uložili, protože okamžitě uvidíme, ve které složce se pohybujeme (což je docela užitečné vědět, pokud pracujeme se soubory). MATLAB má vlastní příponu svých skriptových souborů a jedná se o takzvaný m-file (.m).

Doporučená hlavička každého skriptu

Na začátku každého skriptu bychom si měli zajistit, že máme pracovní plochu čistou, a to proto, aby nám nevznikaly chyby zapříčiněné proměnnými z posledních prací. Dále by také bylo dobré uzavřít všechna okna s grafy a ostatními vykreslovanými prvky. A nakonec také vymazat obsah konzole (Command Window - CW).

close all; % Zavři vše
clear; % Smaž vše
clc; % Vyčisti Command Window

Příkaz close <parametr> uzavře okno dle názvu zadaného jako parametr (např. close okno1). Pro uzavření všech oken slouží parametr all.

Příkaz clear <parametr> smaže proměnnou dle názvu zadaného jako parametr (např. clear a). Pro smazání všech proměnných zadáme příkaz bez parametru (případně s parametrem all, který se dnes již nedoporučuje používat).

Příkaz clc vymaže veškerý obsah Command Window.

Komentáře

Jak jste si jistě všimli o kousek zpět, tak se v kódu nacházejí komentáře. MATLAB má jako označovací znak komentářů procento %:

% Toto je obyčejný řádkový komentář

Dejte si pozor na příliš dlouhé komentáře. Pokud jste nezměnili v nastavení zalamování řádků, tak se vám budou komentáře automaticky zalamovat po asi 80 znacích. To by nebyl takový problém, ale na dalším řádku se nevytváří další procento a text se začne brát jako součást kódu. Začnete-li komentář dvěma procenty (%% text) při zapnutém módu buněk/sekcí (Cell mode), se vytvoří nová sekce s názvem uvedeným po mezeře za procenty. Tyto sekce se pak dají spouštět jednotlivě.

%{
Toto je blokový komentář.
V editoru se pak nabízí krásná možnost tento blok skrýt.
%}

Počáteční a koncové dva znaky %{ a %} blokového komentáře musí být na samostatném řádku.

Proměnné

Definice proměnných je velmi snadnou záležitostí. V MATLAB není třeba definovat žádné datové typy proměnných, o to vše se stará MATLAB sám. Jediná situace, kdy by se měl uživatel starat o datové typy, je chvíle, když chce pracovat s hodnotami v určitém datovém typu (např. při práci s obrazem). Ale teď již k našim definicím proměnných.

Jednorozměrné proměnné

a = 1
b = 0.2;

Přestože se tato definice dvou proměnných může zdát naprosto stejnou, tak je v ní rozdíl. Zápisem a = 1 definujeme proměnnou a a zároveň ji necháváme vypsat do Command Window. Kdežto druhá definice a to proměnné b definuje pouze hodnotu dané proměnné bez jejího výpisu. A ještě pozor na správný zápis desetinného čísla, vždy s tečkou! Čárka slouží k rozdělení čísel ve vektoru (stejně jako mezera, viz níže).

Vektory

Chceme-li generovat nějakou posloupnost hodnot s určeným krokem, vytvoříme tedy vektor, a to je v podstatě matice 1 x n (nebo n x 1). V MATLAB budete pracovat hlavně s maticemi a jsou proto také uzpůsobeny veškeré jeho funkce. Ukážeme si, jak je možné nadefinovat vektor a matici.

v1 = [1 2 3 4 5]
v2 = [1, 2, 3, 4, 5]

Mezi definicí těchto dvou vektorů v1 a v2 není kromě absence čárek žádný rozdíl. Definujeme řádkový vektor s pěti prvky nebo matici s jedním řádkem a pěti sloupci. Je tedy možné oddělovat sloupce buď mezerami, nebo čárkami. A pokud se podíváte o krok zpět, tak si jistě vzpomenete, že obě tyto proměnné se nám vypíší do Command Window, protože nejsou zakončeny středníkem.

Matice

M1 = [1, 2, 3, 4, 5; 6, 7, 8, 9, 10; 11, 12, 13, 14, 15]

Zde již definujeme matici o třech řádcích a pěti sloupcích. Každý řádek je oddělen středníkem. Budete-li definovat nějakou matici s určitým rozměrem a nebudete si jisti, co se píše první, tak si vždy řekněte, že je to stejné jako násobení dvou matic (Řádek x Sloupec).

Generování posloupností

Obecná definice pro posloupnost s určitým krokem je p : krok : k, kde p znamená počáteční hodnotu, krok je snad jasný (může být též záporný a posloupnost bude klesající) a k je koncová hodnota (např. 0:2:10, samozřejmě je lepší psát to bez mezer. Jsou zde pouze pro lepší přehlednost).

v1 = 1 : 10
v2 = 0 : .5 : 5
M1 =[1:3; 4:6; 7:9]

Takže k popisu. Vektor v1 jsme vygenerovali od jedné do desíti s krokem jedna, který není třeba psát. Vektor v2 je již generován s krokem 0.5, který je schválně zapsán zkráceně, abych vám ukázal další možnost zápisu desetinného čísla začínajícího nulou. A konečně k naší záhadné matici M1. Jde o matici 3x3 a generování čísel tak, jak jsme si ukázali u vektoru v1.

Výpis do Command Window

Pro výpis do Command Window je spoustu možností. Existuje nepřeberné množství funkcí, kterými docílíme výpisu přesně takového, jaký potřebujeme.

Základní výpis bez užití funkce

Nejjednodušší možností je zapsat do kódu pouze název proměnné bez zakončení středníkem.

Kód:

a = 1; % Nadefinování hodnoty
a % Výpis

Výstup:

a =

     1
>>

Funkce disp()

Použít můžeme i funkci disp(<parametr>), kde můžeme jako parametr použít buď pouze název proměnné (disp(a)), přičemž výstup bude naprosto stejný jako o krok výše. Tato funkce je ovšem docela užitečná pro výpis textových řetězců. Pozor na apostrofy na místo uvozovek (disp('Retezec'))!

Kód:

disp('Ahoj Svete!');

Výstup:

Ahoj Svete!
>>

Chcete-li vypisovat také nějaké proměnlivé argumenty a přitom použít funkci disp(), je to samozřejmě možné, ovšem poměrně složité. Ukáži vám to na jednoduchém případě, kdy zadáte nějakou hodnotu a program ji následně vypíše. Tím si ukážeme zároveň i vkládání hodnot do programu skrze funkci input(<retezec dotazu>, <navracet retezec?>), která nám navrací hodnotu do proměnné a pokud má jít o textový řetězec, přidáváme za dotaz ještě parametr '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.
>>

Zde jsme poměrně složitě vypsali text a nějaké proměnné, ale také jsme si ukázali načítání jednotlivých hodnot. Dále jste si mohli všimnout funkce num2str(<proměnná>), která převádí číselnou hodnotu na textový řetězec. A abych to uvedl na pravou míru, tak si povšimněte, že funkce disp() obsahuje jako parametr jen textové hodnoty a to ještě uzavřené hranatými závorkami, které vždy označují hodnotu vícerozměrné proměnné! Jde tedy o úplně stejný případ jako na začátku a vypisujeme hodnotu vektoru, který je složen z textových řetězců. Pro úplné pochopení ukáži pří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 dvou úseků kódu bude naprosto totožný.

Funkce fprintf()

Dále se nabízí možnost vypisovat řetězce textu a ostatní proměnné stejně jako v jazyku C. A to použitím funkce fprintf(<datový proud>, 'text', <argumenty>...). Datový proud zapisujeme pouze pokud pracujeme se soubory.

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 textů znamenají konec řádku stejně jak je to ve spoustě dalších programovacích jazycích.

  • %d – Znamená, že na místo těchto znaků bude vypsáno celé číslo. Možno použít také %i.
  • %f – Znamená, že na místo těchto znaků bude vypsáno desetinné číslo.
  • %s – Znamená, že na místo těchto znaků bude vypsán textový řetězec.

Samozřejmě je možné použít všechny tyto argumenty najednou, pak je ovšem třeba napsat za text proměnné ve správném pořadí.

fprintf('Toto je cele cislo: %d\nToto je desetinne cislo: %f\nToto je text: %s\n', a, b, c);

Další možnosti formátování můžete nalézt zde.

To by bylo pro tuto lekci asi vše. Příště, v lekci Práce s maticemi a vektory, si ukážeme práci s maticemi a vektory.

Pár upozornění na závěr

  • Definice proměnné zakončená středníkem se vám nevypíše do Command Window, takže se pak nelekejte, že se vám proměnná nevytvořila. Opravdu je tam... ;)
  • Nepleťte si při zápisu desetinných čísel čárku a tečku. Desetinné číslo vždy s tečkou.
  • Pokud zadáváte vícerozměrné proměnné, hodnoty uvádějte do hranatých závorek.
  • Matice je definována vždy jako řádek x sloupec. Řádky se oddělují středníky a sloupce čárkami či mezerami a vše to musí být v hranatých závorkách!
  • Pokud vám MATLAB vypíše do Command Window nějakou chybu, tak většinou píše, opravdu, o jakou chybu se jedná. A myslím, že každý alespoň trošičku zběhlý v angličtině by si s tím měl poradit. Kdyby ne, tak se alespoň zaměřte na číslo řádku, které vám vypsal ;)

 

Předchozí článek
Seznámení s uživatelským prostředím
Všechny články v sekci
Matlab
Přeskočit článek
(nedoporučujeme)
Práce s maticemi a vektory
Článek pro vás napsal David Oczka
Avatar
Uživatelské hodnocení:
15 hlasů
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