ˇ UNIVERZITA JANA EVANGELISTY PURKYNE ´ ´ V USTI NAD LABEM ˇ´ ˇ ´ FAKULTA - KATEDRA CHEMIE PR IRODOVEDECK A
Opora pro kombinovan´ e navazuj´ıc´ı magistersk´ e studium ˇ Uˇ citelstv´ı chemie pro ZS
Programov´ an´ı v chemii (MATLAB)
Ing. Jarom´ır Havlica, Ph.D. ´ ı nad Labem 2014 Ust´
Obsah Program maticov´ e laboratoˇ re Z´apis do Command window . . . . . . . . . . . . . . . . . . . . . . . . Z´apis do M-file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pˇredt´ım, neˇz zaˇcnete . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vektory a matice Vektory . . . . . Matice . . . . . . Cviˇcen´ı . . . . . . Generov´an´ı matic Magick´ y ˇctverec .
3 3 4 5
. . . . .
7 7 7 10 10 10
Line´ arn´ı algebra ˇ sen´ı line´arn´ıch rovnic . . . . . . . . . . . . . . . . . . . . . . . . . . Reˇ Aproximace dat polynomem . . . . . . . . . . . . . . . . . . . . . . . .
11 11 12
Podm´ınka a cyklus if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . while, for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14 14 15
Chyby a chybov´ e hl´ aˇ sky
17
N´ apovˇ eda
19
Vizualizace a grafika
21
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
2
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Program maticov´ e laboratoˇ re Samotn´ y n´avod k syst´emu Matlab uv´ad´ı, tento program je vhodn´ y pro matematick´e v´ ypoˇcty, vytv´aˇren´ı algoritm˚ u, k´odov´an´ı jednoduch´ ych program˚ u, vˇedeckou grafiku nebo tˇreba anal´ yzu dat. P˚ uvodnˇe vznikl pro usnadnˇen´ı pr´ace s maticemi. Skl´ad´a se ze dvou uˇzivatelsk´ ych prostˇred´ı, jimiˇz jsou okno Command window a soubor M-file.
Z´ apis do Command window
Obr´azek 1: Command window Na obr´azku 1 vid´ıme okno Command Window a jeho nejd˚ uleˇzitˇejˇs´ı oblasti: 1. Vytvoˇren´ı nov´eho souboru M-file 2. Kurzor, kam zapisujeme 3. N´apovˇeda 4. Promˇenn´e, kter´e m´a MATLAB zapsan´e v pamˇeti 5. Historie pˇredchoz´ıch pˇr´ıkaz˚ u Toto pˇrostˇred´ı funguje jako velmi sofistikovan´a kalkulaˇcka. Je moˇzn´e zaˇc´ıt zcela jednoduch´ ym pˇr´ıkazem v uˇzivatelsk´em oknˇe: 3
2 + 2 <enter> ans = >> 4
Z´ apis do M-file
Obr´azek 2: M-file Jak je na obr´azku vidˇet, soubor M-file je textov´ y editor, kam p´ıˇseme delˇs´ı k´od, kter´ y lze uloˇzit pro pozdˇejˇs´ı pouˇzit´ı. Jen je tˇreba myslet na to, ˇze pˇred spuˇstˇen´ım je tˇreba ho nejprve uloˇzit (n´azvy je nutn´e volit bez h´aˇck˚ u a ˇca´rek a bez mezer). Na obr´azku 2 jsou uk´az´an´e hlavn´ı funkce editoru: 1. Vytv´aˇr´ı nov´ y soubor M-file 2. Ukl´ad´a souˇcasnou podobu M-file 3. Spust´ı tento soubor a zaˇcne jej poˇc´ıtat Syntax programovac´ıho jazyka je jednoduch´a, nˇekter´e pˇr´ıkazy pˇripom´ınaj´ı k´odov´an´ı v programu C. M-file se pouˇz´ıv´a v pˇr´ıpadˇe sloˇzitˇejˇs´ıho programu, kter´ y si lze pˇripravit k obrazu sv´emu a vyuˇz´ıt jej ke sloˇzitˇejˇs´ım u ´loh´am. Pˇri z´apisu do M-file je tˇreba myslet na z´akladn´ı typografii, napˇr´ıklad pˇri zaznamen´an´ı nezn´am´e plat´ı: ˇcili lze zapsat takov´ yto k´od do souboru M-file, se kter´ ym lze pozdˇeji pracovat:
4
a= 14.7 r = [1 2 3 4] r = [1; 2; 3; 4] c = [1.2 3.2 7.5 5.6]’ b = [1 2 3; 4 5 6;7 8 9] a b c d e f
= = = = = =
definuje skal´ar definuje ˇr´adkov´ y vektor definuje sloupcov´ y vektor definuje tak´e sloupcov´ y vektor (apostrof oznaˇcuje transponov´a definuje 3 x 3 matici, ˇra´dky jsou oddˇeleny stˇredn´ıkem
5 7 a + b c + sin(b) 5 * d exp(-d)
po spuˇstˇen´ı tohoto M-file posl´eze v Command window z´ısk´ame v´ ystup: c = 12 d = 12.6570 e = 63.2849 f = 3.1852e-06 Pokud chcete v k´odu ps´at pozn´amky, ˇci koment´aˇre, staˇc´ı na zaˇca´tek ˇr´adku napsat symbol %, tento ˇra´dek zezelen´a, v k´odu z˚ ustane v´ıdˇet, ale program jej bude ignorovat. ˇa ´dek mi znaˇ ´ celkov´ % Tento r cı y poˇ cet Stˇredn´ık se p´ıˇse za kaˇzd´ y ˇr´adek, kter´ y nen´ı tˇreba vypisovat do okna pˇr´ıkaz˚ u. Je vhodn´e ho pouˇz´ıvat za kaˇzd´ ym ˇra´dkem,se kter´ ym nechceme vizu´alnˇe pracovat. Kdyby se vypisovalo mnoho ˇr´adk˚ u, program by se velmi zpomalil a v´ ysledky by byly nepˇrehledn´e. >> >> >> >> >> >> >>
cd delete diary dir ! quit clc
zmˇen´ı st´avaj´ıc´ı pracovn´ı adres´aˇr smaˇze soubor uloˇz´ı sekci jako textov´ y dokument Seznam adres´aˇre Spust´ı pˇr´ıkaz OS Zavˇre MATLAB smaˇze veˇsker´e pˇredchoz´ı pˇr´ıkazy na ploˇse
Pˇ redt´ım, neˇ z zaˇ cnete Je d˚ uleˇzit´e si uvˇedomit, ˇze program Matlab V´am m˚ uˇze velmi pomoci, ale m˚ uˇze V´as tak´e velmi potr´apit, pokud nebudete rozumˇet jeho syntaxi, nebo jeho matematick´ ych 5
postup˚ um. Vˇzdy je d˚ uleˇzit´e si uvˇedomit, co od programu chcete, jak se toho chyst´ate doc´ılit a hlavnˇe ˇ c´ım ovˇeˇr´ıte dosaˇzen´e v´ ysledky. Pokud budete zn´at odpovˇedi, na tyto ot´azky, pr´ace s Matlabem bude snadnˇejˇs´ı a uˇsetˇr´ı V´am spoustu pr´ace.
6
Vektory a matice Vektory Vektory v ˇr´adku lze napsat takto: >> r = [7 8 9 10 11] Pˇri z´apisu vektoru ve sloupci je tˇreba ps´at mezi ˇcleny stˇredn´ık: >> r = [7; 8; 9; 10; 11] Pro vyps´an´ı jednoho prvku z vektoru lze pouˇz´ıt: >>r(3) ans = 9 Pro vyps´an´ı delˇs´ı ˇca´sti vektoru se d´a napsat: >>r = [1 2 3 4 5 6 7 8 9]; >>sr = r(3:7) sr = 3 4 5 6 7
Matice Matlab poˇz´ıv´a k z´apisu matic soubor ˇc´ısel oddˇelen´e mezerou, teprve prvky oddˇelen´e stˇredn´ıkem se zapisuj´ı do dalˇs´ıho ˇra´dku. >> B = [1 1 1; 2 2 2; 3 3 3] Jej´ı vyps´an´ı v oknˇe Command window pomoc´ı: >>B = 1 1 2 2 3 3
<enter> 1 2 3
7
K psan´ı matic lze tak´e vyuˇz´ıt z´apis vektor˚ u: c = [1 ,2 ,1] b = [3 ,1 ,3] A=[a;b] A= 1 2 1 3 1 3 Pr´ace s matic´ı v oknˇe Command window m˚ uˇze vypadat n´asledovnˇe; napˇr´ıklad sˇc´ıt´an´ı pˇres ˇr´adky: >>sum(B)<enter> ans = 6 6 6 Nebo sˇc´ıt´an´ı pˇres sloupce: >>sum(B’)<enter> ans = 3 6 9 >>sum(B’)’<enter> ans = 3 6 9 Tak´e lze seˇc´ıst vˇsechny prvky v matici: >>sum(sum(B))<enter> ans = 18 Prvek v i-t´e ˇradˇe a j-t´em sloupci je znaˇcen B(i,j). Napˇr´ıklad B(3,2) je ˇc´ıslo ve tˇret´ım ˇra´dku a druh´em sloupci. Pro naˇsi matici B je to ˇc´ıslo 3. Tak´e je moˇzn´e spoˇc´ıtat souˇcet vˇsech prvk˚ u ve tˇret´ım ˇr´adku pomoc´ı: >> B(1,3) + B(2,3) + B(3,3) ans = 9 Nejefektivnˇejˇs´ım zp˚ usobem jak spoˇc´ıtat to sam´e je pouˇz´ıt´ı dvojteˇcky: 8
>> sum(B(:,3)) ans = 9 Matlab toto oznaˇcen´ı ˇcte jako ”seˇcti vˇsechny prvky z ˇr´adku tˇri” Tento pˇr´ıkaz lze zapsat i jinak: >>sum(B(1:end,3)) ans = 9 Toto MATLAB ˇcte ”seˇcti vˇsechny prvky od prvn´ıho do posledn´ıho ˇclenu ze tˇret´ıho ˇra´dku”. V´ yznam je sice stejn´ y jako je uveden v´ yˇse, ale pokud bychom zmˇenili jedniˇcku na dvojku, seˇcte pouze druh´ y a tˇret´ı ˇclen tˇret´ıho ˇr´adku. >>sum(B(2:end,3)) ans = 6 Pro rozmˇer matice pouˇzijeme pˇr´ıkaz size, ˇcili napˇr´ıklad: size(B) ans= 3 3 Z´apis sˇc´ıt´an´ı matic je analogick´ y ke sˇc´ıt´an´ı skal´ar˚ u: A= [1 2; 3 4]; B = [11 12; 13 14]; >> A + B ans = 12 14 16 18 Dalˇs´ı moˇznost´ı pr´ace s maticemi je jejich n´asoben´ı. Matlab pouˇz´ıv´a dva druhy n´asoben´ı. Tˇemi jsou maticov´e n´asoben´ı a n´asoben´ı matic po prvc´ıch. Kaˇzd´a tato operace se zapisuje jinak a tak´e v´ ystupem je jin´ y v´ ysledek. A= [1 2; 3 4]; B = [11 12; 13 14]; Maticov´e n´asoben´ı: >> A * B ans = 37 40 85 92 9
N´asoben´ı po prvc´ıch: >> A .* B ans = 11 24 39 56 Zaj´ımav´ y je i v´ ypoˇcet determinantu matice. V matlabu existuje pˇr´ıkaz det: >> A= [1 1 1; 2 2 2; 3 3 3]; >> det(A) ans= 0
Cviˇ cen´ı Nyn´ı si vytvoˇrte svou vlastn´ı matici, zkuste spoˇc´ıtat determinant pomoc´ı pˇr´ıkladu a pot´e ten sam´ y determinant spoˇctˇete matematicky. (Pouˇzijte Sarrusovo pravidlo: detA = a1,1 a2,2 a3,3 + a1,3 a2,1 a3,2 + a1,2 a2,3 a3,1 − a1,3 a2,2 a3,1 − a1,1 a2,3 a3,2 − a1,2 a2,1 a3,3 )
Generov´ an´ı matic Mimo pˇreps´an´ı matice po jednotliv´ ych ˇclenech, ˇci vektorech lze v Matlabu generovat n´ahodn´e ˇci definovan´e matice jednoduch´ ymi pˇr´ıkazy: A=ones(3) matice 3 × 3 naplnˇen´a jedniˇckami A=zeros(4) matice 4 × 4 naplnˇen´a nulami A=rand(2,4) matice 2 × 4 naplnˇen´a n´ahodn´ ymi ˇc´ısly v intervalu (0,1)
Magick´ yˇ ctverec Tak, jak je Matlab schopen generovat r˚ uzn´e matice, je schopen sestavit i magick´ y ˇctverec (pozn.: ˇctvercov´a matice kde souˇcet ˇr´adk˚ u, sloupc˚ u a diagon´al je stejn´e ˇc´ıslo): X = magic(5) vygeneruje matici o pˇeti ˇra´dc´ıch a ˇsesti sloupc´ıch, kter´a bude magick´ ym ˇcvercem. X = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
10
Line´ arn´ı algebra MATLAB lze pouˇz´ıt napˇr´ıklad k nal´ez´an´ı koˇren˚ u polynom˚ u. Zat´ımco syst´emy v´ ypoˇcetn´ı 2 algebry reprezentuj´ı polynom explicitnˇe jako x − 3x + 2, MATLAB pouˇz´ıv´a vektorov´e koeficienty. V tomto pˇr´ıpadˇe je vektor [1 − 3 2]. K nalezen´ı koˇren˚ u polynomu existuje v MATLABu funkce roots: p=[1 -3 2]; roots(p) ans = 2 1 Koˇreny je tak´e moˇzn´e naj´ıt vloˇzen´ım pˇr´ımo vektoru reprezentuj´ıc´ıho polynom do funkce pro jejich nalezen´ı: roots([1 -3 2]) ans = 2 1
ˇ sen´ı line´ Reˇ arn´ıch rovnic Pro ˇreˇsen´ı line´arn´ıch rovnic se pouˇz´ıv´a pˇr´ıkaz linsolve. Pro jeho pouˇzit´ı si pˇredstavme soustavu line´arn´ıch rovnic: 3x − 2y = 8 x + 5y = 14 coˇz lze pˇrespat do maticov´eho z´apisu: 8 3 −2 x · = 1 5 y 14 V MATLABu tedy pot´e p´ıˇseme:
11
>> A = [3 -2; 1 5] A = 3 -2 1 5 >> b = [8; 14] b = 8 14 >>linsolve(A, b) ans= 4 2 >>x=ans x= 4 2 >>A\b ans= 4 2
Aproximace dat polynomem K prokl´ad´an´ı n´ahodnˇe namˇeˇren´ ych dat pomoc´ı kˇrivky slouˇz´ı v MATLABu funkce polyfit, kter´a pouˇz´ıv´a metodu nejmenˇs´ıch ˇctverc˚ u. p = polyfit(x,y,n), kde: x je vektor hodnot nez´avisle promˇenn´e y je vektor hodnot z´avisle promˇenn´e n je stupeˇ n polynomu Pro pˇr´ıklad ˇreˇsen´ı pouˇzijeme n´ahodn´a data, napˇr.:
12
>> x=[1 1.9 2 2.7 3.5 3.8 5 7]; >> y=[7 8 8.3 8.5 10 10.6 11 12]; >> p=polyfit(x,y,2) p = -0.1002 1.6627 5.2942 Oproti tomu funkce polyval pouˇzije koeficient k vytvoˇren´ı nov´ ych dat: >>ya=polyval(p ,x) kde: p je vektor koeficient˚ u aproximaˇcn´ıho polynomu x je vektor hodnot nez´avisle promˇenn´e pro n´aˇs pˇr´ıpad je to: >> ya=polyval(p,u) ya = 6.8567 8.0917 8.2189 9.0532 9.8864 10.1658 11.1032 12.0242
Obr´azek 3: Data a jejich aproximace parabolou
13
Podm´ınka a cyklus Cykly jsou MATLABovsk´ ymi algoritmy. Cykl˚ um je podobn´a i podm´ınka if (podobn´a napˇr´ıklad Excelovsk´e podm´ınce), nejbˇeˇznˇejˇs´ımi cykly jsou for a while.
if Takov´ yto pˇr´ıkaz pouˇz´ıv´amˇe, pokud je tˇreba nˇejak´ y pˇr´ıkaz vykonat pouze za urˇcit´ ych podm´ınek. Je to zcela jednoduch´ y algoritmus. Jeho syntax vypad´a n´asledovnˇe: if(podm´ ınka) pˇ r´ ıkaz end Takˇze napˇr´ıklad jednoduch´a podm´ınka je porovn´an´ı ˇc´ısel. Konkr´etnˇe sestav´ıme kr´atkou podm´ınku; pokud je ˇc´ıslo menˇs´ı neˇz 10, program nap´ıˇse hl´aˇsku ”toto ˇc´ıslo je menˇs´ı neˇz 10” a=2; if(a<10) disp(’toto ˇ c´ ıslo je menˇ s´ ı neˇ z 10’) end V´ ysledek: toto ˇ c´ ıslo je menˇ s´ ı neˇ z 10 Pokud by ˇc´ıslo bylo vˇetˇs´ı neˇz 10 program nic nenap´ıˇse, ale i toto se d´a upravit a naprogramovat pomoc´ı doplnˇen´ı podm´ınˇen´eho pˇr´ıkazu o poloˇzku else. a=12; if(a<10) disp(’toto ˇ c´ ıslo je menˇ s´ ı neˇ z 10’) elseif(a==10) disp(’toto ˇ c´ ıslo je rovno 10’) else disp(’toto ˇ c´ ıslo je vˇ etˇ s´ ı neˇ z 10’) end 14
V´ ysledek: toto ˇ c´ ıslo je vˇ etˇ s´ ı neˇ z 10
while, for Oba tyto cykly prov´ad´ı nˇejak´ y pˇr´ıkaz opakovanˇe, po nˇekolik pˇresn´ ych krok˚ u, ˇci do chv´ıle, dokud je splnˇen´a nˇejak´a podm´ınka. Jejich syntax je podobn´a podm´ınce if: while podm´ ınka pˇ r´ ıkazy end oproti tomu v cyklu for pˇresnˇe nastav´ım poˇcet krok˚ u, nebo vybereme ˇradu prvk˚ u, kter´ ych se to t´ yk´a. for promˇ enn´ a=v´ yraz pˇ r´ ıkazy end Oba tyto cykyl se daj´ı mezi sebou kombinovat, vkl´adat se jeden do druh´eho a ˇcasto se vyskytuj´ı tak´e v kombinaci s podm´ınkou. Pro n´azornost zkus´ıme ten sam´ y pˇr´ıklad spoˇc´ıtat obˇema zp˚ usoby. Urˇc´ıme si jeden kr´atk´ y vektor a postupnˇe budeme k jeho jednotliv´ ym prvk˚ um pˇriˇc´ıtat ˇc´ıslo 5. Nejprve si vyp´ıˇseme vektor a. Pot´e zad´ame cyklus, kde do promˇenn´e nap´ıˇseme i=1:6, coˇz MATLAB ˇcte, jako udˇelej vˇcechny kroky od jedniˇcky do ˇsestky (ˇsest proto, ˇze vektor obsahuje 6 prvk˚ u). a = [3 2 7 1 4 1]; for i=1:6 a(i)=a(i)+5; end V´ ysledek bude: >> a a = 8 7 12 6 9 6 Ten sam´ y v´ ysledek zkus´ıme pomoc´ı cyklu while. Oproti pˇredchoz´ımu cyklu mus´ıme nejprve nadefinovat i, se kter´ ym budeme pozdˇeji pracovat. V tomto cyklu po pˇr´ıkazu ˇ ık´ame while p´ıˇseme podm´ınku, jak dlouho m´a MATLAB tento cyklus opakovat. R´ mu, aby jej dˇelal tak dlouho, dokud poˇcet krok˚ u bude menˇs´ı, neˇz ˇsest.
15
a = [3 2 7 1 4 1]; i=0; while (i<6) i=i+1; a(i)=a(i)+5; end po vyps´an´ı a n´am MATLAB vyp´ıˇse n´asleduj´ıc´ı v´ ysledek: >> a a = 8 7 12 6 9 6
16
Chyby a chybov´ e hl´ aˇ sky Nejprve je tˇreba si ujasnit, jak Matlab pracuje. Abychom byli schopni napsat spr´avn´ y k´od, je nutn´e pˇrem´ yˇslet podobnˇe jako program. Syntax MATLABu je snadn´a, stejnˇe tak jako pedantsk´a. Pˇri tvoˇren´ı sloˇzitˇejˇs´ıch operac´ı je potˇreba ps´at postupnˇe vˇsechny nezn´am´e a definovat je jeˇstˇe pˇred t´ım, neˇz s nimi zaˇcneme operovat. Pokud tˇreba chceme vytvoˇrit jednoduchou z´avislost y na x, napsali bychom: >> y=2*x; a stiskneme Enter, objev´ı se chybov´a hl´aˇska ??? Undefined function or variable ’x’. Je to proto, ˇze jsme zprvu nedefinovali x, na kter´em je y z´avisl´e. Proto je tˇreba o ˇr´adek v´ yˇse definovat x: >> x=2; >> y=2*x asn= 4 Pokud program pˇrestane pracovat a hl´as´ı chybu, je tˇreba opravit ˇc´ast k´odu, tento proces m˚ uˇze b´ yt n´aroˇcn´ y, proto je lepˇs´ı program rozbˇehnout po mal´ ych ˇca´stech. Ale s chybami a chybov´ ymi hl´aˇskami nen´ı takov´ y probl´em, nen´ı tˇreba z nich m´ıt strach. Vlastnˇe dˇel´an´ım chyb lze dobˇre nacviˇcit logiku Matlabu. Pro kaˇzd´ y pˇr´ıkaz existuje totiˇz jedin´ y moˇzn´ y z´apis. Proto, kdyˇz udˇel´ate chybu, uvid´ıte na doln´ım ˇra´dku okna Command window napˇr´ıklad: >> plocha = pi r2 ??? area = pi r2 Error: Unexpected MATLAB expression. V tomto pˇr´ıpadˇe Matlab pˇredpokl´ad´a, ˇze po tomto pˇr´ıpadˇe ”kr´at”kter´e v Matlabu zanˇc´ıme *
17
pi bude n´asledovat znam´enko, v
>> sin pi ??? Function ’sin’ is not defined for values of class ’char’. V tomto pˇr´ıpadˇe doˇslo k vynech´an´ı z´avorek. MATLAB se tedy k pˇr´ıkazu nechov´a jako k v´ yrazu, n´ ybrˇz jako k ˇretˇezci znak˚ u. kdyˇz nap´ıˇseme e odpovˇed’, kterou n´am MATLAB vr´at´ı, je: ??? Undefined function or variable ’e’. To je proto, ˇze Eulerovo ˇc´ıslo je definovan´e jedinˇe funkc´ı exp. Pˇresto ale m˚ uˇzeme sami pˇriˇradit hodnotu Eulerova ˇc´ısla promˇenn´e e naps´an´ım >> e=exp(1) coˇz je ekvivalentn´ı hodnotˇe e. Odpovˇed’ n´am potvrd´ı toto: e = 2.7183 Vr´at´ıme-li se k matic´ım, je tˇreba pamatovat na rozmˇer matic. Pokud m´ame matici B o tˇrech sloupc´ıch a tˇrech ˇr´adc´ıch a napsali bychom bychom: t = B(4,3) syst´em n´am nap´ıˇse chybu : ??? Index exceeds matrix dimensions. To se stane, protoˇze matice B m´a pouze tˇri sloupce a tˇri ˇra´dky, B (4,3) nen´ı definov´ano. Tak´e je tˇreba d´at si pozor na pˇreklepy, naˇstˇest´ı MATLAB s´am uk´aˇze ˇra´dek, kter´ y v sobˇe chybu obsahuje: >> A(1::, 2) ??? A(1::, 2) | Error: Unexpected MATLAB operator.
18
N´ apovˇ eda Jak bylo uk´az´ano v prvn´ı kapitole, n´apovˇedu nalezneme v prav´em rohu okna Command Window (Obr.:1). Je to u ´ˇcinn´ y pomocn´ık pˇri ˇreˇsen´ı probl´em˚ u a u leckter´ ych pˇr´ıkaz˚ u navrhuje i alternativn´ı postupy ˇci metody. Vˇsechny jsou velmi dobˇre pops´any, proto je dobr´e se s n´apovˇedou velmi d˚ ukladnˇe sezn´amit. Dalˇs´ı v´ yhodou n´apovˇedy jsou i tzv. demos, kter´e ukazuj´ı pˇresn´ y postup cel´eho k´odu pˇri dan´e problematice. Takto vypad´a okno n´apovˇedy po rozkliknut´ı z´aloˇzky Mathematics:
Obr´azek 4: N´apovˇeda - Mathematics Pˇri rozkliknut´ı z´aloˇzky Graphics se pˇred n´ami otevˇre nˇekolikero informac´ı o vytv´aˇren´ı graf˚ u, jejich vlastnost´ı vˇcetnˇe popisk˚ u: Dalˇs´ı moˇznost jak vyhled´avat v n´apovˇedˇe je Index, kde hled´ame pˇr´ıkazy srovnan´e abecednˇe: 19
Obr´azek 5: N´apovˇeda - Graph
Obr´azek 6: N´apovˇeda - Index 20
Vizualizace a Grafika Grafika a generace graf˚ u se zad´avaj´ı pˇr´ıkazem plot, pro zaˇc´atek lze napsat vygenerovat takto jednoduch´ y: >> x = [0:5:100]; >> y = x; >> plot(x, y) do prvn´ıho ˇr´adku zad´ame promˇennou x, ke kter´e do hranat´ ych z´avorek nap´ıˇseme poˇca´teˇcn´ı hodnotu, pot´e dvojteˇcku, n´asleduje krok poˇc´ıt´an´ı, dalˇs´ı dvojteˇcka a nakonec maxim´aln´ı hodnotu. Ve druh´e ˇr´adku nastavujeme parametry z´avisl´e promˇenn´e, ˇcili y. A tˇret´ı ˇra´dek zad´av´a vykreslen´ı grafu, kde je tˇreba dodrˇzet, aby v z´avorce na prvn´ım m´ıstˇe byla nez´avisl´a a za ˇc´arkou z´avisl´a promˇenn´a.
Obr´azek 7: Graf z´avislosti y na x x = [-100:20:100]; y = x2 ; plot(x, y) Popisky osy x a y pˇrip´ıˇse pˇr´ıkaz xlabel a ylabel pod´el pˇr´ısluˇsn´ ych os. Pˇr´ıkaz title pˇrid´av´a n´azev grafu. Pˇr´ıkaz grid on pˇrid´av´a mˇr´ıˇzku do grafu. Pˇr´ıkaz axis equal vygeneruje obr´azek, kde jsou obˇe osy ve stejn´em mˇeˇr´ıtku. Pˇr´ıkaz axis square vygeneruje ˇctvercov´ y obr´azek.
21
x = [0:0.01:10]; y = sin(x); plot(x, y) xlabel(’x’) ylabel(’Sin(x)’) title(’Sin(x) Graph’), grid on axis equal
Obr´azek 8: Graf sin x x = [0 : 0.01: 10]; y = sin(x); g = cos(x); plot(x, y, x, g, ’.-’) legend(’Sin(x)’, ’Cos(x)’)
Barva ˇc´ary grafu m˚ uˇze b´ yt: y ˇzlut´a (yellow) 22
r ˇcerven´a (red) g zelen´a (green) b modr´a (blue) k ˇcern´a (black) ˇ ara, jako takov´a, m˚ C´ uˇze b´ yt: - pln´a -- ˇca´rkovan´a : teˇckovan´a -.- ˇcerchovan´a
. o * d ˆ
Vyznaˇcen´ı bod˚ u na kˇrivce mohou b´ yt: teˇcka krouˇzek hvˇezdiˇcka kosoˇctverec (diamond) troj´ uheln´ık
LineWidth — urˇcuje ˇs´ıˇrku ˇc´ary MarkerEdgeColor — urˇcuje barvu okraje bodu MarkerFaceColor — urˇcuje barvu vnitˇrku bodu MarkerSize — urˇcuje velikost bodu (ms´ı b´ yt vˇetˇs´ı neˇz 0) Pˇr´ıklad pouˇzit´ı tˇechto pˇr´ıkaz˚ u naleznete v n´apovˇedˇe pod Indexem v odkazu plot: Dalˇs´ı dobrou funkc´ı je hold on v pˇr´ıpadˇe, ˇze chceme, aby se n´am vykreslilo v´ıce graf˚ u z´aroveˇ n.
23
Obr´azek 9: Specifikace Grafu
24