V zimním semestru jste se seznámili s řešením některých problémů z numerické matematiky v Excelu. Možná se vám zdálo zbytečně složité odkazovat se absolutně nebo relativně na spoustu buněk, když jste "jen" chtěli např. ze dvou čísel (meze intervalu) vyrobit jedno (kořen v intervalu). A proto není na škodu seznámit se s nějakým programovacím jazykem, kde se algoritmy zapisují jednodušším způsobem. Na výběr je spousta programovacích jazyků a výpočetních prostředí. Jednou z možností je MATLAB.
MATLAB umožňuje snadnou a rychlou práci s maticemi reálných nebo komplexních čísel. Zároveň umí vypočítané výsledky graficky znázornit. Zpracování výsledků vám usnadní také mnoho hotových funkcí (např. statistických) - stačí si jen pročíst (anglickou) nápovědu. Pokud umíte sestavovat algoritmy, je jen na vás, kolik vlastních funkcí si pro zefektivnění své práce sami vytvoříte.
Spuštění:
START Programy MATLAB 6.5
Ukončení:
File Exit MATLAB nebo CTRL+Q nebo myší (křížek v pravém horním rohu)
Po spuštění systému se objeví okno složené z několika částí (viz obr.1). Nejdůležitější z nich je (pod)okno Command Window. Uspořádání (pod)oken můžeme změnit, resp. můžeme některá (pod)okna zavřít. Obnovení původního nastavení provádíme pomocí menu View (viz bod 5).
>> 2+3
ENTER)
klávesa | význam | |
ENTER | odešle řádek ke zpracování | |
ESC | smaže celý řádek | |
DEL | smaže jeden znak (za kurzorem) | |
BACKSPACE | smaže jeden znak (před kurzorem) | |
HOME | přesun kurzoru na začátek řádku | |
END | přesun kurzoru na konec řádku | |
posun kurzoru o jeden znak vpravo | ||
posun kurzoru o jeden znak vlevo | ||
CTRL+ | posun kurzoru na začátek dalšího slova | |
CTRL+ | posun kurzoru na začátek předchozího slova | |
a | listování dříve napsanými příkazy (více viz poznámka u bodu 4) |
format
, například:>> format compact
(kolem výsledků nebudou prázdné řádky)>> format long
(čísla se nebudou vypisovat se čtyřmi, ale se čtrnácti desetinnými místy)>> format
. Více viz nápověda (>> help format
)
ans
>> whos
(nebo >> who
- jen názvy proměnných),
výpis proměnné uvidíme po odeslání jejího názvu,... (více viz proměnné).
>> dir
v Command Window.
>> cd celý_název_adresáře
>> cd D:\temp\matlab
Poznámka: nápovědu lze (kromě použití menu Help MATLAB Help) otevřít také kliknutím na ikonu v panelu nástrojů. Tím se otevře okno Help Browseru (= prohlížeč nápovědy), který sestává ze dvou částí - vlevo je navigátor (umožňuje hledat v rejstříku, vyhledávat podle klíčových slov,...) a vpravo se zobrazuje aktuální téma nápovědy. Všechna témata nápovědy jsou zpracována jako www stránky, takže se v Help Browseru snadno pracuje.
Proměnná je objekt, který má svůj název, typ a obsah (hodnotu).
Název proměnné může obsahovat až 31 znaků. Jsou povoleny POUZE tyto znaky: písmena anglické abecedy (a-z, A-Z), číslice (0-9) a podtržítko (_). Číslicí název začínat nesmí.
V názvech jsou rozlišována velká a malá písmena (tzv. vlastnost case-sensitive), tedy proměnná pokus
může existovat současně s proměnnou Pokus
i třeba poKuS
- a každá z nich má svou vlastní hodnotu.
Příklady správných názvů proměnných: a
, A
, b89x
, u1
, pom4
, pokus_5
, matice_A
, fx
.
Příklady chybných názvů proměnných (chyba bývá v tom, že
se v názvu použije nepovolený znak - v MATLABu mají znaky
jako mezera, čárka, tečka, pomlčka, hvězdička atd. speciální význam!):
1pom
... název nesmí začínat číslicí,
matice A
... název nesmí obsahovat mezeru (toto je velmi častá chyba!!!),
lin.rovnice
... název nesmí obsahovat tečku (toto je také častá chyba!!!),
pokus-5
... název nesmí obsahovat pomlčku,
f(x)
... název nesmí obsahovat závorky.
Základní pravidlo zní: KAŽDÁ PROMĚNNÁ JE MATICE. MATLAB tedy nerozlišuje různé typy proměnných. Každá matice může obsahovat jakákoli komplexní čísla. Občas se setkáme s maticemi složenými ze znaků (= texty, chybová hlášení).
Z hlediska rozměrů matic rozlišujeme proměnné na
Pro vytvoření proměnné se používá přiřazovací příkaz:>> název_proměnné = výraz
.
Výrazy jsou popsány níže. Ukážeme si jednoduché příklady vytvoření proměnných, kdy je použit nejjednodušší výraz - konstanta.
Příklad: vytvoření skaláru:>> a=8
>> pom=-2.145
>> skalar8=15e-2
8.14 -0.0002 13/100
. Pokud je před desetinnou tečkou jenom nula, lze ji vynechat: .52
e
pro označení exponentu 10e
): 1.6e11 6.122e-8
i
anebo j
(viz předdefinované proměnné): 12i -6.11j
8+3.2e-4i
Vytvoření vektoru nebo matice: matice mxn vytváříme pomocí hranatých závorek, v nichž uvedeme jednotlivé řádky oddělené středníkem, přičemž prvky každého řádku (tj. sloupce) oddělujeme mezerou nebo čárkou (lze použít i obě najednou).
!!! Počty prvků v každém řádku se musejí shodovat, tj. nesmí se stát, že např. některý řádek má méně prvků než ostatní !!!
!!! Čárka neslouží jako desetinná čárka (na to je tečka), ale jako oddělovač prvků !!!
Příklad: vytvoření řádkového vektoru:>> v1=[2 0.1 -3.7 4/5 0.14]
nebo>> u1=[2,0.1, -3.7, 4/5,0.14]
Příklad: vytvoření sloupcového vektoru:>> v2=[2; 0.1; -3.7; 4/5; 0.14]
Příklad: vytvoření matice 3x2:>> maticeA=[1 2; 0.1 -3; .7 1/4]
Poznámky: přiřazovací příkaz také slouží ke změně hodnoty již existující proměnné, např. >> u1=[1 -3 2]
.
Chceme-li zjistit obsah proměnné (= její hodnotu), můžeme použít buď
okno Workspace (dvojklik), anebo v dialogovém režimu napíšeme
název proměnné:
>> název_proměnné
Příklad:>> maticeA
>> a
Co s proměnnými, které už nechceme používat? Lze je smazat s použitím okna Workspace, resp. pomocí příkazu clear
.
>> clear název_proměnné
- smaže vybranou proměnnou
>> clear název_proměnné1 název_proměnné2 název_proměnnéN
- smaže vybrané proměnné (jejich názvy od sebe oddělujeme mezerou)
>> clear
- smaže všechny proměnné z Workspace.
Příklad:>> clear b a
(smaže proměnnou b
a proměnnou a
)
>> clear
(smaže všechny proměnné)
!!! Neuvedeme-li seznam proměnných, smažou se všechny! Smazané proměnné nelze obnovit (pokud nebyly uloženy na disk - viz níže) !!!
Některé proměnné jsou již definované - patří mezi ně eps
(malé reálné číslo, 10-16, i
, j
(komplexní jednotka) a pi
(Ludolfovo číslo). Tyto proměnné lze samozřejmě použít i pro uchování
jiných hodnot (tím se předdefinovaná hodnota zničí), ale po použití
příkazu >>clear i
(resp. >>clear
) jsou vráceny do původního stavu.
Příklad:>> i
>> i=7
>> clear i
>> i
ans
Proměnná ans
je vytvářena automaticky, pokud některý
z příkazů potřebuje vypsat hodnotu, kterou jsme nepřiřadili do
žádné proměnné. Proměnná ans
tedy obsahuje poslední zobrazenou nepojmenovanou hodnotu.
Příklad: pokud proměnná ans
neexistovala, vytvoří se po vyhodnocení příkazu >> 2*3-5
. Pokud proměnná ans
již existovala, tak se změní její hodnota.
Někdy se stane, že potřebujeme uchovat nějakou důležitou proměnnou
pro použití při příštím spuštění MATLABu (např. musíme přerušit práci).
Potřebujeme tedy proměnnou dostat z paměti na disk počítače.
K tomu slouží příkaz save
:
>> save jméno_souboru název_proměnné
- do zadaného souboru se uloží vybraná proměnná,
>> save jméno_souboru název_proměnné1 název_proměnné2 název_proměnnéN
- do zadaného souboru se uloží N vybraných proměnných (jejich názvy od sebe oddělujeme mezerou),
>> save jméno_souboru
- do zadaného souboru se uloží všechny proměnné z Workspace.
Ve všech případech je vytvořen soubor s příponou MAT (ta je přidána automaticky), který obsahuje názvy a hodnoty vybraných proměnných.
Příklad: uložení dvou proměnných a
a maticeA
do souboru 'pokus.mat':>> save pokus a maticeA
(soubor 'pokus.mat' vznikne v pracovním adresáři)
Poznámka: příkaz save
má širší možnosti - viz >> help save
.
Je-li na disku nějaký soubor s uloženou jednou nebo více proměnnými (vznikl pomocí save
), lze tyto proměnné dostat do pracovního prostředí MATLABu pomocí příkazu
>> load název_souboru
(u názvu souboru můžeme vynechat jeho příponu MAT).
Příklad:>> clear
.
>> load pokus
Poznámka: i příkaz load
má širší možnosti - viz >> help load
.
Výraz je posloupnost konstant, názvů proměnných, operátorů (včetně kulatých závorek - viz lekce 2) a volání funkcí (viz lekce 3).
Pokud je výraz smysluplný (MATLABem vyhodnotitelný), tak po jeho napsání a stisku klávesy ENTER je výraz ihned vyhodnocen. Vyhodnocením výrazu vzniká vždy nějaká hodnota.
Výslednou hodnotu výrazu můžeme odebrat (uložit do nějaké proměnné - viz přiřazovací příkaz), jinak je uložena do proměnné ans
(viz výše) a zobrazena, například:
>> 3+2*0.5 |
Pokud nepotřebujeme vypočtenou hodnotu vidět, lze její zobrazení potlačit - za výrazem napíšeme středník. Středník tedy slouží (kromě oddělení řádků matice) také k potlačení výpisu výsledku
výrazu. Obvykle se při potlačeném výpisu výsledku používá přiřazení
hodnoty výrazu do nějaké proměnné, protože jinak vypočtená hodnota
zanikne. Proměnná vytvořená přiřazením s potlačeným výpisem
samozřejmě vznikne ve Workspace. Typicky tedy píšeme:>> proměnná=výraz;
Příklad:
výraz | odebrání hodnoty? | zobrazení výsledku? | vznik (změna) ans ? |
>> b = 5*a+3 | ano | ano | ne |
>> 5*a+3 | ne | ano | ano |
>> b = 5*a+3; | ne | ne | ne |
>> 5*a+3; | ne | ne | ne |
Další příklady výrazů naleznete v lekci 2 (za přehledem operátorů).
Pokud napíšeme a odešleme nějaký výraz ke zpracování, MATLAB ho bere v podstatě jako příkaz k nějaké činnosti (vyhodnocení výrazu). Kromě odeslání výrazů však existuje spousta "čistokrevných" příkazů, např. příkaz přiřazovací. S ostatními se seznámíme v dalších lekcích. Zde je základní přehled:
=
), jehož syntaxe je>> název_proměnné = výraz
if
) - viz lekce 2switch
)for
, while
)Dále MATLAB obsahuje příkazy pro:
cd
, dir
)save
, load
, clear
)Někdy se stane, že potřebujeme napsat jeden příkaz na více řádků. K tomu účelu použijeme tři tečky.
Tři tečky se zvýrazňují modře a znamenají, že MATLAB má počkat
s provedením příkazu, protože ještě není celý. Pokud MATLAB čeká
na dokončení příkazu, tak příkazový řádek nezačíná >>
.
Příklad:
>> A = [1.5 -3 4.1; 2...
1.14 5 0.2; 7 15.1 8/31 0];
nebo
>> A = [1.5 -3 4.1; 2...
1.14 5 0.2; 7 15.1...
8/31 0];
Některé příkazy vypisují své výsledky (např. >> x = 215
). Pokud nepotřebujeme tyto výsledky vidět, lze potlačit výpis výsledků příkazu (stejně jako u výrazů) napsáním středníku na konec příkazu (>> x = 215;
).
Příkaz, který se právě provádí, násilím ukončíme pomocí stisku CTRL+C. Většinou se CTRL+C používá, pokud jsme "vyrobili" nekonečný cyklus nebo jsme zapomněli na středník a necháváme vypisovat příliš velké matice.
Doposud jsme příkazy ukončovali vždy pomocí klávesy ENTER, která
zároveň odeslala příkaz ke zpracování. Občas ale chceme odeslat ke
zpracování více příkazů najednou. Tehdy můžeme použít buď M-soubory,
anebo zápis více příkazů na jeden řádek, přičemž k odělení jednotlivých
příkazů se používá čárka nebo středník (čárka jen odděluje příkazy,
středník navíc potačuje výpis jejich výsledků).
Příklad:>> m=8, n=3; vysledek=3*m+0.5*n
Komentáře slouží většinou k vysvětlení významu jednotlivých příkazů,
skriptů nebo funkcí. Je velmi vhodné je používat (ať už kvůli vlastní
skleróze nebo kvůli kolegům, se kterými budete případné výsledky své
práce sdílet). Komentáře u uživatelských funkcí navíc slouží jako
nápověda, kterou umí MATLAB zobrazovat např. příkazem >>help název
.
Komenář začíná znakem %
(procento) a končí spolu s koncem řádku. Text komentáře bývá označen zeleně (pokud jste si nezvolili jinou barvu).
Všechny komentáře jsou MATLABem ignorovány, tj. nejsou vyhodnocovány.
Příklad:
>> x = [125/100 0.9-9]; % vytvoreni vektoru x s hodnotami 1.25 a -8.1, bez vypisu