Bevezetés a MATLAB használatába Kiegészítő jegyzet Dinamikus rendszerek paramétereinek becslése c. tárgyhoz Magyar Attila Pannon Egyetem Automatizálás Tanszék
Tartalomjegyzék 1. MATLAB............................. 3 2. Alapok............................... 3 2.1. Súgó................................ 3 2.2. Naplózás.............................. 3 3. Változók, értékadás........................ 4 3.1. Skalár változók.......................... 4 3.2. Vektor változók.......................... 5 3.2.1. Indexelés.......................... 6 3.3. Mátrix változók.......................... 6 3.3.1. Speciális mátrixok.................... 7 3.3.2. Indexelés.......................... 8 3.4. Munkatérbeli változók...................... 9 4. Műveletek............................. 10 4.1. Alapvető műveletek........................ 10 4.1.1. Összeadás, kivonás, szummázás............. 10 4.1.2. Szorzás, osztás, inverz.................. 11 4.1.3. Hatványozás........................ 13 4.1.4. Komplex számok..................... 14 4.2. További műveletek........................ 15 4.2.1. Alapvető függvények................... 15 4.2.2. Mátrixfüggvények..................... 17 4.2.3. Polinomok......................... 19 5. Grafikus ábrázolás........................ 22 5.1. Kétdimenziós ábrák........................ 22 5.2. Háromdimenziós ábrák...................... 27 5.3. Nyomtatás fájlba......................... 27 6. Programozás............................ 27 6.1. Szkriptek............................. 28 6.1.1. Egy példa szkript..................... 29 6.2. Függvények............................ 31 6.2.1. Változótípusok...................... 31 6.2.2. Súgó írása......................... 31 6.2.3. Hibakezelés........................ 31 6.2.4. Egy példa függvény.................... 31 6.3. Ciklusok.............................. 31 6.4. Elágazások............................. 31 7. Simulink.............................. 31
1 MATLAB 3 1. MATLAB A Matlab egy sokoldalú matematikai programcsomag, amely a mérnöki számításokat egyszerűsíti le. (A Matlab neve a MATrix és a LABoratory szavakból ered.) A Matlab nyelve egy magas szintű, BASIC-szerű programozási nyelv, éppen ezért könnyű vele dolgozni. Elsősorban numerikus és mátrixalgebrai feladatokra dolgozták ki, kiegészítő csomagokkal (Toolbox-ok: egy bizonyos feladatosztályhoz tartozó parancsok gyűjteménye) azonban rengeteg területen alkalmazható az irányítástechnikától a bioinformatikán át a jelfeldolgozásig. 2. Alapok 2.1. Súgó A help utasítás segítségével az egyes Matlab utasítások leírását és szintaxisát ismerhetjük meg. Használata: >> help utasitas_nev Például a koszinusz függvény esetén: >> help cos [Enter] COS cosine COS(X) is the cosine of the elements of X. A kiválóan használható online súgó a főablakból érhető el egy ikonra kattintva (1. ábra), illetve parancssorból az alábbi utasítással: >> helpdesk 2.2. Naplózás A gyakorlaton való munkát könnyíti meg a Matlab naplózási funkciója: >> diary on >>... >> diary off mely az aktuális könyvtárban egy diary.txt fájlba menti az on és az off között kiadott parancsokat és a kapott eredményeket.
3 Változók, értékadás 4 3. Változók, értékadás 1. ábra. Matlab főablak A változónevek számok és betűk kombinációi, a megkötés csupán annyi, hogy az első karakter nem lehet szám, valamint a változónév maximális hossza 31 karakter lehet. Szerepelhet benne a _ (alulvonás) karakter. 3.1. Skalár változók Az értékadás minden esetben a = használatával történik: >> a=3.45 az a változó értéke legyen 3.45 a= 3.4500 A változó típusának megválasztása automatikus, nem kell foglalkoznunk a megadásával. A fenti esetben valós lesz az a változó. Amennyiben nem akarjuk, hogy az eredmény megjelenjen a parancsablakban, egy pontosvesszővel zárjuk le az utasítást: >> a=3.45; >>
3 Változók, értékadás 5 Komplex számok megadása az alábbi módokon történhet: >> c=1+2*i c= 1.0000 + 2.0000i >> d=2+3*j d= 2.0000 + 3.0000i Komplex számok esetében fontos művelet a konjugálás (a képzetes rész előjele megfordul), erre a operátor használatos: >> c 1.0000-2.0000i 3.2. Vektor változók Veltorok megadása szögletes zárójelek között történik: >> v=[1 2 3] sorvektor v = 1 2 3 illetve: >> w=[1;2;3] oszlopvektor w = 1 2 3 Tehát sorvektorok esetén az egyes elemek közé szóköz (vagy vessző) kerül, oszlopvektor esetén pedig pontosvessző.
3 Változók, értékadás 6 Transzponálás segítségével kaphatunk oszlopvektorból sorvektort (és fordítva), ezt a Matlabban a jelöli: >> w 1 2 3 Amennyiben komplex elemű vektoraink vannak, a operátor értelemszerűen a konjugált transzponáltat jelöli. 3.2.1. Indexelés Vektorok elemeire az alábbi módon hivatkozhatunk: >> w(2) a w vektor 2. eleme 2 Vektor értékadása történhet elemenként is: >> w(3)=2.3+4*i w = 1.0000 2.0000 2.3000 + 4.0000i 3.3. Mátrix változók Mátrixok megadása nagyon hasonló a vektorokéhoz, például a [ 4 5 ] 6 2 5 4 mátrix esetében: >> A=[4 5 6;2 5 4] A=
3 Változók, értékadás 7 4 5 6 2 5 4 A transzponálás hasonlóan működik, mint a vektoros esetben. 3.3.1. Speciális mátrixok Vannak speciális mátrixok, amelyeket az egyszerűség kedvéért külön utasítással lehet létrehozni: >> eye(4) 4 4-es egységmátrix 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 >> zeros(3,2) 3 2-es nullmátrix 0 0 0 0 0 0 >> ones(3,2) 3 2-es mátrix csupa egyesekkel 1 1 1 1 1 1 >> rand(2,3) 2 3-as véletlen mátrix, aminek az elemei a [0, 1] intervallumon egyenletes eloszlásúak 0.9501 0.6068 0.8913 0.2311 0.4860 0.7621
3 Változók, értékadás 8 >> randn(2,3) 2 3-as véletlen mátrix, aminek az elemei 0 várhatóértékű és 1 szórású normális eloszlásúak 1.0668-0.0956 0.2944 0.0593-0.8323-1.3362 A véletlenszám generálás természetesen skalárokra is működik: s=randn s = 0.7143 3.3.2. Indexelés A mátrixok elemeire, soraira, oszlopaira, illetve részmátrixaira a vektoroknál leírt módszer általánosításával hivatkozhatunk: >> A(1,2) az A mátrix 1, 2 indexű eleme 5 Egész sorra való hivatkozás: >> A(2,:) az A mátrix második sora 2 5 4 Oszlopra való hivatkozás: >> A(:,1) az A mátrix első oszlopa 4 2 Részmátrixra való hivatkozás:
3 Változók, értékadás 9 >> D=rand(5,5) legyen D egy 5 5-ös véletlen mátrix >> D = 0.4565 0.7919 0.9355 0.3529 0.1987 0.0185 0.9218 0.9169 0.8132 0.6038 0.8214 0.7382 0.4103 0.0099 0.2722 0.4447 0.1763 0.8936 0.1389 0.1988 0.6154 0.4057 0.0579 0.2028 0.0153 >> D(2:4,1:2) a 2 4 sor és az első kettő oszlop elemei 0.0185 0.9218 0.8214 0.7382 0.4447 0.1763 Egy mátrix (vagy vektor, vagy skalár) méretének lekérdezése a size utasítás segítségével történik: >> size(a) 2 3 Amennyiben az A mátrix esetében csak a sorok, vagy csak az oszlopok számára vagyunk kíváncsiak, a size(a,1) vagy a size(a,2) utasítás használható. 3.4. Munkatérbeli változók Ha kíváncsiak vagyunk az aktuálisan használt változónevekre, illetve a változók méretére és típusára, akkor a legegyszerűbb a Parancsablak (Command window) bal oldalán az Aktuális könyvtár (Current directory) helyett a Munkatér (Workspace) tabot kiválasztani (2. ábra). A Parancsablakban a whos utasítással ugyanez az információ válik elérhetővé.
4 Műveletek 10 2. ábra. Munkatérbeli változók megjelenítése 4. Műveletek 4.1. Alapvető műveletek 4.1.1. Összeadás, kivonás, szummázás Skalárokon triviális, mátrixok és vektorok esetén vigyázni kell, hogy az operandusok méretei megegyezzenek. Vektorokon (v sorvektor, w pedig oszlopvektor): >> v-w??? Error using ==> - Matrix dimensions must agree. >> v-w 0 0 0.7000 + 4.0000i
4 Műveletek 11 Mátrixokon: >> A=[2 2;3 3]; >> B=[1 2 4;3 4 5]; >> A+B??? Error using ==> + Matrix dimensions must agree. >> B=[1 2;3 4]; >> A+B 3 4 6 7 Szummázás: egy vektor elemeit adja össze, illetve mátrixok esetén az oszlopok elemeinek összegeit tartalmazó sorvektor az eredmény. >> sum(b) 4 6 >> sum(sum(b)) 10 4.1.2. Szorzás, osztás, inverz A szorzás és az osztás skalárokra triviális, mátrixok esetén a méreteknek stimmelniük kell. Skalárokra az inverz a reciprokkal egyezik meg, mátrixoknál van jelentősége. Vektorok szorzása (v = [1, 2, 3], w = [1, 2, 2.3 + 4i] T, a = 3.45): >> w*v 1.0000 2.0000 3.0000 2.0000 4.0000 6.0000
4 Műveletek 12 >> v*w 2.3000 + 4.0000i 4.6000 + 8.0000i 6.9000 +12.0000i 11.9000 +12.0000i >> a*v 3.4500 6.9000 10.3500 Mátrixok szorzása (v = [1, 2, 3], a = 3.45): >> A=rand(3,4); >> B=randn(4,2); >> A*B 2.3917-1.8969 0.6315-1.2047 2.3585-2.5930 >> B*A??? Error using ==> * Inner matrix dimensions must agree. >> v*a >> a*a 4.4324 3.8420 2.9469 2.9212 2.5764 1.6077 1.8118 2.8915 1.5356 1.4443 0.6991 0.0678 3.2148 2.9195 2.3189 2.3504
4 Műveletek 13 A mátrixok invertálását elvégző utasítás az inv(): >> D=rand(3,3) D = 0.3795 0.7095 0.1897 0.8318 0.4289 0.1934 0.5028 0.3046 0.6822 >> inv(d) -0.9828 1.7927-0.2351 1.9776-0.6878-0.3548-0.1587-1.0142 1.7974 >> D*inv(D) 1.0000 0.0000 0 0.0000 1.0000 0-0.0000 0 1.0000 4.1.3. Hatványozás A hatványozást megvalósító Matlab operátor a ^, mind skalárokra, mind pedig mátrixokra értelmezve van. Pl.: >> A=2*ones(3) A = 2 2 2 2 2 2 2 2 2 >> A^2 (A 2 = A A, a mátrix szorzás szabályai szerint)
4 Műveletek 14 12 12 12 12 12 12 12 12 12 4.1.4. Komplex számok Komplex számoknak a kanonikus (z = a + bi), illetve exponenciális alakját (z = re iϕ ) használhatjuk. Megjegyzés: Az exponenciális alak trigonometrikus ekvivalense z = r(cos(ϕ)+ i sin(ϕ)). Komplex számok képzetes részének megadása az i és a j betű segítségével történik, éppen ezért ezeket csak olyan esetekben használjuk változóként, amikor nem komplex számokkal dolgozunk! >> z=3+4*j komplex szám megadása z = 3.0000 + 4.0000i A valósrészt visszaadó utasítás: >> real(z) 3 A képzetes részt visszaadó utasítás: >> imag(z) 4 Átalakítás exponenciális alakra: >> angle(z) z fázisszögének meghatározása
4 Műveletek 15 0.9273 az eredmény radiánban ( π és π közötti érték) >> abs(z) z abszolútértékének (hosszának) meghatározása 5 Komplex szám megadható közvetlenül exponenciális alakban is: >> 3*exp(i*pi) -3.0000 + 0.0000i A komplex konjugált meghatározására a korábban megismert operátor mellett a conj() utasítás is használható: >> conj(z) 3.0000-4.0000i Az olyan műveleteknél, melyek komplex számok esetében több eredményt is adhatnak, (eml: egy komplex számnak n db n-edik gyöke van, vagy komplex logaritmus) Matlabban mindig csak egy eredményt kapunk. 4.2. További műveletek 4.2.1. Alapvető függvények Az alábbiakban csak felsorolásszerűen, példa nélkül adjuk meg a Matlabban elérhető alapvető matematikai függvényeket. A help(utasitasnev) utasítással egy rövid súgót kapunk a parancsablakba, amely részletezi a kérdéses utasítás működését (milyen összefüggést valósít meg), illetve szintaxisát. Trigonometrikus függvények.
4 Műveletek 16 acos acosh acot acoth asin asinh atan atanh cos cosh cot coth sin sinh tan tanh arkusz koszinusz arkusz koszinusz hiperbolikusz Arkusz kotangens Arkusz kotangens hiperbolikusz Arkusz szinusz Arkusz szinusz hiperbolikusz Arkusz tangens Arkusz tangens hiperbolikusz Koszinusz Koszinusz hiperbolikusz Kotangens Kotengens hiperbolikusz Szinusz Szinusz hiperbolikusz Tangens Tangens hiperbolikusz Exponenciális és logaritmus függvények. exp Exponenciális log Természetes alapú logaritmus (ln) log2 Kettesalapú logaritmus log10 Tizesalapú logaritmus sqrt Négyzetgyök Kerekítés és maradékos osztás. fix Kerekítés 0 felé floor Kerekítés felé ceil Kerekítés + felé round Kerekítés a legközelebbi egész felé mod Modulo osztás rem Osztás utáni maradék sign Előjelfüggvény Diszkrét matematika. factor factorial gcd lcm nchoosek perms Prímtényezős felbontás Faktoriális Legnagyobb közös osztó Legkisebb közös többszörös Összes lehetséges kombináció - ( ) n k Összes lehetséges permutáció
4 Műveletek 17 4.2.2. Mátrixfüggvények A Matlabban rengeteg lineáris algebrai és mátrixanalízisbeli függvény segíti a munkát, ezek közül csak a fontosabbakat soroljuk fel. Mátrix determinánsa: det >> det(a) Visszatérési értéke 0, ha a mátrix szinguláris, azaz nem invertálható. Mátrix rangja: rank >> rank(a) A mátrix lineárisan független sorainak, vagy oszlopainak számát adja meg. Mátrix (vagy vektor) norma: norm >> norm(a) Mátrix, vagy vektor l 2 normáját adja vissza. Mátrix esetén ez a legnagyobb szingulárisérték, vektor esetében pedig a vektor hossza. Mátrix nyoma: trace >> trace(a) A mátrix főátlójában álló elemek összege. Mátrixinverz: inv >> inv(a) Az A A 1 = I egyenletet kielégítő mátrixot adja vissza, ha létezik. Sajátérték, sajátvektor: eig Az Av = λv egyenletet kielégítő (λ, v) sajátvektor-sajátérték párok meghatározására. Pl: >> A=rand(3); >> [s_vektor,s_ertek]=eig(a) s_vektor = 0.5396 0.7050 0.7050 0.6639-0.0492 + 0.3569i -0.0492-0.3569i 0.5178-0.5466-0.2728i -0.5466 + 0.2728i s_ertek = 1.9681 0 0 0 0.0658 + 0.3097i 0 0 0 0.0658-0.3097i
4 Műveletek 18 A példában az s_ertek nevű diagonális mátrix tartalmazza főátlójában az A sajátértékeit, az egyes sajátértékekhez tartozó sajátvektorok pedig az s_vektor mátrix megfelelő oszlopai. Mátrix exponenciális: expm >> expm(a) Az exponenciális függvény végtelen sorba fejtve általánosítható mátrixokra is: exp(a) = Mátrix logaritmus: logm >> logm(a) A mátrix exponenciális függvény inverze. Mátrix négyzetgyök: sqrtm >> sqrtm(a) A az a mátrix, amely kielégíti az A A = A egyenletet. Elemenkénti műveletek: Mátrixokra és vektorokra egyaránt érvényes, hogy a művelet operátora elé kitett pont (.) az eredeti művelet elemenkénti változatát hajtja végre, pl: >> X=2*ones(3,3) X = >> X^2 >> X.^2 2 2 2 2 2 2 2 2 2 12 12 12 12 12 12 12 12 12 k=0 A k k!
4 Műveletek 19 4 4 4 4 4 4 4 4 4 Megjegyzés: Ha a Matlabban egy, a matematikából skalárváltozósnak megismert függvényt (pl. sin, exp, stb.) hívunk meg mátrix, vagy vektor argumentummal, akkor az egyes elemek függvényértékeit tartalmazó ugyanolyan méretű mátrixot, vagy vektort kapjuk vissza, pl: >> Y=ones(2,3); >> exp(y) 2.7183 2.7183 2.7183 2.7183 2.7183 2.7183 4.2.3. Polinomok A polinomokat az teszi nagyon vonzóvá, hogy bármely műveletet könnyedén el lehet rajtuk végezni - még a differenciálást, és az integrálást is. A Matlab a polinomokat vektorokként tárolja, a vektor elemei pedig a polinom együtthatói. Ezt a függvénycsaládot a Matlab analitikus úton tudja differenciálni és integrálni (A Symbolic Math Toolbox használatával többféle analitikus, illetve szimbolikus számolás is elvégezhető - nem csak polinomokra). A fontosabb utasításokat az alábbiakban részletezzük. Polinom definiálása: poly Annak a polinomnak az együtthatóit adja vissza sorvektorként, amelynek gyökei az argumentumként megadott vektor elemei. >> r=[1 2 3]; az r vektor tartalmazza a polinom gyökeit >> p=poly(r) a polinom megadása a gyökeivel történik, azaz p = p(x) = (x 1)(x 2)(x 3)
4 Műveletek 20 1-6 11-6 az első helyen a független változó legmagasabb kitevőjű hatványának együtthatója áll, azaz p(x) = x 3 6x 2 + 11x 6. Polinom kiértékelése: polyval >> x=4; >> polyval(p,x) a p polinomot szeretnénk kiértékelni x-ben. 6 p(4) = 6 a kiértékelés elvégezhető vektorosan is: >> t=rand(1,5); öt véletlenszerű pontban szeretnénk kiértékelni p-t. >> polyval(p,t) -1.8589-0.8588-2.3070-3.1777-4.1228 Polinomok szorzása: conv Az argumentumban megadott polinomok összeszorzásával kapott polinom együtthatóit tartalmazó sorvektorral tér vissza. Ez az utasítás gyakorlatilag két vektort konvolvál össze, innen a neve. Példa: szorozzuk össze a p(x) = (x 1)(x 2), és a q(x) = (x 2)(x 3) polinomokat: >> p=poly([1 2]); >> q=poly([2 3]); >> conv(p,q) 1-8 23-28 12 p(x)q(x) = x 4 8x 3 + 23x 2 28x + 12 Polinomosztás: deconv Az utasítás hívásánál figyelni kell arra, hogy ennél a műveletnél képződhet maradék is. Az eredménynek két változót kell biztosítani: [s,r]=deconv(q,p), azaz q(x)-et elosztva p(x)-szel a hányados s(x), a maradék pedig r(x),
4 Műveletek 21 és q(x) = s(x)p(x) + r(x). >> p=poly([1 2]); >> q=poly([1 2 3]); >> [s,r]=deconv(q,p) s = r = 1-3 0 0 0 0 maradék nélkül el tudtuk osztani >> w=poly([5 6 3]); >> [s,r]=deconv(q,p) s = r = 1-11 0 0 28-68 itt már van maradék is Polinom deriváltja: polyder Például w(x) = (x 5)(x 6)(x 3) = x 3 14x 2 + 63x 90 deriváltja >> polyder(w) 3-28 63 dw(x) dx = 3x 2 28x + 63 Polinom gyökei: roots Az argumentumként megadott polinom gyökeit adja vissza egy oszlopvektorban. >> roots(w)
5 Grafikus ábrázolás 22 6.0000 5.0000 3.0000 5. Grafikus ábrázolás Az adatok kirajzoltatására számos lehetőség van Matlabban, itt csak a legegyszerűbbeket mutatjuk be. 5.1. Kétdimenziós ábrák A legtöbbet használt parancs, amivel kétdimenziós ábrákat hozhatunk létre, a plot, de a kirajzolni kívánt adatok jellegétől függően más utasításokra is szükség lehet. A plot egy univerzális parancs, amellyel elsősorban folytonos adatsort tudunk ábrázolni, ha azonban diszkrét adatsorral van dolgunk, előnyösebb a stem utasítás, amellyel impulzussorozatként ábrázolhatjuk az adatainkat. Hasonló esetben használható a stairs, amely nulladrendű tartószervvel mintavételezett jelekként ábrázolja adatainkat. Kétváltozós függvényeket a contour utasítás segítségével szintvonalakkal ábrázolhatunk két dimenzióban. A Matlab a grafikai műveleteknél is mátrixokkal és vektorokkal dolgozik, ezért ha jó minőségű ábrákat szeretnénk készíteni, az ábrázolandó függvény értelmezési tartományának megfelelő finomságú felosztását kell elkészíteni. A feleslegesen finom felosztás kerülendő, mert idő és számításigényes. Felosztás adott lépésközzel Az indexelésnél már megismert : operátorral történik. >> s=3:7 az s vektor fogja tartalmazni a [3 7] intervallum 1 lépésközű felosztását s = 3 4 5 6 7 Ha finomabb felosztást szeretnénk előállítani, nem árt, ha változtatni tudjuk a lépésközt az alábbi módon: >> t=-pi:pi/2:pi a [ π π] intervallum felosztása π 2 lépésközzel. Szintaxis: also_hatar:lepeskoz:felso_hatar t = -3.1416-1.5708 0 1.5708 3.1416
5 Grafikus ábrázolás 23 Felosztás adott számú részintervallumra: Amíg az előbbiekben a felosztás lépésközét adhattuk meg, addig ebben az esetben az intervallum határai mellett azt a számot adjuk meg, ahány részre osztani szeretnénk az intervallumot: >> r=linspace(1,3,5) Szintaxis: linspace(also,felso,hanyfele) r = 1.0000 1.5000 2.0000 2.5000 3.0000 plot utasítás: Nagyon általános parancs, sokféle opcionális argumentummal hívható, itt csak a leggyakrabban használt kombinációkat mutatjuk be. >> t=-pi:pi/10:pi; Felosztás >> plot(t,sin(t)) kirajzoltatás: első argumentum a felosztást tartalmazó vektor, második a függvény értékeit tartalmazza a felosztási pontokban (itt a sin utasítás egy t-vel azonos méretű vektorral tér vissza, melynek elemei t komponenseinek szinuszai) Az utasítás eredményéül kapott ablak a 3. ábrán látható. 3. ábra. A plot utasítás eredménye Amennyiben bele szeretnénk szólni az ábra színébe, a vonalstílusba és a vektorpontokba rajzolt szimbólumokba, egy harmadik argumentumot
5 Grafikus ábrázolás 24 is meg kell adni a plot parancsnak, ami egy speciális sztring, aminek az első eleme a vonalstílust határozza meg: Vonaltípus Szimbólum - Folytonos vonal + Plusz jel -- Szaggatott vonal o Kör : Pontvonal * Csillag -. Szaggatott pontvonal. Pont Színek x Kereszt r Piros s Négyzet g Zöld d Rombusz b Kék ^ Háromszög c Cián v Háromszög m Magenta > Háromszög y Sárga < Háromszög k Fekete p Ötágú csillag w Fehér h Hatágú csillag Például egy véletlen számsorozat ábrázolása magenta színű pontvonallal, a pontokban hatágú csillagokkal (4. ábra): >> t=linspace(1,100,30); >> y=randn(size(t)); >> plot(t,y, :mh ) stem utasítás: Olyankor használjuk, ha az ábrán ki szeretnénk hangsúlyozni az adatsor diszkrét voltát (5. ábra). Szintaxisa hasonló a plot utasításéhoz. Például: >> t=-pi:pi/10:pi; >> stem(t,sin(t)) stairs utasítás: Nulladrendű tartószervvel mintavételezett rendszerek jeleinek ábrázolásához (6. ábra). Szintaxisa hasonló a plot utasításéhoz. >> t=-pi:pi/10:pi; >> stairs(t,sin(t), r-- ) Több ábra egymáson: hold Ha kettő, vagy több ábrát szeretnénk ugyanabban az ablakban ábrázolni, akkor a hold utasítást használjuk:
5 Grafikus ábrázolás 25 4. ábra. A plot utasítás eredménye a megadott vonaltípussal, színnel, és szimbólummal 5. ábra. A stem utasítás eredménye >> plot(...); Első plot utasítás >> hold on A hold funkció bekapcsolva >> plot(...) A további ábrák a korábbival egy ablakba kerülnek. A hold funkció kikapcsolható a hold off utasítással.
5 Grafikus ábrázolás 26 6. ábra. A stairs utasítás eredménye Rácsozat: grid Használata hasonló a hold-hoz, rácsozatot jelenít meg az aktuális ábrán. Képmagyarázat: legend Ha egy ablakban ábrázoltunk több adatot, ajánlatos kitenni egy jelmagyarázatot, amely megkönnyíti az olvasást (7. ábra). Az utasítás argumentumai a megyarázatban megjelenítendő sztringek, az ábrák sorrendjében, pl: t=pi/2:pi/10:4*pi; plot(t,exp(-0.5*t).*sin(t)) hold on grid on plot(t,exp(-0.5*t), :r ) legend( exp*sin, exp ) Egyéb ábrafeliratok: Az ábra címét a >> title( abra_cim ) utasítással adhatjuk meg, a tengelyek feliratait pedig az >> xlabel( x_tengely_felirat ) >> ylabel( y_tengely_felirat ) >> zlabel( z_tengely_felirat ) (3D esetben z-tengely is van) utasításokkal változtathatjuk meg.
6 Programozás 27 7. ábra. A legend, hold, és a grid utasítás haználata 5.2. Háromdimenziós ábrák 5.3. Nyomtatás fájlba Hasznos lehet még az ábrák fájlba való exportálása. Erre a nem túl elegáns [Alt]+[PrintScreen] kombináción kívül két lehetőség is van a Matlabban. Az egyik az ábrát tartalmazó Figure ablak File Export menüjén keresztül, a másik pedig a parancssoros megoldás: >> print -depsc fajlnev A fajlnev nevű színes eps fájlba menti az aktuális grafikus ablak ábráját. >> print -djpeg90 fajlnev A fajlnev nevű, 90%-os minőségű jpeg fájlba menti az aktuális grafikus ablak ábráját. >> print -dtiff fajlnev A fajlnev nevű színes tiff fájlba menti az aktuális grafikus ablak ábráját. >> print -dpng fajlnev A fajlnev nevű színes png fájlba menti az aktuális grafikus ablak ábráját. 6. Programozás Ha egy bonyolultabb feladattal szembesülünk, kényelmesebben megoldható egy szkript segítségével, ami nem más, mint kötegbe szedett Matlab utasítások összessége. Ha olyan a feladat, hogy többször kell elvégezni különböző adatokon, egy függvény írása ajánlatosabb, mivel ennek argumentu adható
6 Programozás 28 át híváskor. Szkriptekben és függvényekben is megkönnyíti a feladat algoritmizálását a ciklusok és feltételvizsgálatok használata. A Matlab programnyelve hasonló a Basic-hez, elsajátítása egyszerű. A megírt szkripteket és függvényeket egy.m kiterjesztésű ún. M-fájlba mentjük. Új M-fájlokat a Matlab főablak File New menüpontjában hozhatunk létre, létezőket pedig a File Open menüpontban nyithatunk meg. Az M-fájlok szerkesztése történhet tetszőleges szövegszerkesztővel, de a Matlab beépített Editor-ja kényelmesebbé teszi a munkát (8. ábra). 8. ábra. A Matlab Editor ablaka Szkriptekben és függvényekben egy adott sorban a % jelet követő szövegrész megjegyzésnek minősül, azt a Matlab nem értelmezi utasításként. Több sornyi kódrészletet a 9. ábrán látható módon lehet egyszerűen kommentezni. 6.1. Szkriptek A legegyszerűbb M-fájl fajta, sem bemeneti, sem kimeneti argumentumai nincsenek. A szkriptek látják a Munkatér összes változóját, és módosítani is tudják azokat, illetve új változókat hozhatnak létre a Munkatérben.
6 Programozás 29 9. ábra. Többsoros kódrészlet kommentezése Akkor hasznosak, ha rendszeresen több Matlab utasítást akarunk egymásután végrehajtani. A szkript végrehajtása a fájl nevének (kiterjesztés nélkül) begépelésével történik. 6.1.1. Egy példa szkript Az alábbi szkript egy 5 5-ös véletlen mátrx sajátértékeit rajzolja ki a komplex számsíkon (10. ábra), feliratozza az ábrát, végül pedig a sajat.eps nevű eps fájlba exportálja: % Egy véletlen matrix sajatertekeinek kirajzoltatasa A=randn(5,5); [u,v]=eig(a); valosresz=real(diag(v)); kepzetesresz=imag(diag(v)); plot(valosresz,kepzetesresz, ro ) xlabel( Re ) ylabel( Im ) grid on
6 Programozás 30 title( Sajátértékek ) print -depsc sajat A szkript hívása pedig a Parancsablakban az alábbi módon: >> sajat 10. ábra. A sajat.m szkript által kirajzolt ábra
7 Simulink 31 6.2. Függvények 6.2.1. Változótípusok 6.2.2. Súgó írása 6.2.3. Hibakezelés 6.2.4. Egy példa függvény 6.3. Ciklusok 6.4. Elágazások 7. Simulink