2. díl - První skript a základní příkazy

Software Matlab První skript a základní příkazy

V dnešním dílu 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 díl 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 tak zvaný 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 all; % 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 slouží parametr „all“.

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.
%}

Co se týče blokových komentářů, jsou opravdu fajn. Zmíním zde asi jediné upozornění. Počáteční a koncové dva znaky „%{“ a „%}“ musí být na samostatném řádku.

Proměnné

Definice proměnných je velmi snadnou záležitostí. V Matlabu 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! I když píši jednorozměrné, jde o matice 1x1.

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. V Matlabu budete pracovat hlavně s maticemi a jsou proto také uzpůsobeny veškeré 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í absolutně žá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í

Mírně jsem pozapomněl na již zmíněnou posloupnost s určitým krokem, takže rovnou se k ní vrátím a ukáži vám ji na vektoru a také na matici. Obecná definice je „p : krok : k“, kde p znamená počáteční hodnotu, krok je snad jasný 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“.

K náhodným hodnotám proměnných bych se dostal o trochu později.

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(<parame­tr>)“, 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 také 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(<pro­mě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 část asi opět vše. Příště 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… ;)

 

  Aktivity (3)

Článek pro vás napsal David Oczka
Avatar
Autor se věnuje vývoji aplikací pro medicínské účely. Nejčastěji používá jazyk C# nebo jazyk systému Matlab. Ale nebojí se ani jiných programovacích jazyků. Okrajově vyvíjí také pro operační systém Android a iOS.

Jak se ti líbí článek?
Celkem (5 hlasů) :
4.24.24.24.2 4.2


 


Miniatura
Všechny články v sekci
Matlab
Miniatura
Následující článek
Práce s maticemi a vektory

 

 

Komentáře

Avatar
TH23
Člen
Avatar
TH23:

Tak jestli mohu, měl bych pár postřehů k tomuto článku:

  1. Umístění je vždy důležité, protože při spouštění skriptů musí být daný skript uložen v cestách ke skriptům (paths), nebo musí být v aktuálně otevřené složce (Current Folder). Nebylo by od věci na to upozornit, protože až pak někdo spustí skript a vyskočí na něj známá tabulka s umístěním souboru, bude vědět o co jde:)
  2. Komentář %% TEXT_KOMENTARE je tzv. sekce. Nejen že sekce lze sbalit/rozbalit pro zpřehlednění napsaného kódu (Preferences -> Editor/Debugger -> Code Folding -> Enable Sections), ale především lze sekce spouštět samostatně bez spuštění kódu z jiných sekcí (např. pravým tlačítkem myši -> Evaluate Current Section)
  3. Každá proměnná v Maltabu je matice. I jedno číslo je matice [1x1].
  4. Určitě bych zmínil více formátovacích znaků, jako jsou např. %3.3f, %e, %g atd., nebo bych odkázal na nápovědu.
  5. Popis nápovědy - to zoufale chybí. V Command Window help nazev_prikazu, ve scriptu pokud je kurzor v textu příkazu zmáčknutí F1 - nezbytné minimum

Doufám, že mé poznámky budou k užitku :)

 
Odpovědět  +1 21.10.2013 19:35
Avatar
David Oczka
Redaktor
Avatar
Odpovídá na TH23
David Oczka:

Vím, že to není dokonalé, ale když píšu, tak si prostě nevzpomenu na všechno... To, že jsem základ, a tím je nápověda, kterou sám také často používám, nepřidal, jsem si uvědomil docela nedávno, ale nemám teď vůbec čas ani na opravu. Snad ten kdo to bude číst, koukne i do komentářů... Jinak děkuji za opravu... :)

 
Odpovědět 21.10.2013 20:49
Avatar
Miroslava Puškašová:

Ahoj, mám jeden, dotaz. Dělám v matlabu asi 10 minut, nikdy předtím jsem v něm nepracovala. Píšete, že se příkazy zadávají do New script (ctrl + N). Když to udělám vyskočí mi okno editor, kam i když napíšu nějaké příkazy (je jedno jestli s ; nebo bez ; ) vůbec nic se neděje. Pokud je zapíšu do command window vše funguje. Ale proč bych tedy otevírala nějaký skript? Na co je ten skript? (asi blbá otázka, ale předem děkuji za odpověd) :D :)

 
Odpovědět 16.2.2015 12:19
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovědět 21. června 17:13
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.