Struˇ cn´ yu ´ vod do Matlabu Zuzana Mor´avkov´a
Obsah ´ Uvod
4
1 Z´ aklady pr´ ace s Matlabem 1.0.1 Pˇr´ıkazy pro pr´aci s prostˇred´ım . . 1.0.2 Speci´aln´ı symboly aneb z´avorky a 1.1 Promˇenn´e . . . . . . . . . . . . . . . . . 1.1.1 Jm´ena promˇenn´ ych . . . . . . . . 1.1.2 Pˇr´ıkazy pro pr´aci s promˇenn´ ymi .
. . . spol. . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
5 5 5 6 6 7
2 Pr´ ace s ˇ c´ısly, maticemi a vektory 2.1 Re´aln´a a komplexn´ı ˇc´ısla . . . . . . . . . . . . 2.1.1 Zad´av´an´ı ˇc´ısel . . . . . . . . . . . . . . 2.1.2 Operace s ˇc´ısly . . . . . . . . . . . . . 2.1.3 Element´arn´ı matematick´e funkce . . . 2.1.4 Definice vlastn´ı unkce . . . . . . . . . 2.1.5 Konstanty a speci´aln´ı promˇenn´e . . . . 2.1.6 Zaokrouhlov´an´ı . . . . . . . . . . . . . 2.1.7 Diskr´etn´ı matematika . . . . . . . . . . 2.1.8 Komplexn´ı ˇc´ısla . . . . . . . . . . . . . 2.2 Matice a vektory . . . . . . . . . . . . . . . . 2.2.1 Zad´av´an´ı matic a vektor˚ u . . . . . . . 2.2.2 Funkce pro tvorbu matic . . . . . . . . 2.2.3 Vygenerov´an´ı aritmetick´e posloupnosti 2.2.4 Pr´ace s ˇc´astmi matic a vektor˚ u . . . . 2.2.5 Operace s maticemi a vektory . . . . . 2.2.6 Funkce line´arn´ı algebry pro matice . . 2.2.7 Funkce line´arn´ı algebry pro vektory . . 2.2.8 Manipulace s maticemi . . . . . . . . . ˇ sen´ı soustav liner´arn´ıch rovnic . . . 2.2.9 Reˇ 2.2.10 Pr´ace s daty . . . . . . . . . . . . . . . 2.3 Relaˇcn´ı a logick´e oper´atory . . . . . . . . . . . 2.3.1 Pravda, nepravda . . . . . . . . . . . . 2.3.2 Relaˇcn´ı oper´atory . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
9 9 9 10 12 14 14 15 16 17 19 19 20 21 22 24 27 29 29 31 34 36 36 36
2
OBSAH
3 2.3.3 2.3.4
Logick´e oper´atory . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funkce pro zjiˇst’ov´an´ı platnosti podm´ınek . . . . . . . . . . . . . . .
3 Grafick´ e v´ ystupy 3.1 Dvojrozmˇern´e grafy . . . . . 3.1.1 Vykreslen´ı grafu . . . 3.1.2 V´ıce graf˚ u najednou 3.1.3 Nastaven´ı grafu . . .
37 37
. . . .
38 38 38 43 43
4 Programov´ an´ı v Matlabu 4.1 Funkˇcn´ı M–soubory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Vstupy a v´ ystupy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Programovac´ı struktury . . . . . . . . . . . . . . . . . . . . . . . .
46 46 47 50
Literatura
51
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
´ Uvod Tento pracovn´ı text je urˇcen student˚ um pˇredmˇetu Matematika na poˇc´ıtaˇci a z´aklady porˇ grmav´an´ı na HGF, VSB-TU Ostrava, d´ale m˚ uˇze pomoci student˚ um pˇredmˇetu Numerick´e metody, Numerick´a matematika a d´at jim z´akladn´ı pˇrehled o moˇznostech Matlabu a jeho vyuˇzit´ı v numerick´ ych metod´ach. Na tomto mal´em prostoru je pops´an pouze velmi zjednoduˇsen´ y pohled do moˇznost´ı Matlabu. Studenti, jeˇz se o problematiku zaj´ımaj´ı hloubˇeji, necht’ nahl´ednou do manu´alu Matlabu ˇci do jin´e literatury. Pˇr´ıruˇcka popisuje Matlab 6.1, vˇetˇsinu pˇr´ıkaz˚ u lze pouˇz´ıt i v Matlabu niˇzˇs´ıch verz´ı nebo v jeho volnˇe dostupn´e alternativˇe, programu Octave. Nejvˇetˇs´ı rozd´ıly jsou pˇrev´aˇznˇe v pr´aci s prostˇred´ım a v oblasti grafick´ ych v´ ystup˚ u. V kapitole 1 jsou pops´any z´aklady pr´ace s Matlabem, informace o promˇenn´ ych a datov´ ych typech, kter´e d´av´a Matlab uˇzivatel˚ um k dispozici. Matlab pracuje s typem komplexn´ı matice, autorka vˇsak povaˇzuje za pˇrehlednˇejˇs´ı pˇr´ıstup zvl´aˇst’ k ˇc´ısl˚ um a zvl´aˇst’ k maticim a vektor˚ um. Proto kapitola 2 obsahuje vybran´ y pˇrehled operac´ı a funkc´ı pro pr´aci s re´aln´ ymi a komlexn´ımi ˇc´ısly v ˇc´asti 2.1. Funkce, jeˇz jsou pouˇziteln´e i pro matice je na to ˇcten´aˇr upozornˇen. D´ale jsou v ˇc´asti 2.2 uvedeny operace a vybran´e funkce pro pr´aci s maticemi a vektory. Moˇznosti grafick´ ych v´ ystup˚ u jsou pˇredvedeny v kapitole 3. Jedn´a se o grafy dvourozmˇern´e (disktr´etn´ı data, graf funcke jedn´e promˇenn´e). Programov´e prostˇredky Matlabu jsou pops´any v kapitole 4. Matlab vych´az´ı z n´asleduj´ıc´ı filozofie: vˇse je matice. M´a-li jednu ˇr´adku nebo jeden sloupec, ˇr´ık´a se j´ı vektor, m´a-li pr´avˇe jednu ˇr´adku a jeden sloupec, je to skal´ar. Matematick´a terminologie vych´az´ı z [4].
V Ostravˇe dne 19. dubna 2012
Zuzana Mor´avkov´a 4
Kapitola 1 Z´ aklady pr´ ace s Matlabem 1.0.1
Pˇ r´ıkazy pro pr´ aci s prostˇ red´ım
lookfor xx help xx clc quit
nalezen´ı zadan´eho ˇretˇezce xx v n´apovˇedˇe n´apovˇeda k pˇr´ıkazu xx smaz´an´ı obrazovky ukonˇcen´ı Matlabu
Tabulka 1.1: Pr´ace s prostˇred´ım Pˇ r´ıklady 1.0.1. Najdeme pˇr´ıkazy v jejichˇz popisu se vyskytuje slovo product: >> lookfor product KRON Kronecker tensor product. CROSS Vector cross product. DOT Vector dot product. CUMPROD Cumulative product of elements. PROD Product of elements.
1.0.2. Vypiˇseme n´apovˇedu pro pˇr´ıkaz length: >> help length LENGTH Length of vector. LENGTH(X) returns the length of vector X. It is equivalent to MAX(SIZE(X)) for non-empty arrays and 0 for empty ones. Overloaded methods help serial/length.m
1.0.2 () []
Speci´ aln´ı symboly aneb z´ avorky a spol. z´avorky pro prioritu operac´ı z´avorky pro indexy v matici, vektoru z´avorky pro zad´av´an´ı matic, vektoru 5
´ ´ KAPITOLA 1. ZAKLADY PRACE S MATLABEM
6 Tabulka 1.2: Symboly
1.1
Promˇ enn´ e
1.1.1
Jm´ ena promˇ enn´ ych
V Matlabu se ve jm´enech promˇenn´ ych rozliˇsuj´ı velk´a a mal´a p´ısmena (tj. Abc, abc, abC, ABC jsou r˚ uzn´e promˇenn´e), jm´eno promˇenn´e m˚ uˇze obsahovat p´ısmena, ˇc´ıslice a podtrˇz´ıtka ( ), maxim´alnˇe vˇsak 31 znak˚ u. Prvn´ı znak mus´ı b´ yt p´ısmeno. Pokud chyb´ı pˇriˇrazen´ı, zavede se automaticky promˇenn´a ans (viz pˇr´ıklad 1.1.1). Pro pˇriˇrazen´ı se pouˇz´ıv´a symbol rovn´ıtko (=). Pˇr´ıkazy m˚ uˇzeme ps´at po jednom na ˇr´adek, nebo v´ıce pˇr´ıkaz˚ u na ˇr´adek oddˇelen´e ˇc´arkou (,). Symbol stˇredn´ık (;) slouˇz´ı k potlaˇcen´ı v´ ystupu, tj. pˇr´ıkaz se vykon´a, ale nezobraz´ı se n´am v´ ysledek. Chceme-li zn´at hodnotu dan´e promˇenn´e, zjist´ıme ji naps´an´ı jm´ena promˇenn´e (viz pˇr´ıklad 1.1.4). ans aktu´aln´ı v´ ysledek Pˇ r´ıklady 1.1.1. Spoˇc´ıt´ame hodnotu 34 , v´ ysledek se automaticky uloˇz´ı do promˇenn´e ans. Pak od t´eto hodnoty odeˇcteme 40: >> 3^4 ans = 81 >> ans-40 ans = 41 >> ans ans = 41
1.1.2. Do promˇenn´e a pˇriˇrad´ıme hodnotu 12 a do promˇenn´e b druhou mocninu a2 . Pˇr´ıkazy oddˇel´ıme ˇc´arkou: >> a=12, b=a^2 a = 12 b = 144
text 1.1.3. Do promˇenn´e x pˇriˇrad´ıme hodnotu 11, do promˇenn´e y druhou mocninu x2 a do promˇenn´e z rozd´ıl 100 − y. Pˇr´ıkazy (kromˇe posledn´ıho) ukonˇc´ıme stˇredn´ıky a t´ım potlaˇc´ıme v´ ystup na obrazovku:
ˇ ´ 1.1. PROMENN E
7
>> x=11; y=x^2; z=100-y z~= -21
1.1.4. Do promˇenn´e velkeC pˇriˇrad´ıme hodnotu 129043 a do promˇenn´e V ysledek hodnotu 1 √ . Vˇsechny pˇr´ıkazy ukonˇc´ıme stˇredn´ıky a t´ım potlaˇc´ıme v´ ystup na obvelkeC−1000 razovku. Chceme-li zn´at hodnotu promˇenn´e V ysledek, zjist´ıme ji naps´an´ı jm´ena promˇenn´e: >> velkeC=129043; Vysledek=(velkeC-1000)^(-0.5); >> Vysledek Vysledek = 0.0028
1.1.2
Pˇ r´ıkazy pro pr´ aci s promˇ enn´ ymi
format who whos clear
form´atov´an´ı v´ ystupu (viz pˇr´ıklad 1.1.5) v´ ypis seznamu promˇenn´ ych v´ ypis podrobn´ ych informac´ı o promˇenn´ ych (viz pˇr´ıklad 1.1.6) smaz´an´ı promˇenn´e, funkce apod. (viz pˇr´ıklad 1.1.7)
Tabulka 1.3: Pr´ace s promˇenn´ ymi Pˇ r´ıklady
1.1.5. Pˇr´ıkazem format long nastav´ıme v´ ypis ˇc´ısel na 14 desetinn´ ych m´ıst, pˇr´ıkazem format short na 4 m´ısta. Mˇen´ı se pouze form´at v´ ystupu na obrazovku, pˇresnost vnitˇrn´ıch v´ ypoˇct˚ u se nemˇen´ı. >> a=3.4598392134 a = 3.4598 >> format long >> a a = 3.45983921340000 >> format short >> a a = 3.4598
Pˇr´ıkazem format rat zvol´ıme v´ ypis ve tvaru zlomk˚ u:
´ ´ KAPITOLA 1. ZAKLADY PRACE S MATLABEM
8
>> format rat >> 100/30 ans = 10/3 >> format short >> 100/30 ans = 3.3333
1.1.6. Nadefinujeme promˇenn´e a, x, b, c, r a pˇr´ıkazem who si vyp´ıˇseme seznam existuj´ıc´ıch promˇenn´ ych: >> a=[ 2 4 5; 2 3 4]; x=34; b=[ 4 5 >> who Your variables are: a b c x
8 89 9 9 9]; c=4+3*i; r=’ahoj’
Pomoc´ı pˇr´ıkazu whos zjist´ıme podrobn´e informace o promˇenn´ ych, jejich jm´eno (name), rozmˇer (size), velikost v bytech a typ promˇenn´e (class): >> whos Name a b c r x Grand total
Size Bytes Class 2x3 48 double array 1x7 56 double array 1x1 16 double array (complex) 1x4 8 char array 1x1 8 double array is 19 elements using 136 bytes
1.1.7. Pˇr´ıkazem clear smaˇzeme vˇsechny existuj´ıc´ı promˇenn´e nebo lze zmazat pouze vybran´e promˇenn´e, jak ukazuje tento pˇr´ıklad. M´ame-li nadefinovan´e promˇenn´e stejnˇe jako v pˇredchoz´ım pˇr´ıkladˇe, pak smaˇzeme promˇennou x pˇr´ıkazem clear x: >> clear x >> who Your variables are: a b
Kapitola 2 Pr´ ace s ˇ c´ısly, maticemi a vektory Matlab pracuje s typem obd´eln´ıkov´a matice. Vektory jsou matice typu 1 × n nebo n × 1. Skal´ar (ˇc´ıslo) je ˇctvercov´a matice matice typu 1. Je ovˇsem pˇrehlednˇejˇs´ı zab´ yvat se zvl´aˇst’ ˇc´ısly a zvl´aˇst’ maticemi a vektory. Tato kapitola obsahuje v ˇc´asti 2.1 pˇrehled operac´ı a vybran´ ych funkc´ı pro pr´aci s re´aln´ ymi a komlexn´ımi ˇc´ısly. Jsou-li nˇekter´e funkce pouˇziteln´e i pro matice, je to vˇzdy uvedeno. V ˇc´asti 2.2 jsou uvedeny operace a vybran´e funkce pro pr´aci s maticemi a vektory.
2.1
Re´ aln´ a a komplexn´ı ˇ c´ısla
2.1.1
Zad´ av´ an´ı ˇ c´ısel
Re´aln´a ˇc´ısla zad´av´ame s desetinnou teˇckou (.), ˇc´ısla lze tak´e zad´avat v exponenci´aln´ım tvaru napˇr´ıklad ˇc´ıslo 0.000014 zad´ame takto 1.4e-5, ˇc´ıslo 532300 takto 53.23E4. Pro exponent m˚ uˇzeme pouˇz´ıvat symbol E nebo e. Pˇri zad´av´an´ı nesm´ıme dˇelat v ˇc´ısle mezeru. Pˇ r´ıklady
2.1.1. Do promˇenn´e x pˇriˇrad´ıme hodnotu 2.34 a do r hodnotu 0.0000532: >> x=2.34 x = 2.3400 >> r=0.532e-4 r = 5.3200e-005
2.1.2. Tˇremi zp˚ usoby pˇr´ıˇrad´ıme hodnotu 123 000 do promˇenn´e a: 9
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
10
>> a=123000 a = 123000 >> a=123e3 a = 123000 >> a=1.23e5 a = 123000
2.1.3. Pˇri zad´av´an´ı nesm´ıme dˇelat v ˇc´ısle mezeru. Do promˇenn´e a chybnˇe pˇriˇrad´ıme hodnotu 12 540, pot´e ji zad´ame spr´avnˇe: >> a=12 540 ??? a=12 540 | Error: Missing operator, comma, or semicolon. >> a=12540 a = 12540
2.1.2
Operace s ˇ c´ısly
Pro operaci s ˇc´ısly pouˇz´ıv´ame n´asleduj´ıc´ı symboly. + * / ^
sˇc´ıt´an´ı odˇc´ıt´an´ı n´asoben´ı dˇelen´ı umocnˇen´ı
Tabulka 2.1: Operace s ˇc´ısly Jak jsme zvykl´ı z matematiky, prov´adˇej´ı se operace v pˇredepsan´em poˇrad´ı, nejprve operace umocnˇen´ı, pak n´asoben´ı a dˇelen´ı a nakonec sˇc´ıt´an´ı a odˇc´ıt´an´ı. Napˇr´ıklad, kdyˇz nap´ıˇseme 5 + 7 · 2, tak se nejprve provede n´asoben´ı 7 · 2 = 14 a pot´e se provede sˇc´ıt´an´ı 5+14 = 19. Pokud chceme zmˇenit poˇrad´ı v jak´em se bude v´ yraz poˇc´ıtat, napˇr´ıklad chcemeli spoˇc´ıtat (5 + 7) · 2, pouˇzijeme z´avorky. Takˇze se nejprve provede sˇc´ıt´an´ı 5 + 7 = 12 a pak n´asoben´ı 12 · 2 = 24. Stejnˇe tak v Matlabu plat´ı stejn´a priorita operac´ı a pouˇz´ıv´ame kulat´e z´avorky (ˇz´adn´e jin´e pro tento u ´ˇcel nelze pouˇz´ıt).
´ A ´ A KOMPLEXN´I C ˇ ´ISLA 2.1. REALN operace ^ * / + ()
11
priorita 1. 2. 3. z´avorky pro prioritu operac´ı
Tabulka 2.2: Priorita operac´ı Pˇ r´ıklady 2.1.4. Vyˇc´ısl´ıme v´ yraz 42 − 7 · 12: >> 4^2-7*12 ans = -68
2.1.5. Spoˇc´ıt´ame hodnotu poˇc´ıtaˇci zad´ame:
111+171 . 57−10
Ruˇcnˇe budeme poˇc´ıtat takto:
111+171 57−10
=
282 47
= 6. Na
>> (111+171)/(57-10) ans = 6
Vid´ıme, ˇze jak ˇcitatele 111 + 171 tak jmenovatele 57 − 10 Jsme dali do z´avorek, aby se nejprve provedlo sˇc´ıt´an´ı, odˇc´ıt´an´ı a pak dˇelen´ı. Uk´aˇzeme si, co by se stalo, kdybychom tak neuˇcinili: >> 111+171/57-10 ans = 104
a vid´ıme, ˇze je v´ ysledek ˇspatnˇe. Matlab spoˇc´ıtal 111+171/57-10=111+3-10=104. √ 1 + a5 3 − b pro a = 2, b = 13: 2.1.6. Vypoˇc´ıt´ame v´ yraz 3(a − b) >> a=2;b=13;x=(1+a^5)/(3*(a-b))-b^(1/3) x = -3.3513 2
2
2.1.7. Spoˇc´ıt´ame hodnotu 23 . Ruˇcnˇe budeme poˇc´ıtat takto: 23 = 29 = 512. Na poˇc´ıtaˇci zad´ame: >> 2^3^2 ans = 64
a vid´ıme, ˇze se v´ ysledky liˇs´ı. Kde je chyba? Chyba je ve ˇspatn´e prioritˇe, Matlab spoˇc´ıtal 2^3^2=8^2=64. Spr´avnˇe v´ ypoˇcet zad´ame takto: >> 2^(3^2) ans = 512
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
12
2.1.3
Element´ arn´ı matematick´ e funkce
Nyn´ı uvedeme seznam element´arn´ı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 2.3: Goniometrick´e a cyklometrick´e funkce sinh(x) cosh(x) tanh(x) coth(x) asinh(x) acosh(x) atanh(x) acoth(x)
hyperbolick´ y sinus: sinh(x) hyperbolick´ y kosinus: cosh(x) hyperbolick´ y tangens: tgh(x) hyperbolick´ y kotangens: cotgh(x) argument hyperbolick´eho sinu: argsinh(x) argument hyperbolick´eho kosinu: argcosh(x) argument hyperbolick´eho tangens: argtgh(x) argument hyperbolick´eho kotangens: argcotgh(x)
Tabulka 2.4: Hyperbolick´e a hyperbolometrick´e funkce log(x) log10(x) log2(x) exp(x) pow2(x)
pˇrirozen´ y logaritmus: ln(x) dekadick´ y logaritmus: log(x) logaritmus pˇri z´akladu 2: log2 (x) exponeci´aln´ı funkce: ex mocninn´a funkce pˇri z´akladu 2: 2x
Tabulka 2.5: Logaritmick´e a exponenci´aln´ı funkce sqrt(x) abs(x) sign(x)
√ druh´a odmocnina: x abolutn´ı hodnota: |x| funkce signum1
Tabulka 2.6: Ostatn´ı funkce Funkce m˚ uˇzeme pouˇz´ıt i pro matice, funkce se pak vyˇc´ısl´ı pro jednotliv´e prvky matice. Pˇ r´ıklady 2.1.8. Spoˇc´ıt´ame hodnotu log2 (8): −1 1 0 Funkce sgn(x) = 1
x<0 x=0 x>0
´ A ´ A KOMPLEXN´I C ˇ ´ISLA 2.1. REALN
13
>> log2(8) ans = 3
2.1.9. Spoˇc´ıt´ame hodnotu funkce y =
1 x
+ e−x v bodˇe x = 4:
>> x=4 x = 4 >> 1/x+exp(-x) ans = 0.2683
2.1.10. Spoˇc´ıt´ame hodnotu funkce y =
tg(x) + 2π v bodˇe x = 0: sin(x − π/2)
>> x=0;y=(tan(x)+2*pi)/sin(x-pi/2) y = -6.2832
2.1.11. Spoˇc´ıt´ame hodnotu funkce y =
√ 3
x − 2 v bodˇe x = 241.5:
x=241.5; y=(x-2)^(1/3) y = 6.2101
2.1.12. Spoˇc´ıt´ame absolutn´ı hodnotu ˇc´ısel −5, 9, 0, 3, 4, −8 (zad´av´an´ı vektoru viz ˇc´ast 2.2.1): >> posl=[-5 9 0 3 4 -8] posl = -5 9 0 3 >> vysledek=abs(posl) vysledek = 5 9 0 3
4
4
-8
8
3 4 1 2.1.13. Spoˇc´ıt´ame druhou odmocninu z ˇc´ısel 4 2 3 av´an´ı matic viz ˇc´ast 2.2.1): (zad´ 0 1 9 >> M=[3 4 1; 4 2 3; 0 1 9] M = 3 4 1 4 2 3 0 1 9 >> sqrt(M) ans = 1.7321 2.0000 1.0000 2.0000 1.4142 1.7321 0 1.0000 3.0000
2.1.14. Spoˇc´ıt´ame hodnotu log3 (81). Matlab nem´a k dispozici funkci pro logaritmus se z´akladem 3, avˇsak z matematiky zn´ame vzorec loga (x) = ln(x) , kter´ y pouˇzijeme: ln(a)
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
14
>> log(81)/log(3) ans = 4
a provedeme kontrolu: >>3^4 ans = 81
2.1.4
Definice vlastn´ı unkce
Vlastn´ı matermatickou funkci si nadefinujeme pˇr´ıkazem f=inline(’ Pˇ r´ıklady
’)
2.1.15. Funkci f = sin(x2 ) −
√
(3 − x) nadefinujeme:
>> f=inline(’sin(x^2)-sqrt(3-x)’)
2.1.5
Konstanty a speci´ aln´ı promˇ enn´ e
Matlab m´a k dispozici nˇekolik konstant a speci´aln´ıch promˇenn´ ych. pi inf NaN eps realmax realmin i,j
Ludolfovo ˇc´ıslo π = 3.141592 . . . nekoneˇcno ∞ neurˇcit´ y v´ yraz relativn´ı pˇresnost 2−52 ≈ 2.22e − 16 nejvˇetˇs´ı kladn´e ˇc´ıslo 21024 ≈ 1.7977e + 308 nejmenˇs´ı kladn´e ˇc´ıslo 2−1022 ≈ 2.2251e − 308 imagin´arn´ı jednotka
Tabulka 2.7: Speci´aln´ı promˇenn´e a konstanty Pˇ r´ıklady 2.1.16. Budeme-li potˇrebovat Eulerovo ˇc´ıslo (z´aklad pˇrirozen´eho logaritmu) z´ısk´ame ho jako hodnotu e1 tedy: >> e=exp(1) e = 2.7183
ˇ ısla vˇetˇs´ı neˇz realmax (resp. menˇs´ı neˇz -realmax) jsou povaˇzov´ana za ∞ (resp. 2.1.17. C´ −∞):
´ A ´ A KOMPLEXN´I C ˇ ´ISLA 2.1. REALN
15
>> realmax ans = 1.7977e+308 >> 1e400 ans = Inf
ˇ ısla jejichˇz absolutn´ı hodnota je menˇs´ı neˇz realmin jsou povaˇzov´ana za 0: 2.1.18. C´ >> realmin ans = 2.2251e-308 >> 1e-400 ans = 0
2.1.19. Neurˇcit´ y v´ yraz je napˇr´ıklad ∞ − ∞ nebo 0 · ∞: >> inf-inf ans = NaN >> 0*inf ans = NaN
2.1.6
Zaokrouhlov´ an´ı
ˇ ısla m˚ C´ uˇzeme zaokrouhlit nˇekolika zp˚ usoby. round(x) floor(x) ceil(x) fix(x)
zaokrouhl´ı ˇc´ıslo x na cel´e ˇc´ıslo (ˇc´ısla menˇs´ı neˇz *.5 smˇerem dol˚ u a ostatn´ı smˇerem nahoru) zaokrouhl´ı ˇc´ıslo x na nejbliˇzˇs´ı niˇzˇs´ı cel´e ˇc´ıslo (dol˚ u) zaokrouhl´ı ˇc´ıslo x na nejbliˇzˇs´ı vyˇsˇs´ı cel´e ˇc´ıslo (nahoru) zaokrouhl´ı ˇc´ıslo x na nejbliˇzˇs´ı cel´e ˇc´ıslo smˇerem k nule
Tabulka 2.8: Zaokrouhlov´an´ı ˇc´ısel Funkce pro zaokrouhlov´an´ı m˚ uˇzeme pouˇz´ıt i pro matice, funkce se pak vyˇc´ısl´ı pro jednotliv´e prvky matice. Pˇ r´ıklady 2.1.20. Zaokrouhl´ıme ˇc´ıslo 12.567: >> round(12.567) ans = 13
2.1.21. Nadefinujeme vektor ~x = (0.23, −4.35, 7.57, 0.89, −3.92) a zaokrouhl´ıme jeho sloˇzky vˇsemi zp˚ usoby:
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
16
>> x=[0.23 -4.35 7.57 0.89 -3.92] x = 0.2300 -4.3500 7.5700 0.8900 >> zaokrouhleni=round(x) zaokrouhleni = 0 -4 8 1 -4 >> dolu=floor(x) dolu = 0 -5 7 0 -4 >> nahoru=ceil(x) nahoru = 1 -4 8 1 -3 >> knule=fix(x) knule = 0 -4 7 0 -3
-3.9200
2.1.22. Vˇsimnˇeme si, ˇze fix odˇr´ızne desetinnou ˇc´ast ˇc´ısla, tato funkce se naz´ yv´a cel´a ˇc´ast ˇc´ısla. Chceme-li z´ıskat i desetinnou ˇc´ast ˇc´ısla, odeˇcteme od dan´eho ˇc´ısla jeho celou ˇc´ast: >> a=162.3409; desetinna=a-fix(a), cela=fix(a) desetinna = 0.3409 cela = 162
2.1.7
Diskr´ etn´ı matematika
Uvedeme vybran´e funkce z diskr´etn´ı matematiky. gcd(n,k) lcm(n,k) rem(n,k) isprime(n) primes(n) factorial(n) nchoosek(n,k)
nejvˇetˇs´ı spoleˇcn´ y dˇelitel ˇc´ısel n, k nejmenˇs´ı spoleˇcn´ y n´asobek ˇc´ısel n, k zbytek po celoˇc´ıseln´em dˇelen´ı n/k zjist´ı zda je ˇc´ıslo n prvoˇc´ıslo (1 je, 0 nen´ı) vyp´ıˇse prvoˇc´ısla menˇs´ı nebo rovna ˇc´ıslu n faktori´al n! ( ) kombinaˇcn´ı ˇc´ıslo nk
Tabulka 2.9: Diskr´etn´ı matematika Funkce rem, gcd, lcm lze pouˇz´ıt i pro dvˇe celoˇc´aseln´e matice stejn´eho typu a funkci isprime pro matici pˇrirozen´ ych ˇc´ısel. Pˇ r´ıklady 2.1.23. Spoˇc´ıt´ame nejvˇetˇs´ıho spoleˇcn´eho dˇelitele ˇc´ısel 120 a 27:
´ A ´ A KOMPLEXN´I C ˇ ´ISLA 2.1. REALN
17
>> gcd(120,27) ans = 3
2.1.24. Spoˇc´ıt´ame nejmenˇs´ı spoleˇcn´ y n´asobek ˇc´ısel 9 a 12: >> lcm(9,12) ans = 36
2.1.25. Spoˇc´ıt´ame zbytek po celoˇc´ıseln´em dˇelen´ı 21/4 a v´ ysledek celoˇc´ıseln´eho dˇelen´ı, pˇripomeˇ nme ˇze, pˇri celoˇc´ıseln´em dˇelen´ı 21/4 dost´av´ame v´ ysledek 5 a zbytek 1: >> a=21;b=4; >> rem(a,b) ans = 1 >> (a-rem(a,b))/b ans = 5
2.1.26. Vyp´ıˇseme vˇsechna prvoˇc´ısla aˇz do ˇc´ısla 40: >> primes(40) ans = 2 3
2.1.8
5
7
11
13
17
19
23
29
31
37
Komplexn´ı ˇ c´ısla
Zopakujme si, ˇze komplexn´ı ˇc´ıslo m´a re´alnou a imagin´arn´ı ˇc´ast, napˇr´ıklad ˇc´ıslo 1 + 5i m´a re´alnou ˇc´ast 1 a imagin´arn´ı 5. V Matlabu pro imagin´arn´ı jednotku pouˇz´ıv´ame symbol i nebo j. Komplexn´ı ˇc´ıslo zad´av´ame takto 1+5i. Pro sˇc´ıt´an´ı, odeˇc´ıt´an´ı, n´asoben´ı a dˇelen´ı komplexn´ıch ˇc´ısel pouˇz´ıv´ame bˇeˇzn´e symboly (+ - * /). Pro pr´aci s komplexn´ımi ˇc´ısly pouˇz´ıv´ame tyto funkce. real(c) re´aln´a ˇc´ast komplexn´ıho ˇc´ısla c imag(c) imagin´arn´ı ˇc´ast komplexn´ıho ˇc´ısla c conj(c) komplexnˇe sdruˇzen´e ˇc´ıslo k ˇc´ıslo c abs(c) absolutn´ı hodnota ˇc´ısla c Tabulka 2.10: Funkce pro komplexn´ı ˇc´ısla Pˇ r´ıklady 2.1.27. Zopakujme si postup n´asoben´ı a dˇelen´ı komplexn´ıch ˇc´ısel. Vyn´asob´ıme dvˇe ˇc´ısla c = 7 + 3i, d = 4 − 2i: (7 + 3i) · (4 − 2i) = 28 + 12i − 14i − 6i2 = 28 − 2i + 6 = 34 − 2i . Pˇripomeˇ nme, ˇze i2 = −1. ˇ ısla vydˇel´ıme tak, ˇze zlomek rozˇs´ıˇr´ıme komplexnˇe sdruˇzen´ C´ ym ˇc´ıslem ke jmenovateli: (7 + 3i)(4 + 2i) 22 + 26i 7 + 3i = = = 1.1 + 1.3i . 4 − 2i (4 − 2i)(4 + 2i) 20
18
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC Souˇcin a pod´ıl si spoˇc´ıt´ame v Matlabu: >> c=7+3i;d=4-2i; >> c*d ans = 34.0000 - 2.0000i >> c/d ans = 1.1000 + 1.3000i
2.1.28. Zad´ame komplexn´ı ˇc´ıslo c = 2 + 4i a zobraz´ıme jeho re´alnou a imagin´arn´ı ˇc´ast: >> c=2+4i c = 2.0000 + 4.0000i >> imag(c) ans = 4 >> real(c) ans = 2
D´ale spoˇc´ıt´ame jeho absolutn´ı hodnotu, tj. komplexnˇe sdruˇzen´e ˇc´ıslo: >> abs(c) ans = 4.4721 >> conj(c) ans = 2.0000 - 4.0000i
√
22 + 42 =
√
. 18 = 4.4721 a urˇc´ıme
2.2. MATICE A VEKTORY
2.2
19
Matice a vektory
2.2.1
Zad´ av´ an´ı matic a vektor˚ u
Matici zad´av´ame v hranat´ ych z´avork´ach, prvky na ˇr´adku oddˇelujeme mezerou nebo ˇc´arkou. Jednotliv´e ˇr´adky pak stˇredn´ıkem nebo kl´avesou ENTER. Pˇ r´ıklady
3 5 2.2.1. Zad´ame matici A = 0 9 , prvky na ˇr´adku oddˇel´ıme mezerou a jednotliv´e −3 2 ˇr´adky stˇredn´ıkem: >> A=[3 5; 0 9; -3 2] A~= 3 5 0 9 -3 2
Matici lze vytvoˇrit spojen´ım jin´ ych matic nebo vektor˚ u, se kter´ ymi zach´az´ıme jako s prvky. Matice ”vedle sebe” jsou jako prvky na ˇr´adku a matice ”nad sebou” jsou jako ˇr´adky v matici. Pˇ r´ıklady (
)
(
)
(
4 5 8 4 5 8 a vytvoˇr´ıme matici 2.2.2. Pomoc´ı matic 6 2 0 6 2 0 tice vedle sebe, oddˇel´ım je mezerou jako prvky na ˇr´adku: >> a=[4 5; 6 2], b=[8;0] a = 4 5 6 2 b = 8 0 >> c=[a b] c = 4 5 8 6 2 0
)
. Um´ıst´ıme tedy ma-
0 0 1 2.2.3. Pomoc´ı vektor˚ u ~v = 0 0 1 a ~u = 2 3 4 vytvoˇr´ıme matici 2 3 4 . 0 0 1 Um´ıst´ıme tedy vektory nad sebe, oddˇel´ım je stˇredn´ıkem jako ˇr´adky v matici, a to v poˇrad´ı ~v , ~u, ~v : (
)
(
)
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
20
>> u=[2 3 4] u = 2 3 >> v=[0 0 1] v = 0 0 >> [v;u;v] ans = 0 0 2 3 0 0
4
1
1 4 1 (
)
( ) 3 −8 67 1 2.2.4. K matici A = pˇrid´ame jako posledn´ı ˇr´adek ˇc´ısla 1 2 −9 12 . 1 0 0 23 Um´ıst´ıme tedy vektor pod matici, oddˇel´ıme je od sebe stˇredn´ıkem:
>> A=[3 -8 67 1; 1 0 0 23] A = 3 -8 67 1 1 0 0 23 >> A=[A; 1 2 -9 12] A = 3 -8 67 1 1 0 0 23 1 2 -9 12
2.2.5. Sloˇzitˇejˇs´ı pˇr´ıklad
2.2.2
Funkce pro tvorbu matic
Matici se speci´aln´ımi prvky lze vytvoˇrit i pomoc´ı n´asleduj´ıc´ıch pr´ıkaz˚ u. zeros(m,n) ones(m,n) eye(m,n) rand(m,n) magic(n)
nulov´a matice typu m × n matice jedniˇcek typu m × n jednotkov´a matice typu m × n matice n´ahodn´ ych ˇc´ısel z intervalu (0, 1) typu m × n magick´ y ˇctverec2 ˇr´adu n
Tabulka 2.11: Funkce pro tvorbu matic Pokud se pouˇzij´ı funkce zeros, ones, eye, rand pouze s jedn´ım parametrem (napˇr´ıklad zeros(3)), vznikne ˇctvercov´a matice pˇr´ısluˇsn´eho ˇr´adu. Pˇ r´ıklady 2.2.6. Vygenerujeme ˇctvercovou matici ˇr´adu 2 n´ahodn´ ych ˇc´ısel z intervalu (0, 1): 2ˇ
Ctvercov´ a matice, ve kter´e je stejn´ y souˇcet prvk˚ u ve vˇsech ˇr´adc´ıch, ve vˇsech sloupc´ıch a na obou diagon´al´ach.
2.2. MATICE A VEKTORY
>> rand(2) ans = 0.5252 0.2026
21
0.6721 0.8381
2.2.7. Vygenerujeme matici typu 2×5 n´ahodn´ ych ˇc´ısel z intervalu (0, 100). Pˇr´ıkaz rand(2,5) vygeneruje matici typu 2 × 5 ˇc´ısel z intervalu (0, 1) a kdyˇz tuto matici vyn´asob´ıme ˇc´ıslem 100, z´ısk´ame poˇzadovanou matici: >> 100*rand(2,5) ans = 1.9640 37.9481 68.1277 83.1796
50.2813 70.9471
42.8892 30.4617
18.9654 19.3431
2.2.8. Vygenerujeme ˇctvercovou matici ˇr´adu 3 n´ahodn´ ych cel´ ych ˇc´ısel z intervalu (0, 10). Pˇr´ıkaz rand(3) vygeneruje ˇctvercovou matici ˇr´adu 3 ˇc´ısel z intervalu (0, 1) a kdyˇz tuto matici vyn´asob´ıme ˇc´ıslem 10, z´ısk´ame matici ˇc´ısel z intervalu (0, 10), po zaokrouhlen´ı pˇr´ıkazem round z´ısk´ame poˇzadovanou matici cel´ ych ˇc´ısel: >> round(10*rand(3)) ans = 0 10 5 8 8 2 10 4 6
2.2.9. PREDELAT NA CISLA OD 10 DO 30 Do promˇenn´e hody vygenerujeme 10 n´ahodn´ ych ˇc´ısel, kter´e reprezentuj´ı hody kostkou, tj. jsou to ˇc´ısla 1, 2 . . . 6. Pˇr´ıkaz rand(1,10) vygeneruje vektor 10 ˇc´ısel z intervalu (0, 1) a kdyˇz jej vyn´asob´ıme ˇc´ıslem 6, z´ısk´ame matici ˇc´ısel z intervalu (0, 6), po zokrouhlen´ı nahoru (nebot’ nechceme m´ıt mezi v´ ysledn´ ymi ˇc´ısly nulu) pˇr´ıkazem ceil z´ısk´ame poˇzadovano´ y vektor: >> hody=ceil(6*rand(1,10)) hody = 4 2 2 1
2.2.3
5
3
6
3
3
6
Vygenerov´ an´ı aritmetick´ e posloupnosti
Potˇrebujeme-li vygenerovat vektor ˇc´ısel, kter´a jsou prvky aritmetick´e posloupnosti, pak to lze v Matlabu udˇelat pomoc´ı dvojteˇcek takto: prvni_clen:diference:posledni_clen Pˇ r´ıklady 2.2.10. Potˇrebujeme vektor (4, 7, 10, 13, 16, 19, 22) tedy ˇc´ı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´a, Matlab ji bere jako rovnu 1.
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
22
>> 2:10 ans = 2
3
4
5
6
7
8
9
10
Diference m˚ uˇze b´ yt i z´aporn´e ˇc´ıslo. >> 13:-3:0 ans = 13
10
7
4
1
Diference m˚ uˇze b´ yt i desetinn´e ˇc´ıslo. >> 5:0.2:6 ans = 5.0000
2.2.4
5.2000
5.4000
5.6000
5.8000
6.0000
Pr´ ace s ˇ c´ astmi matic a vektor˚ u
Matlab um´ı pracovat s jednotliv´ ymi prvky ˇr´adky, sloupci matice nebo se submaticemi. Obecnˇe lze ˇrict, ˇze Pˇ r´ıklady 2.2.11. V tomto pˇr´ıkladˇe si uk´aˇzeme pr´aci s jednotliv´ ymi ˇcastmi (jsou oznaˇceny ˇsedˇe) t´eto matice:
Nejprve si matici zad´ame: >> A=[9 4 9 4 1 0 5 2;2 0 7 8 2 7 5 1;6 8 1 0 1 4 8 0;4 4 4 3 6 9 3 7; 8 6 9 8 2 4 1 8;7 7 9 0 1 4 3 8;4 6 1 0 0 3 2 1];
Vyp´ıˇseme prvn´ı ˇr´adek matice A: >> A(1,:) ans = 9
4
A sedm´ y sloupec:
9
4
1
0
5
2
2.2. MATICE A VEKTORY
23
>> A(:,7) ans = 5 5 8 3 1 3 2
Prvek a3,3 : >> A(3,3) ans = 1
A vyznaˇcen´e submatice: >> A(3:6,1) ans = 6 4 8 7 >> A(4:7,3:5) ans = 4 3 9 8 9 0
6 2 1
Celou matici A: >> A
= 9 2 6 4 8 7 4
4 0 8 4 6 7 6
9 7 1 4 9 9 1
4 8 0 3 8 0 0
1 2 1 6 2 1 0
0 7 4 9 4 4 3
5 5 8 3 1 3 2
2 1 0 7 8 8 1
Nakonec si 2.2.12. V matici B pˇrep´ıˇseme prvky v druh´em sloupci na ˇc´ısla 10:
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
24
>> B=[2 3 1 6;5 0 7 9;3 2 1 4] B = 2 3 1 6 5 0 7 9 3 2 1 4 >> B(:,2)=10 B = 2 10 1 6 5 10 7 9 3 10 1 4
Smaˇzeme prvn´ı ˇr´adek, tak ˇze ho nahrad´ıme pr´azdnou matici [ ]: >> B(1,:)=[ ] B = 5 10 3 10
7 1
9 4
2.2.13. Z matice C vypˇseme jen sud´e sloupce: >> C=[0.5 2 0.45 2.4 9 0 4.9 ;9 3.4 5.2 8 9 0 1] C = 0.5000 2.0000 0.4500 2.4000 9.0000 9.0000 3.4000 5.2000 8.0000 9.0000 >> C(:,1:2:end) ans = 0.5000 0.4500 9.0000 4.9000 9.0000 5.2000 9.0000 1.0000
2.2.5
Operace s maticemi a vektory
Pro operaci smaticemi a vektory pouˇz´ıv´ame n´asleduj´ıc´ı symboly:
0 0
4.9000 1.0000
2.2. MATICE A VEKTORY + * / \ ^ ’ .* ./ .\ .^ .’
25
souˇcet matic (napˇr. A+B je matice s prvky aij + bij ) rozd´ıl matic (napˇr. A-B je matice s prvky aij − bij ) souˇcin matic ”ˇradek kr´at sloupec” prav´e maticov´e dˇelen´ı (napˇr. A/B je matice A · B −1 ) lev´e maticov´e dˇelen´ı (napˇr. A\B je matice A−1 · B) mocnina matic (napˇr. A^k je A · A · . . . · A (k-kr´at)) transponovan´a matice, pro komplexn´ı matice transponovan´a konjugovan´a3 matice (napˇr. A’ je matice s prvky aji ) souˇcin matic ”prvek po prvku” (napˇr. A.*B je matice s prvky aij bij ) prav´e dˇelen´ı ”prvek po prvku” (napˇr. A./B je matice s prvky aij /bij ) lev´e dˇelen´ı ”prvek po prvku” (napˇr. A.\B je matice s prvky bij /aij ) mocnina (napˇr. A.^k je matice s prvky (aij )k ) transponovan´a matice (napˇr. A’ je matice s prvky aji )
Tabulka 2.12: Operace s maticemi Z matematiky zn´ame souˇcin matic, kter´ y se prov´ad´ı tzv. ”ˇr´adek kr´at sloupec”(napˇr´ıklad A·B). D´ale zn´ame souˇcin ˇc´ısla a matice (napˇr´ıklad c·A). Pro obˇe tyto operace se v Matlabu pouˇz´ıv´a symbol *. Pˇripomeˇ nme, ˇze n´asobit m˚ uˇzeme pouze matici typu m × n kr´at matici typu n × p a v´ ysledkem n´asoben´ı je matice typu m × p. Am×n ∗ Bn×p = Cm×p D´ale si pˇripomeˇ nme, ˇze n´asoben´ı nen´ı komutativn´ı, tj. matice A · B je obecnˇe jin´a neˇz matice B · A. Symbolem .* oznaˇcuje Matlab tzv. souˇcin ”prvek po prvku”, kter´ y se poˇc´ıt´a tak, ˇze se vyn´asob´ı prvky obou matic na stejn´ ych pozic´ıch. Takto m˚ uˇzeme n´asobit pouze matice stejn´ ych typ˚ u. Am×n . ∗ Bm×n = Cm×n Pˇ r´ıklady 2.2.14. Spoˇc´ıt´ame A + B, A − B, −4A A · A = A2 >> A=[2 3; 0 9],B=[1 0; -1 5] A~= 2 3 0 9 3
Konjugovan´ a (komplexnˇe sdruˇzen´ a) matice A k matici A vznikne z´amˇenou vˇsech prvk˚ u aij za jejich komplexnˇe sdruˇzen´e ˇc´ıslo aij
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
26
B = 1 -1
0 5
>> A+B ans = 3 -1
3 14
>> A-B ans = 1 1 >> -4*A ans = -8 0 >> A^2 ans = 4 0
3 4
-12 -36
33 81
2.2.15. Na matic´ıch A, B z pˇredchoz´ıho pˇr´ıkladu si uk´aˇzeme n´asoben´ı matic A*B a n´asoben´ı ”prvek po prvku” .*, kdy se spolu vyn´asob´ı prvky na stejn´ ych pozic´ıch. >> A*B ans = -1 -9 >> A.*B ans = 2 0
15 45
0 45
2.2.16. N´asoben´ı obd´eln´ıkov´ ych matic...
2.2.17. Dˇelen´ı / ∗ /
2.2.18. Rozd´ıl mezi operac´ı ’ a .’ pro komplexn´ı matice je patrn´ y z n´asleduj´ıc´ıho pˇr´ıkladu:
2.2. MATICE A VEKTORY
>> w=[1-3*i w = 1.0000 0 >> w’ ans = 1.0000 + 3.0000 >> w.’ ans = 1.0000 3.0000 +
2.2.6
27
3+2*i; -i 4+2*i] 3.0000i 1.0000i
3.0000 + 2.0000i 4.0000 + 2.0000i
3.0000i 2.0000i
0 + 1.0000i 4.0000 - 2.0000i
3.0000i 2.0000i
0 - 1.0000i 4.0000 + 2.0000i
Funkce line´ arn´ı algebry pro matice
size(A) numel(A) det(A) rank(A) trace(A) norm(A) inv(A) rref(A) eig(A)
typ matice A (poˇcet ˇr´adk˚ u, poˇcet sloupc˚ u) poˇcet prvk˚ uA determinant matice A hodnost matice A stopa matice A (souˇcet prvk˚ u na hlavn´ı diagon´ale) norma matice A inverzn´ı matice A pˇreveden´ı matice A na horn´ı troj´ uheln´ıkov´ y tvar pomoc´ı eliminace vlastn´ı ˇc´ısla a vlastn´ı vektory matice A
Tabulka 2.13: Funkce pro matice Pˇ r´ıklady 2.2.19. Urˇc´ıme typ matice a poˇcet jejich prvk˚ u: >> D=[1 2 5; 0 4 3] D = 1 2 5 0 4 3 >> [radky,sloupce]=size(D) radky = 2 sloupce = 3 >> numel(D) ans = 6
2.2.20. Spoˇc´ıt´ame determinant, hodnost a tranponovanou k matici A:
28
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
>> A=[2 3 4; 3 5 0; 2 3 9] A~= 2 3 4 3 5 0 2 3 9 >> det(A) ans = 5 >> hodnost=rank(A) hodnost = 3 >> transponovana=A’ transponovana = 2 3 2 3 5 3 4 0 9
2.2.21. K matici z pˇredchoz´ıho pˇr´ıkladu spoˇc´ıt´ame matici inverzn´ı a zkotrolujeme, zda plat´ı A−1 · A = I >> inverzni=inv(A) inverzni = 9.0000 -3.0000 -5.4000 2.0000 -0.2000 0 >> inverzni*A ans = 1.0000 -0.0000 0 1.0000 0 0
-4.0000 2.4000 0.2000
0.0000 0 1.0000
ˇ adkov´a norma je maximum ze souˇct˚ 2.2.22. Uvedeme si tˇri druhy norem matic. R´ u absolutn´ıch hodnot prvk˚ u v jednotliv´ ych ˇr´adc´ıch matice. >> max(sum(abs(A’))) >> norm(A,inf)
Sloupcov´a norma je maximum ze souˇct˚ u absolutn´ıch hodnot prvk˚ u v jednotliv´ ych sloupc´ıch matice. >> max(sum(abs(A))) >> norm(A,1)
Euklidova norma je odmocnina ze souˇct˚ u ˇctverc˚ u vˇsech prvk˚ u matice. >> sqrt(sum(sum(A.^2))) >> norm(A,’fro’)
2.2.23. Urˇc´ıme vlastn´ı ˇc´ısla a vlastn´ı vektory matice B:
2.2. MATICE A VEKTORY
2.2.7
Funkce line´ arn´ı algebry pro vektory
Nyn´ı uvedeme nˇekter´e funkce pro vektory: length(v) d´elka vektoru ~v cross(v,u) vektorov´ y souˇcin vektor˚ u ~v a ~u dot(v,u) skal´arn´ı souˇcin vektor˚ u ~v a ~u Tabulka 2.14: Funkce pro vektory Pˇ r´ıklady 2.2.24. Spoˇc´ıt´ame skal´arn´ı a vektorov´ y souˇcin vektor˚ u ~v , ~u: >> v=[2 3 4],u=[0 2 1] v~= 2 3 4 u~= 0 2 1 >> length(v), length(u) ans = 3 ans = 3 >> skalarni=dot(v,u) skalarni = 10 >> vektorovy=cross(v,u) vektorovy = -5 2 4
2.2.8
Manipulace s maticemi
reshape(A,m,n) rot90(A) tril(A) triu(A) diag(A) diag(v)
zmˇena typu matice A na typ (m, n) matice, kter´a vznikne otoˇcen´ım matice A o 90◦ doln´ı troj´ uheln´ıkov´a matice k matici A horn´ı troj´ uheln´ıkov´a matice k matici A hlavn´ı diagon´ala matice A matice, kter´a m´a na hlavn´ı diagon´ale vektor ~v , a jinde nuly
Tabulka 2.15: Manipulace s maticemi Pˇ r´ıklady 2.2.25. Vytvoˇr´ıme matici typu (3, 2) z vektoru 1, 4, 3, 8, 0, 2:
29
30
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
>> b=reshape([1 4 3 8 0 2],3,2) b = 1 8 4 0 3 2
2.2.26. Pˇretransformujeme zadanou matici na typ (2, 6), vid´ıme ˇze Matlab matici tvoˇr´ı po ˇr´adc´ıch: >> mat mat = 1 6 4 5 3 2 7 5 0 4 0 -2 >> reshape(mat,2,6) ans = 1 7 6 5 4 3
5 0
4 2
0 -2
2.2.27. Pro funkci reshape je potˇreba zachov´avat poˇcet prvk˚ u p˚ uvodn´ı matice, zkus´ıme matici mat z pˇredchoz´ıho pˇr´ıkladu pˇretransformovat na typ (3, 3): >> reshape(mat,3,3) ??? Error using ==> reshape To RESHAPE the number of elements must not change.
2.2.28. Z matice C vybereme horn´ı a doln´ı troj´ uheln´ıkov´e matice: >> C=[2 3 1; 0 8 9; 1 1 -4] C = 2 3 1 0 8 9 1 1 -4 >> horni=triu(C),dolni=tril(C) horni = 2 3 1 0 8 9 0 0 -4 dolni = 2 0 0 0 8 0 1 1 -4
2.2.29. Z matice a do promˇenn´e v vybereme hlavn´ı diagonalu:
2.2. MATICE A VEKTORY
31
>> a=[3 5 7; 2 1 23; -5 9 1] a = 3 5 7 2 1 23 -5 9 1 >> v=diag(a) v~= 3 1 1
2.2.30. Vytvoˇr´ıme matici, kter´a ma na diagon´ale ˇc´ısla 2, −1, 4 a jinde nuly: >> diag([2 -1 4]) ans = 2 0 0 0 -1 0 0 0 4
2.2.31. Magick´ y ˇctverec ˇr´adu 3 a ovˇeˇren´ı, ˇze je skuteˇcnˇe magick´ y ˇctverec : >> m=magic(3) m = 8 1 6 3 5 7 4 9 2 >> sum(m’) ans = 15 15 15 >> sum(m) ans = 15 15 15 >> sum(diag(m)) ans = 15 >> sum(rot90(diag(m))) ans = 15
2.2.9
ˇ sen´ı soustav liner´ Reˇ arn´ıch rovnic
Pˇ r´ıklady 2.2.32. Najdˇete ˇreˇsen´ı soustavy rovnic 3x1 + 4x2 = 7 x1 − 2x2 = −6 Nejprve zad´ame matici a vektor:
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
32
>> A=[3 4;1 -2],b=[7; -6] A~= 3 4 1 -2 b = 7 -6
Spoˇc´ıt´ame hodnost matice a hodnost matice rozˇs´ıˇren´e: >> rank(A),rank([A b]) ans = 2 ans = 2
Jelikoˇz se hodnosti rovnaj´ı, m´a soustava ˇreˇsen´ı. Jelikoˇz jsou z´aroveˇ n rovny poˇctu nezn´am´ ych, je toto ˇreˇsen´ı jedin´e. >> x=A\b x = -1.0000 2.5000
2.2.33. Najdˇete ˇreˇsen´ı soustavy rovnic 3x1 + 7x2 − 2x3 = 2 4x1 + 3x2 + 2x3 = 5 2x1 + 11x2 − 6x3 = −1 −x1 + 7x2 + 3x3 = −1
Nejprve zad´ame matici a vektor: >> A=[ 3 7 -2; 4 3 2; 2 11 -6; -1 7 3] A~= 3 7 -2 4 3 2 2 11 -6 -1 7 3 >> b=[2;5;-1;-1] b = 2 5 -1 -1
Spoˇc´ıt´ame hodnost matice a hodnost matice rozˇs´ıˇren´e:
2.2. MATICE A VEKTORY
>> rank(A) ans = 3 >> rank([A,b]) ans = 3 >> size(A) ans = 4
33
3
Jelikoˇz se hodnosti rovnaj´ı, m´a soustava ˇreˇsen´ı. Jelikoˇz jsou z´aroveˇ n rovny poˇctu nezn´am´ ych (poˇcet sloupc˚ u matice A), je toto ˇreˇsen´ı jedin´e. >> x=A\b x = 1.1714 -0.1200 0.3371
Zkontrolujeme chybu vypoˇctu: >> A*x-b ans = 1.0e-014 * -0.0444 -0.1776 0.0888 0.2220
ˇ sen´ı lze nal´ezt i pˇreveden´ım rozˇs´ıˇren´e matice na troj´ Reˇ uheln´ıkov´ y tvar: >> C=rref([A,b]) C = 1.0000 0 0 1.0000 0 0 0 0
0 0 1.0000 0
1.1714 -0.1200 0.3371 0
2.2.34. Najdˇete ˇreˇsen´ı soustavy rovnic 3x1 + 7x2 − 2x3 = 2 4x1 + 3x2 + 2x3 = 5 2x1 + 11x2 − 6x3 = 6 Nejprve zad´ame matici a vektor:
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
34
>> A=[ 3 7 -2; 4 3 2; 2 11 -6] A~= 3 7 -2 4 3 2 2 11 -6 >> b=[2; 5; 6] b = 2 5 6
Spoˇc´ıt´ame hodnost matice a hodnost matice rozˇs´ıˇren´e: >> rank(A) ans = 2 >> rank([A,b]) ans = 3
Jelikoˇz se hodnosti nerovnaj´ı, nem´a soustava ˇreˇsen´ı. Pod´ıv´ame se jeˇstˇe na troj´ uhlen´ıkov´ y tvar rozˇs´ıˇren´e matice: >> C=rref([A b]) C = 1.0000 0 0 1.0000 0 0
2.2.10
1.0526 -0.7368 0
0 0 1.0000
Pr´ ace s daty
max(A) maximum ve sloupc´ıch matice A min(A) minimum ve sloupc´ıch maticeA sum(A) souˇcty prvk˚ u ve sloupc´ıch matice cumsum(A) ˇc´asteˇcn´e souˇcty prvk˚ u ve sloupc´ıch matice prod(A) souˇciny prvk˚ u ve sloupc´ıch matice cumprod(A) ˇc´asteˇcn´e souˇciny prvk˚ u ve sloupc´ıch matice sort(A) setˇr´ıd´ı vzestupnˇe prvky ve sloupc´ıch sortrows(A)setˇr´ıd´ı cel´e ˇr´adky vzestupnˇe podle prvn´ıho prvku mean(A) aritmetick´ y pr˚ umˇer ve sloupc´ıch Tabulka 2.16: Pr´ace s daty Pokud pouˇzijeme funkce z tabulky 2.16 pro vektory, aplikuje se na jednotliv´e prvky vektoru, bey ohledu na to, zda je vektor sloupcov´ y nebo ˇr´adkov´ y. Pˇ r´ıklady 2.2.35. Spoˇc´ıt´ame maximum ve sloupc´ıch matice:
2.2. MATICE A VEKTORY
35
>> matice=[2 5 6; 3 0 9; 1 8 -1; 4 9 2] matice = 2 5 6 3 0 9 1 8 -1 4 9 2 >> max(matice) ans = 4 9 9
A maximum ze vˇsech prvk˚ u matice: >> maximum=max(max(matice)) maximum = 9
2.2.36. Spoˇc´ıt´ame souˇciny ve sloupc´ıch matice z pˇredchoz´ıho pˇr´ıkladu: >> soucins=prod(matice) soucins = 24 0 -108
Souˇciny v ˇr´adc´ıch matice spoˇc´ıt´ame pomoc´ı matice transponovan´e tj. ˇr´adky se stanou sloupci: >> soucinr=prod(matice’) soucinr = 60 0 -8 72
´ ˇ ´ISLY, MATICEMI A VEKTORY KAPITOLA 2. PRACE SC
36
2.3
Relaˇ cn´ı a logick´ e oper´ atory
2.3.1
Pravda, nepravda
V Matlabu neni speci´aln´ı typ pro logick´e promˇenn´e, pravda m´a hodnotu 1 a nepravda hodnotu 0.
2.3.2
Relaˇ cn´ı oper´ atory
Relaˇcn´ı oper´atory lze pouˇz´ıt na matice, kde se pak srovn´avaj´ı prvek po prvku. Pro komplexn´ı ˇc´ısla oper´atory ==, ~= srovn´avaj´ı re´aln´e a imagin´arn´ı ˇc´asti, ostatn´ı oper´atory srovn´avaj´ı re´aln´e ˇc´asti. == je rovno = ~= nen´ı rovno 6= < je menˇs´ı < > je vˇetˇs´ı > <= je menˇs´ı nebo rovno≤ <= je vˇetˇs´ı nebo rovno≥ Tabulka 2.17: Relaˇcn´ı oper´atory Pˇ r´ıklady 2.3.1. >> A=[3 9 4; 1 -5 3], B=[4 4 0; 9 3 0] A~= 3 1
9 -5
4 3
4 3
0 0
1 0
1 1
0 1
1 1
B = 4 9 >> A>B ans = 0 0 >> B<=3 ans = 0 0
ˇ ´I A LOGICKE ´ OPERATORY ´ 2.3. RELACN
2.3.3
37
Logick´ e oper´ atory
Vstup not and or xor A B ~A A&B A|B xor(A,B) 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0 Tabulka 2.18: Logick´e oper´atory Je moˇzn´e se setkat s obˇema z´apisy. Tj. A&B je tot´eˇz jako and(A,B), A|B je tot´eˇz jako or(A,B) a ~A je tot´eˇz jako not(A). Logick´ y v´ yraz se vyhodnocuje zleva doprava.
2.3.4 all any find
Funkce pro zjiˇ st’ov´ an´ı platnosti podm´ınek plat´ı pro vˇsechnu prvky? plat´ı alespoˇ n pro jeden prvek? pro ketr´e plat´ı?
Tabulka 2.19:
Kapitola 3 Grafick´ e v´ ystupy 3.1
Dvojrozmˇ ern´ e grafy
3.1.1
Vykreslen´ı grafu
plot(x,y) fplot(’f’,[a,b])
graf bod˚ u o souˇradnic´ıch (x, y) graf funkce f na intervalu ha, bi
Tabulka 3.1: Dvojrozmˇern´e grafy Vstupem pˇr´ıkazu plot jsou souˇradnice bod˚ u, kter´e se pak spoj´ı ˇcarou. Chceme-li vykreslit graf funkce, lze pouˇz´ıt i pˇr´ıkaz fplot, prvn´ı parametrem je funkˇcn´ı pˇredpis v apostrofech a druh´ ym je interval, na kter´em chceme graf vykreslit, tˇret´ım nepovinn´ ym parametrem je specifikace. Pˇ r´ıklady
3.1.1. Vykresl´ıme graf funkce y = x2 na intervalu h−4, 4i pomoc´ı pˇr´ıkazu plot. Vstupem pˇr´ıkazu plot jsou souˇradnice bod˚ u, kter´e se pak spoj´ı ˇcarou. Nejprve si do promˇenn´e x uloˇz´ıme souˇradnice x, kter´e vygenerujeme jako 100 bod˚ u mezi −4 a 4: >> x=linspace(-4,4);
Pak vytvoˇr´ıme souˇradnice y jako funkˇcn´ı hodnoty funkce y = x2 v bodech x: >> y=x.^2;
A vykresl´ıme graf: >> plot(x,y)
Po vyps´an´ı pˇr´ıkazu se zobraz´ı nov´e okno Figure No. 1, kter´e se stane aktivn´ım. 38
ˇ E ´ GRAFY 3.1. DVOJROZMERN
39
16
14
12
10
8
6
4
2
0 −4
−3
−2
−1
0
1
2
obr. 3.1: Graf funkce y = x
3
4
2
Pokud je toto okno otevˇren´e, graf se pˇrekresl´ı, ale okno se nestane aktivn´ım. V tomto pˇr´ıpadˇe okno uˇcin´ıme aktivn´ı kliknut´ım na tlaˇc´ıtko Figure No. 1 na hlavn´ım panelu ve W indows (obvykle je um´ıstˇen dole). 3.1.2. Chceme-li vykreslit graf funkce, lze pouˇz´ıt i pˇr´ıkaz fplot, prvn´ı parametrem je funkˇcn´ı pˇredpis v apostrofech a druh´ ym je interval, na kter´em chceme graf vykreslit. sin(x) Zobraz´ıme graf funkce y = x na intervalu h−20, 20i: >> 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. 3.2: Graf funkce y =
10
15
20
sin(x) x
Chceme-li graf vykreslit jinak neˇz modrou plnou ˇc´arou, pouˇzijeme tzv. specifikaci grafu. Pro specifikaci m˚ uˇzeme pouˇz´ıt libovolnou kombinaci voleb z prvn´ıho, druh´eho a tˇret´ıho sloupce tabulky 3.2 (v uveden´em poˇrad´ı), pˇriˇcemˇz nˇekterou lze vynechat. Specifikaci uv´ad´ıme jako ˇretˇezec, tj. do apostrof˚ u a je to tˇret´ı nepovinn´ y parametr pˇr´ıkazu plot
´ VYSTUPY ´ KAPITOLA 3. GRAFICKE
40
a fplot. Napˇr´ıklad ˇcervenou ˇc´arkovanou ˇc´aru vytvoˇr´ıme specifikac´ı ’r--’, zelen´e krouˇzky ’go’, ˇzlutou ˇc´aru s troj´ uheln´ıˇcky ’yv-’. Barvy Symboly Typy ˇcar b modr´a . teˇcky - pln´a g zelen´a o krouˇzky : teˇckovan´e r ˇcerven´a x kˇr´ıˇzky × -. ˇcerchovan´a c svˇetl´e modr´a + kˇr´ıˇzky + -- ˇc´arkovan´a m fialov´a * hvˇezdiˇcky y ˇzlut´a s ˇctverce k ˇcern´a d kosoˇctverce v troj´ uheln´ıky (dolu) ^ troj´ uheln´ıky (nahoru) < troj´ uheln´ıky (vlevo) > troj´ uheln´ıky (vpravo) p pˇetic´ıp´e hvˇezdy h ˇsestic´ıp´e hvˇezdy Tabulka 3.2: Specifikace grafu Pˇ r´ıklady 3.1.3. Uk´aˇzeme si graf funkce y = sin(2x) na intervalu h−π, πi ˇcernou teˇckovanou ˇcarou. >> 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
obr. 3.3: Graf funkce y = sin(2x) Pˇ r´ıklady
3
4
ˇ E ´ GRAFY 3.1. DVOJROZMERN
41
3.1.4. Specifikace pomoc´ı symbol˚ u se ˇcasto pouˇz´ıv´a chceme-li zobrazit diskr´etn´ı data. M´ame zadan´e hodnoty v tabulce, a zobraz´ıme je jako hvˇezdiˇcky.
t 1 s 19
3 17
5 18
7 10 14 15 20 16 22 19
>> t=[1 3 5 7 10 14 15]; >> s=[19 17 18 20 16 22 19]; >> plot(t,s,’h’)
22
21
20
19
18
17
16
0
5
10
15
obr. 3.4: Graf
3.1.5. Jsou-li x-ov´e souˇradnice ˇc´ısla 1, 2, 3, . . . m˚ uˇzeme je v pˇr´ıkazu plot vynechat.
den 1 2 teplota 17 21
3 19
4 23
5 16
6 21
7 8 19 19
9 10 11 15 23 20
>> teplota=[17 21 19 23 16 21 19 19 15 23 20]; >> plot(teplota)
´ VYSTUPY ´ KAPITOLA 3. GRAFICKE
42 23
22
21
20
19
18
17
16
15
1
2
3
4
5
6
7
8
9
10
11
obr. 3.5: Graf teplot 3.1.6. Pˇri volbˇe intervalu, na kter´em vykreslujeme graf mus´ıme b´ yt obezˇretn´ı a br´at v u ´vahu definiˇcn´ı obor funkce. Zobraz´ıme si graf funkce y = ln(x), v´ıme, ˇze definiˇcn´ı obor je (0, ∞), zobraz´ıme si tedy graf na intervalu, kter´ y lezˇz´ı v definiˇcn´ım oboru, napˇr´ıklad h0.0001, 3i: >> fplot(’log(x)’,[0.0001,3]) 2
0
−2
−4
−6
−8
−10
0.5
1
1.5
2
2.5
3
obr. 3.6: Graf funkce Uk´aˇzeme si, co by se stalo, kdybych nechali graf zobrazit na intervalu h−3, 3i, Matlab vyp´ıˇse chybovou hl´aˇsku, >> 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
ˇ E ´ GRAFY 3.1. DVOJROZMERN
3.1.2
43
V´ıce graf˚ u najednou
vykreslen´ı graf˚ u do jednoho obr´azku, nastaven´ım on tuto vlastnost zapneme, off vypneme subplot(m,n,k) v´ıceobr´azk˚ u do jednoho okna hold
Tabulka 3.3: V´ıce graf˚ u do jednoho obr´azku nebo v´ıce obr´azk˚ u do jednoho okna Pokud chceme vykreslit v´ıce graf˚ u do jednoho obr´azku, pouˇzijeme pˇr´ıkaz hold. Pˇ r´ıklady
-4 2 3 7 10 A v´ıme ˇze pˇredpokl´adan´e 9 6 0 32 89 chov´an´ı t´eto fyzik´aln´ı veliˇciny je d´ano fynkc´ı y = x2 − x ∗ exp(x/10) + 1. Chceme si do jednoho grafu zobrazit namˇeˇren´e i teoretick´e hodnoty. Nejprve si zad´ame data z tabulky do promˇenn´ ych vel1, vel2 a pˇr´ıkazem hold on otevˇreme okno (zat´ım pr´azdn´e), do kter´eho se budou zobrazovat vˇsechny grafy, kter´e budeme vykreslovat:
3.1.7. M´ame-li namˇeˇren´e hodnoty v tabulce:
>> vel1=[1 3 7 9 10]; >> vel2=[9 6 0 32 89]; >> hold on
Vykresl´ıme data z tabulky jako ˇcerven´e hvˇezdiˇcky: >> plot(vel1,vel2,’r*’)
a graf teoretick´ ych hodnot: >> fplot(’x^2-x*exp(x/10)+1’,[-5,10]) >> hold off
Nyn´ı si uk´aˇzeme jak to vyˇreˇs´ıme pouze pomoc´ı pˇr´ıkazu plot, >> >> >> >> >>
vel1=[1 3 7 9 10]; vel2=[9 6 0 32 89]; x=linspace(1,10); y=x.^2-x.*exp(x./10)+1; plot(vel1,vel2,’*’,x,y,’-’)
3.1.8. fplot(’[sin(x),cos(x)]’,[])
3.1.3
Nastaven´ı grafu
Do grafu m˚ uˇzeme pˇridat popisy os, nadpis, text na libovoln´e m´ısto, tak´e lze mˇenit rozsah os.
´ VYSTUPY ´ KAPITOLA 3. GRAFICKE
44
axis([x1,x2,y1,y2]) rozsah os pro prvn´ı promˇennou od x1 do x2, pro druhou od y1 do y2 (viz pˇr´ıklad 3.1.10) zoom kliknut´ım lev´ ym tlaˇcitkem myˇsi do obr´azku se zvˇetˇs´ı detail, prav´ ym se lze vracet grid zobrazen´ı mˇr´ıˇzky do grafu title(’text’) titulek obr´azku xlabel(’text’) popis x-ov´e osy ylabel(’text’) popis y-ov´e osy text(x1,y1,’text’) um´ıstˇen´ı textu xxx na pozici x1, y1 legend(’text’) Tabulka 3.4: Nastaven´ı grafu Pˇ r´ıklady 3.1.9. Nastaven´ı os... axis on, off square, equal,normal
3.1.10. >> t=[ 1 3 7 9 10]; >> >> >> >>
s=[9 6 0 32 89]; x=linspace(1,10); y=x.^2-x.*exp(x/10)+1; plot(t,s,’*’,x,y,’-’) 90
80
70
60
50
40
30
20
10
0
1
2
3
4
5
6
7
8
9
obr. 3.7: Graf funkce >> >> >> >> >>
legend(’vysledek experimentu’,’teoreticka hodnota’) axis([0,11,-5,95]) title(’Vysledky mereni’) xlabel(’cas’) ylabel(’sledovana velicina’)
10
ˇ E ´ GRAFY 3.1. DVOJROZMERN
45 Vysledky mereni vysledek experimentu teoreticka hodnota
90
80
70
sledovana velicina
60
50
40
30
20
10
0 0
1
2
3
4
5
6
7
cas
obr. 3.8: Graf funkce
8
9
10
11
Kapitola 4 Programov´ an´ı v Matlabu 4.1
Funkˇ cn´ı M–soubory
Funkce je posloupnost pˇr´ıkaz˚ u, kter´a m´a hlaviˇcku obsahuj´ıc´ı jm´eno, vstupn´ı a v´ ystupn´ı parametry: function[vystupni_parametry]=jmeno(vstupni_parametry) Jm´eno vol´ıme jednoznaˇcnˇe, struˇcnˇe a v´ ystiˇznˇe. Pod t´ımto jm´enem je pak nutn´e funkci uloˇzit do souboru (s pˇr´ıponou *.m). vstupni parametry - seznam vstupn´ıch parametr˚ u, v kulat´ ych z´avork´ach, oddˇelujeme je ˇc´arkou. vystupni parametry - seznam v´ ystupn´ıch parametr˚ u, v hranat´ ych z´avork´ach, oddˇelujeme je ˇc´arkou. Seznamy parametr˚ u mohou b´ yt pr´azdn´e. Funkci je vhodn´e opatˇrit koment´aˇrem, ten zaˇc´ın´a znakem % na zaˇc´atku ˇr´adku. Prvn´ı koment´aˇrov´ y ˇr´adek obsahuje struˇcn´ y popis funkce, v tomto ˇr´adku hled´a pˇr´ıkaz lookfor. Druh´ y koment´aˇrov´ y ˇr´adek je tvar vol´an´ı funkce, tj. vstupn´ı a v´ ystupn´ı parametry ve spr´avn´em poˇrad´ı. Dalˇs´ı koment´aˇrov´e ˇr´adky obsahuj´ı popis vˇsech parametr˚ u funkce a podrobnˇejˇs´ı informace. 4.1.1. function [minimum,prumer,maximum]=vl_vekt(v); % Vypocet minima, prumeru a maxima n=length(v); minimum=min(v); maximum=max(v); prumer=sum(v)/n; 4.1.2. function [M]=nahodna(m,n) % Funkce MATICE: vygenerovani matice nahodnych cisel rozmeru m,n % [M]=nahodna(m,n) 46
´ 4.2. VSTUPY A VYSTUPY % m...pocet radku % n...pocet sloupcu % M=round(rand(m,n));
4.2
Vstupy a v´ ystupy
nargin nargout disp(’text’) disp(promenna) input error
poˇcet vstupn´ıch parametr˚ u (viz pˇr´ıklad 4.2.1) poˇcet v´ ystupn´ıch parametr˚ u vyp´ıˇse text vyp´ıˇse hodnotu promˇenn´e vstup z kl´avesnice (viz pˇr´ıklady 4.2.6, 4.2.7)
Tabulka 4.1: Syntaxe: promenna = input(’retezec znaku’) 4.2.1. function [M]=nahodna(m,n,a,b) % Funkce MATICE: vygenerovani matice nahodnych cisel rozmeru m,n % [M]=nahodna(m,n,a,b) % m...pocet radku % n...pocet sloupcu % a...dolni mez intervalu % b...horni mez intervalu % if nargin<=3, a=0;b=9; end M=round(a+rand(m,n)*(b-a)); 4.2.2. Program na function vek=kolikmije; rok=input(’Zadej rok narozeni: ’); cas=clock; tentorok=cas(1); vek=tentorok-rok;
4.2.3. Funkce na vykreslen´ı grafu funkce sin(x) na intervalu ha, bi:
47
´ ´I V MATLABU KAPITOLA 4. PROGRAMOVAN
48
function kresli1(a,b); % Program vykresli graf funkce sin(x) na intervalu (a,b) % [ ]=kresli1(a,b) % a,b...meze intervalu % x=linspace(a,b,100); y=sin(x); plot(x,y) ˇ sen´ı z pˇr´ıkladu 4.2.3 m´a nev´ 4.2.4. Reˇ yhodu, nebot’ budeme-li cht´ıt zobrazit graf jin´e funkce mus´ıme v M-souboru naj´ıt m´ısto s funkˇcn´ım pˇredpisem a tento zmˇenit. Uloˇz´ıme si tedy funkˇcn´ı pˇredpis do jin´eho M-souboru, kde jej m˚ uˇzeme pohodlnˇe mˇenit. M˚ uˇzemi m´ıt tak´e v´ıce soubor˚ u s funkˇcn´ımi pˇredpisy. Uk´aˇzeme si nyn´ı takov´ y program. Funkce na vykreslen´ı grafu funkce, kterou m´ame uloˇzenou v souboru se jm´enem soubor na intervalu ha, bi: function kresli2(soubor, a,b); % Program vykresli graf funkce ze souboru ’soubor’ na intervalu (a,b) % [ ]=kresli2(a,b) % soubor...nazev souboru, ve kterem se spocita hodnota funkce % a,b...meze intervalu % x=linspace(a,b,100); y=feval(soubor,x); plot(x,y) Pˇr´ıklad funkce s funkˇcn´ım pˇredpisem v souboru f.m: function y=f(x); y=sin(2*x-pi)+x; Chceme-li zobrazit graf funkce, jej´ıˇz pˇredpis je uloˇzen v soubor f.m na intervalu (0,7), tak v Matlabu zad´ame: >> kresli2(’f’,0,7) 4.2.5. function kresli3(soubor,a,b); % Program vykresli graf funkce a jeji derivace ze souboru % na intervalu (a,b) % [ ]=kresli3(soubor,a,b) % % soubor...nazev souboru, ve kterem se spocita funkce a derivace % a,b...meze intervalu
´ 4.2. VSTUPY A VYSTUPY
49
x=linspace(a,b,100); %vytvorime 100 bodu na intervalu (a,b) [f,d]=feval(soubor,x); %vycislime hodnoty funkce a derivace plot(x,f,’r’,x,d,’r:’); %vykreslime grafy grid on legend(’Graf funkce’, ’Graf derivace’); %legenda ke grafum function [f,d]=funkce(x) % f=cos(x).^2; d=-2*cos(x).*sin(x); 4.2.6. Program spoˇc´ıt´a determinant matice. V pˇr´ıpadˇe, ˇze matice nen´ı ˇctvercov´a, vyp´ıˇse se chybov´a hl´aˇska a program skonˇc´ı. function [determinant]=mujdet(A); % Vypocet determinantu matice A % [determinant]=mujdet(A) % A...matice % determinant...determinant [radky, sloupce]=size(A); if radky~=sloupce, error(’Matice musi byt ctvercova!’) else determinant=det(A); end 4.2.7. Program spoˇc´ıt´a determinant matice a zjist´ı zda je regul´arn´ı ˇci singul´arn´ı. function [determinant,info]=mujdet(A); % Vypocet determinantu matice A a informace o regularite. % [determinant,info]=mujdet(A) % A...matice % determinant...determinant % info...informace o reularite [radky, sloupce]=size(A); if radky~=sloupce, error(’Matice musi byt ctvercova!’) else determinant=det(A); end if determinant==0, info=’singularni’; else info=’regularni’; end
´ ´I V MATLABU KAPITOLA 4. PROGRAMOVAN
50
4.2.1
Programovac´ı struktury
rozhodovac´ı blok if podm´ınka 1 blok pˇr´ıkaz˚ u1 end rozhodovac´ı blok if podm´ınka 1 blok pˇr´ıkaz˚ u1 elseif podm´ınka 2 blok pˇr´ıkaz˚ u2 ... else blok pˇr´ıkaz˚ u3 end pˇ rep´ınaˇ c switch promˇenn´a case hodnota1 blok pˇr´ıkaz˚ u1 case hodnota2 blok pˇr´ıkaz˚ u2 ... otherwise blok pˇr´ıkaz˚ u3 end cyklus se zn´ am´ ym poˇ ctem opakov´ an´ı for ˇr´ıd´ıc´ı promˇenn´a=rozsah hodnot blok pˇr´ıkaz˚ u end cyklus s podm´ınkou while podm´ınka blok pˇr´ıkaz˚ u end
Literatura ˇ [1] V.G¨orner,P.Nedoma: Programov´y syst´em Matlab, miniskriptum CVUT, Praha 1991. ´ [2] F.Duˇsek: Matlab a Simulink: Uvod do pouˇz´ıv´ an´ı, skriptum Univerzita Pardubice, Pardubice 2002. [3] K.Zaplat´ılek, B.Doˇ nar: Matlab pro zaˇc´ ateˇcn´ıky, Technick´a literatura BEN, Praha 2003. [4] K.Rektorys: Pˇrehled uˇzit´e matematiky, ˇsest´e pˇrepracovan´e vyd´an´ı, Prometheus, Praha 1995.
51