Úvod do práce s Matlabem 1
Reálná čísla
1.1
Zadávání čísel
Reálná čísla zadáváme s desetinnou tečkou (.), čísla lze také zadávat v exponenciálním tvaru například číslo 0.000014 zadáme takto 1.4e-5, číslo 532300 takto 53.23E4. Pro exponent můžeme používat symbol E nebo e. Při zadávání nesmíme dělat v čísle mezeru.
1.2
Operace s čísly
Pro operaci s čísly používáme následující symboly. sčítání odčítání násobení dělení umocnění
+ * / ^
Tabulka 1.1: Operace s čísly Jak jsme zvyklí z matematiky, provádějí se operace v předepsaném pořadí, nejprve operace umocnění, pak násobení a dělení a nakonec sčítání a odčítání. Stejně tak v Matlabu platí stejná priorita operací a používáme kulaté závorky (žádné jiné pro tento účel nelze použít). operace ^ * / + -
priorita 1. 2. 3.
Tabulka 1.2: Priorita operací
1.3
Elementární matematické funkce
Nyní uvedeme seznam elementárních funkcí. sin(x) sinus: sin(x) cos(x) kosinus: cos(x) tan(x) tangens: tg(x) cot(x) kotangens: cotg(x) asin(x) arkussinus: arcsin(x) acos(x) arkuskosinus: arccos(x) atan(x) arkustangens: arctg(x) acot(x) arkuskotangens: arccotg(x) Tabulka 1.3: Goniometrické a cyklometrické funkce log(x) log10(x) log2(x) exp(x) pow2(x)
přirozený logaritmus: ln(x) dekadický logaritmus: log(x) logaritmus při základu 2: log2 (x) exponeciální funkce: ex exponeciální funkce při základu 2: 2x
Tabulka 1.4: Logaritmické a exponenciální funkce
1
sqrt(x) abs(x) sign(x)
√ druhá odmocnina: x abolutní hodnota: |x| funkce signum
Tabulka 1.5: Ostatní funkce Funkce můžeme použít i pro √ matice, funkce se pak vyčíslí pro jednotlivé prvky matice. Pozor na funkci x^(1/3) (tj. 3 x ) a funkci acot(x) Poznámka: Vlastní funkci si zadáme příkazem inline, např. funkci f (x) = sin(x) + x 2 zadáme takto f=inline(’sin(x)+x^2’)
1.4
Konstanty a speciální proměnné
Matlab má k dispozici několik konstant a speciálních proměnných. pi inf NaN i
Ludolfovo číslo π = 3.141592 . . . nekonečno ∞ neurčitý výraz imaginární jednotka
Tabulka 1.6: Speciální proměnné a konstanty
1.5
Zaokrouhlování
Čísla můžeme zaokrouhlit několika způsoby. round(x) floor(x) ceil(x)
zaokrouhlí číslo x na celé číslo (čísla menší než *.5 směrem dolů a ostatní směrem nahoru) zaokrouhlí číslo x na nejbližší nižší celé číslo (dolů) zaokrouhlí číslo x na nejbližší vyšší celé číslo (nahoru)
Tabulka 1.7: Zaokrouhlování čísel Funkce pro zaokrouhlování můžeme použít i pro matice, funkce se pak vyčíslí pro jednotlivé prvky matice.
2 2.1
Matice a vektory Zadávání matic a vektorů
Matici zadáváme v hranatých závorkách, prvky na řádku oddělujeme mezerou nebo čárkou. Jednotlivé řádky pak středníkem nebo klávesou ENTER. Příklady 3 5 2.1. Zadáme matici A = 0 9 , prvky na řádku oddělíme mezerou a jednotlivé řádky −3 2 středníkem:
2
>> A=[3 5; 0 9; -3 2] A~= 3 5 0 9 -3 2
2.2
Funkce pro tvorbu matic
Matici se speciálními prvky lze vytvořit i pomocí následujících príkazů. nulová matice typu m × n matice jedniček typu m × n jednotková matice typu m × n matice náhodných čísel z intervalu (0, 1) typu m × n
zeros(m,n) ones(m,n) eye(m,n) rand(m,n)
Tabulka 2.1: Funkce pro tvorbu matic
Pokud se použijí funkce zeros, ones, eye, rand pouze s jedním parametrem (například zeros(3)), vznikne čtvercová matice příslušného řádu.
2.3
Vygenerování aritmetické posloupnosti
Potřebujeme-li vygenerovat vektor čísel, která jsou prvky aritmetické posloupnosti, pak to lze v Matlabu udělat pomocí dvojteček takto: prvni_clen:diference:posledni_clen 2.2. Potřebujeme vektor (4, 7, 10, 13, 16, 19, 22) tedy čísla od 4 do 22 s krokem 3. Budeme postupovat takto: >> 4:3:22 ans = 4
7
10
13
16
19
22
Pokud se diference vynechá, Matlab ji bere jako rovnu 1. >> 2:10 ans = 2
3
4
5
6
7
8
Diference může být i záporné číslo. >> 13:-3:0 ans = 13
10
7
4
1
Diference může být i desetinné číslo.
3
9
10
>> 5:0.2:6 ans = 5.0000
2.4
5.2000
5.4000
5.6000
5.8000
6.0000
Operace s maticemi a vektory
Pro operaci smaticemi a vektory používáme následující symboly: + součet matic (např. A+B je matice s prvky aij + bij ) rozdíl matic (např. A-B je matice s prvky aij − bij ) * součin matic „řadek krát sloupecÿ / pravé maticové dělení (např. A/B je matice A · B −1 ) \ levé maticové dělení (např. A\B je matice A−1 · B) ^ mocnina matic (např. A^k je A · A · . . . · A (k-krát)) ’ transponovaná matice, (např. A’ je matice s prvky aji ) Tabulka 2.2: Operace s maticemi .* ./ .\ .^ .’
součin matic „prvek po prvkuÿ (např. A.*B je matice s prvky aij bij ) pravé dělení „prvek po prvkuÿ (např. A./B je matice s prvky aij /bij ) levé dělení „prvek po prvkuÿ (např. A.\B je matice s prvky bij /aij ) mocnina (např. A.^k je matice s prvky (aij )k ) transponovaná matice (např. A’ je matice s prvky aji )
Tabulka 2.3: Operace s maticemi (používáme zejména pro tabelaci) 2.3. Potřebujeme zjistit hodnotu funkce f (x) = x4 + >> x=1:0.2:2 x = 1.0000 1.2000 1.4000 1.6000 >> y=x.^4+(x-1)./(x.^2+2) y = 1.0000 2.1317 3.9426 6.6852
v bodech 1, 1.2, 1.4, . . . , 2
1.8000
2.0000
10.6503
16.1667
Čísla si vypíšeme do tabulky >> [x’ y’] ans = 1.0000 1.2000 1.4000 1.6000 1.8000 2.0000
x−1 x2 +2
1.0000 2.1317 3.9426 6.6852 10.6503 16.1667
4
2.5
Funkce lineární algebry pro matice
size(A) numel(A) det(A) rank(A) norm(A) inv(A) rref(A) eig(A)
typ matice A (počet řádků, počet sloupců) počet prvků A determinant matice A hodnost matice A norma matice A inverzní matice A převedení matice A na horní trojúhelníkový tvar pomocí eliminace vlastní čísla a vlastní vektory matice A
Tabulka 2.4: Funkce pro matice
2.6
Manipulace s maticemi
tril(A) triu(A) diag(A) diag(v)
dolní trojúhelníková matice k matici A horní trojúhelníková matice k matici A hlavní diagonála matice A matice, která má na hlavní diagonále vektor ~v , a jinde nuly
Tabulka 2.5: Manipulace s maticemi
2.7
Práce s daty
max(A) min(A) sum(A) prod(A) mean(A)
maximum ve sloupcích matice A minimum ve sloupcích maticeA součty prvků ve sloupcích matice součiny prvků ve sloupcích matice aritmetický průměr ve sloupcích
Tabulka 2.6: Práce s daty Pokud použijeme funkce z tabulky 2.6 pro vektory, aplikuje se na jednotlivé prvky vektoru, bey ohledu na to, zda je vektor sloupcový nebo řádkový.
3
Relační a logické operátory
3.1
Pravda, nepravda
V Matlabu neni speciální typ pro logické proměnné, pravda má hodnotu 1 a nepravda hodnotu 0.
3.2
Relační operátory
Relační operátory lze použít na matice, kde se pak srovnávají prvek po prvku. == je rovno = ~= není rovno 6= < je menší < > je větší > <= je menší nebo rovno≤ <= je větší nebo rovno≥ Tabulka 3.1: Relační operátory
5
3.3
Logické operátory
Vstup A B 0 0 0 1 1 0 1 1
not ~A 1 1 0 0
and A&B 0 0 0 1
or A|B 0 1 1 1
xor xor(A,B) 0 1 1 0
Tabulka 3.2: Logické operátory Je možné se setkat s oběma zápisy. Tj. A&B je totéž jako and(A,B), A|B je totéž jako or(A,B) a ~A je totéž jako not(A). Logický výraz se vyhodnocuje zleva doprava.
4
Dvojrozměrné grafy
4.1
Vykreslení grafu
plot(x,y) fplot(’f’,[a,b])
graf bodů o souřadnicích (x, y) graf funkce f na intervalu ha, bi
Tabulka 4.1: Dvojrozměrné grafy Vstupem příkazu plot jsou souřadnice bodů, které se pak spojí čarou. Chceme-li vykreslit graf funkce, lze použít i příkaz fplot, první parametrem je funkční předpis v apostrofech a druhým je interval, na kterém chceme graf vykreslit, třetím nepovinným parametrem je specifikace. Příklady 4.1. Vykreslíme graf funkce y = x2 na intervalu h−4, 4i pomocí příkazu plot. Vstupem příkazu plot jsou souřadnice bodů, které se pak spojí čarou. Nejprve si do proměnné x uložíme souřadnice x, které vygenerujeme jako 100 bodů mezi −4 a 4: >> x=linspace(-4,4);
Pak vytvoříme souřadnice y jako funkční hodnoty funkce y = x2 v bodech x: >> y=x.^2;
A vykreslíme graf: >> plot(x,y)
Po vypsání příkazu se zobrazí nové okno Figure No. 1, které se stane aktivním.
6
16
14
12
10
8
6
4
2
0 −4
−3
−2
−1
0
1
2
3
4
obr. 4.1: Graf funkce y = x2 Pokud je toto okno otevřené, graf se překreslí, ale okno se nestane aktivním. V tomto případě okno učiníme aktivní kliknutím na tlačítko Figure No. 1 na hlavním panelu ve W indows (obvykle je umístěn dole). 4.2. Chceme-li vykreslit graf funkce, lze použít i příkaz fplot, první parametrem je funkční předpis v apostrofech a druhým je interval, na kterém chceme graf vykreslit. Zobrazíme graf funkce y = sin(x) na intervalu h−20, 20i: x >> fplot(’sin(x)/x’,[-20,20])
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4 −20
−15
−10
−5
0
5
obr. 4.2: Graf funkce y =
10
15
20
sin(x) x
Chceme-li graf vykreslit jinak než modrou plnou čárou, použijeme tzv. specifikaci grafu. Pro specifikaci můžeme použít libovolnou kombinaci voleb z prvního, druhého a třetího sloupce tabulky 4.2 (v uvedeném pořadí), přičemž některou lze vynechat. Specifikaci uvádíme jako řetězec, tj. do apostrofů a je to třetí nepovinný parametr příkazu plot a fplot.
7
Například červenou čárkovanou čáru vytvoříme specifikací ’r--’, zelené kroužky ’go’, žlutou čáru s trojúhelníčky ’yv-’. Barvy Symboly Typy čar b modrá . tečky - plná g zelená o kroužky : tečkované r červená x křížky × -. čerchovaná c světlé modrá + křížky + -- čárkovaná m fialová * hvězdičky y žlutá s čtverce k černá d kosočtverce v trojúhelníky (dolu) ^ trojúhelníky (nahoru) < trojúhelníky (vlevo) > trojúhelníky (vpravo) p pěticípé hvězdy h šesticípé hvězdy Tabulka 4.2: Specifikace grafu 4.3. Ukážeme si graf funkce y = sin(2x) na intervalu h−π, πi černou tečkovanou čarou. >> x=linspace(-pi,pi); >> y=sin(2*x); >> plot(x,y,’k:’)
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1 −4
−3
−2
−1
0
1
2
3
4
obr. 4.3: Graf funkce y = sin(2x) 4.4. Specifikace pomocí symbolů se často používá chceme-li zobrazit diskrétní data. Máme zadané hodnoty v tabulce, a zobrazíme je jako hvězdičky. t s
1 19
3 17
5 18
7 20
10 16
14 22
15 19
>> t=[1 3 5 7 10 14 15]; >> s=[19 17 18 20 16 22 19]; >> plot(t,s,’h’)
8
22
21
20
19
18
17
16
0
5
10
15
obr. 4.4: Graf 4.5. Jsou-li x-ové souřadnice čísla 1, 2, 3, . . . můžeme je v příkazu plot vynechat. den teplota
1 17
2 21
3 19
4 23
5 16
6 21
7 19
8 19
9 15
10 23
11 20
>> teplota=[17 21 19 23 16 21 19 19 15 23 20]; >> plot(teplota)
23
22
21
20
19
18
17
16
15
1
2
3
4
5
6
7
8
9
10
11
obr. 4.5: Graf teplot 4.6. Při volbě intervalu, na kterém vykreslujeme graf musíme být obezřetní a brát v úvahu definiční obor funkce. Zobrazíme si graf funkce y = ln(x), víme, že definiční obor je (0, ∞), zobrazíme si tedy graf na intervalu, který lezží v definičním oboru, například h0.0001, 3i: >> fplot(’log(x)’,[0.0001,3])
9
2
0
−2
−4
−6
−8
−10
0.5
1
1.5
2
2.5
3
obr. 4.6: Graf funkce Ukážeme si, co by se stalo, kdybych nechali graf zobrazit na intervalu h−3, 3i, Matlab vypíše chybovou hlášku, >> fplot(’log(x)’,[-3,3]) Warning: Imaginary parts of complex X and/or Y arguments ignored. > In C:\MATLAB6P1\toolbox\matlab\specgraph\fplot.m at line 146
4.2
Více grafů najednou
hold subplot(m,n,k)
vykreslení grafů do jednoho obrázku, nastavením on tuto vlastnost zapneme, off vypneme více obrázků do jednoho okna
Tabulka 4.3: Více grafů do jednoho obrázku nebo více obrázků do jednoho okna Pokud chceme vykreslit více grafů do jednoho obrázku, použijeme příkaz hold. Příklady x -4 2 3 7 10 A víme že předpokládané y 9 6 0 32 89 2 chování této fyzikální veličiny je dáno fynkcí f = x − x ∗ exp(x/10) + 1. Chceme si do jednoho grafu zobrazit naměřené i teoretické hodnoty. Nejprve si zadáme data z tabulky do proměnných x,y a příkazem hold on otevřeme okno (zatím prázdné), do kterého se budou zobrazovat všechny grafy, které budeme vykreslovat:
4.7. Máme-li naměřené hodnoty v tabulce:
>> x=[1 3 7 9 10]; >> y=[9 6 0 32 89]; >> hold on
Vykreslíme data z tabulky jako červené hvězdičky: >> plot(x,y,’r*’)
a graf teoretických hodnot: 10
>> fplot(’x^2-x*exp(x/10)+1’,[-5,10])
>> hold off
Nyní si ukážeme jak to vyřešíme pouze pomocí příkazu plot, >> >> >> >> >>
4.3
x=[1 3 7 9 10]; y=[9 6 0 32 89]; xg=linspace(1,10); yg=xg.^2-xg.*exp(xg./10)+1; plot(x,y,’*’,xg,yg,’-’)
Nastavení grafu
Do grafu můžeme přidat popisy os, nadpis, text na libovolné místo, také lze měnit rozsah os. axis([x1,x2,y1,y2]) rozsah os pro první proměnnou od x1 do x2, pro druhou od y1 do y2 zoom kliknutím levým tlačitkem myši do obrázku se zvětší detail, pravým se lze vracet grid zobrazení mřížky do grafu title(’text’) titulek obrázku xlabel(’text’) popis x-ové osy ylabel(’text’) popis y-ové osy text(x1,y1,’text’) umístění textu xxx na pozici x1, y1 legend(’text’) popisy k více grafům v jednom obrázku Tabulka 4.4: Nastavení grafu
11