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