1. gyakorlat I. Ismerkedjünk meg a Matlab programcsomaggal! A MATLAB interaktív programcsomag, amely tudományos, mérnöki és matematikai feladatok megoldéséra egyaránt jól alkalmazható. Az alapcsomag továbbiakkal (Toolboxokkal) kiegészítve számos alkalmazási területen számítások elősegítésére készült. Gyártója a The MathWorks Inc. (USA, www.mathworks.com). Nevét a MATrix LABoratory szóösszetétel rövidítéséből kapta, ami utal arra, hogy a legtöbb műveletet, feladatot mátrix formájában rögzített adatokkal végzi. Eredetileg FORTRAN-ban készült, később teljes egészében átíródott C nyelvre és bővíthető a modern programozási környezetben megírt modulokkal, azaz "nyitott". 1. feladat Nyissuk meg a MATLAB csomagot! Elemezzük az ablakokat! (menüsor, command window, command history, workspace) A MATLAB alapcsomagnak is van programozási nyelve, amely a matematikai műveletek, függvények, relációk értelmezéséből adódik. Parancsvezérelt üzemmódban, vagyis interpreter-ként dolgozik. A parancsokat áttekinthetjük különböző csoportosítások szerint a megnyitott MATLAB csomag Help menüjében. 2. feladat Nyissuk meg a Help menüt! Tanulmányozzuk át a szerkezetét! Írjuk be a paracsablakba: help plot Megtudhatunk mindent a rajzolásról. A csomag további két- és háromdimenziós grafikus megjelenítési módokat biztosít a felhasználó számára, a képek pedig kezelhetően adhatók át más Windows környezetben futó alkalmazások számára. Figyelmeztető hibajelzéseket küld a csomag, és segít a Help menü, ha a parancsokban vagy a számításokban szintaktikai vagy felismerhető szemantikai összeférhetetlenségek vagy hibák vannak. Megjegyzés: Új függvények beépítésére M-file-okat (alapcsomag/alapmenü/file/new/m file) vagy MEXfile-okat használunk. Az M-file-ok *.m kiterjesztésű szövegfájlok, amelyek MATLAB parancsokat vagy egyéb, a felhasználó által definiált függvényeket tartalmazhatnak. A Toolbox-ok ilyen komplex feladat-specifikus kiegészítő programok. A MEX-file-ok Fortranvagy C-nyelvű, MATLAB parancsra lefordított *.exe file-ok, amelyek a továbbiakban úgy viselkednek, mint a MATLAB gyárilag megírt rutinjai. Szőmunkra két Toolbox lesz fontos: a
Fuzzy Toolbox (meghívása a paracsablakból: fuzzy) illetve a SIMULINK (meghívása a parancsablakból: simulink). A MATLAB programcsomag hazai forgalmazója a Gamax kft. (http://matlab.gamax.hu), honlapjukon ingyenes "webinárok", azaz webes szemináriumok is elérhetőek! II. Ismerkedjünk meg a Matlab változókkal A MATLAB elsősorban mátrix műveletekre specializált szoftver. Az adatokat mátrix formában kezeli, ami részben előny, másrészt egyszerű változók esetében zavarú lehet. Adjunk meg ezért most néhány változót, és azonnal ellenőrizzük a dimenziójukat! Megjegyzés: a MATLAB case sensitive! A változókat egyszerű megnevezéssel és/vagy érték-hozzárendeléssel adjuk meg. Az így meghatározott változók (és a valós hozzárendelt értékük) a továbbiakban bármilyen matematikai összefüggésben szerepelhetnek. Az egyszer meghatározott (nevesített) változók a munkafolyamat végéig (a "quit", az "exit" vagy a "clear" utasításokig) rezidensen maradnak a MATLAB munkaterületen, tehát bármikor előhívhatók a munkafelületen (workspace, ami menthető, és vele mentődnek a változóértékek is, ha szükség van rá!). A munkafolyamat során bármikor új változók is meghatározhatunk, a hozzájuk tartozó értékeket (mátrixtömböket) pedig menthetjük lemezre ("save" parancs) vagy előhívhatjuk azokat( a "load" parancs segítségével). Adott MATLAB utasításokat, parancsokat mindig az ENTER billentyű lenyomásával érvényesítünk, az előző parancs, parancsok visszahívhatók a ↑ gombbal. Hosszú, összetett munkafolyamat vagy kiterjedt számítások során sok változónév összegyűlhet. A MATLAB listát vezet a változókról, amelyet a "who" paranccsal lehet lekérdezni. A változók dimenzióját a size(változónév) paranccsal tudjuk ellenőrizni. Fontos, hogy következetes, logikus jelölési módot használjunk, mert még így is megtörténhet, hogy nehezen tudjuk utólag azonosítani az egyes változókat. A MATLAB utasításokat soronként adjuk meg, vagy egy sorban egymás után pontosvesszővel (;) elválasztva őket. A ;-nek van még más szerepe is: a változóérték megadásakor nem írja vissza a csomag az értékeket, ha a sort ezzel a jellel zárjuk, de minden értékét kiírja a tömbnek, ha a ; nincs ott! Az adott utasítás(ok) az ENTER billentyű megnyomásának hatására kerül(nek) végrehajtásra. Célszerű egy hosszabb feladathoz tartozó parancssorokat előbb egy M-file formátumban megírni (pl. a MATLAB saját szövegszerkesztőjével), azt elmenteni saját munkaterületünkre, majd utána az adott M-file-t meghívással futtatni (az üres parancssorba az M-file nevét kell csak beírni). Fontos: az utasítássor szerkezetében a hozzárendelés (= egyenlőségjel) jelének bal oldalán általában a kiszámításra, megadásra kerülő változó neve szerepel, míg jobb oldalán az hozzárendelés leírás. Ha a baloldali változónevet nem adjuk meg, akkor a hozzárendelés eredménye az ans nevű mátrixban helyezi el, amit ezen a néven hívhatunk, amíg felül nem írj azt egy hasonló számítás.
A MATLAB a változók értékei az alábbi alapvető műveletek nyomán változtathatja: a) aritmetikai, algebrai, logikai és relációs műveletek; b) MATLAB matematikai függvényszámítások; c) speciális MATLAB utasítások; d) M-file típusú meghívások; e) MEX-file típusú meghívások alapján. 3. feladat 3.a. Adjunk egy változónak értéket! >> a=3 a= 3 >> a=3; 3.b. Adjunk egy sorozatot! Meg kell adni a sorozat első és utolsó elemét, és a sorozat elemei közötti lépésközt a következő formátumban: x=kezdőérték:lépésköz:végérték; Például: x=150:0.1:190; (ahol a kezdőérték=150; a lépésköz=0.1; a végérték=190; az elemek az x tömbben tárolódnak, de nem íródnak ki a képernyőre a ; miatt) Az utasítás végén a pontosvessző biztosítja, hogy csak létrehozza a sorozatot, de ne írja ki képernyőre. Az utasítás végéről a pontosvesszőt elhagyva a keletkezett tömbelemek láthatóak lesznek.
I.3. A MATLAB programozási alapjai I.3.1. Mátrixok előállítása
I.3.1.1. Mátrixok bevitele billentyűzetről A. Mátrixok közvetlen megadása
a) Gépeljük be a következőket: a=[-1,0 0;2 sqrt(25),0;1 3*4,-10]
és nyomjuk meg az ENTER billentyűt. A válasz a következő:
a = -1
0
0
2
5
0
1
12
-10
Vegyük észre, hogy a mátrix "neve" lehet kisbetű is, és hogy az elemeket szögletes zárójelek közé helyezzük. Az egyes elemeket a ","-vessző vagy a " "-szóköz, míg a sorokat a ";"pontosvessző választja el. Mátrix elem lehet bármilyen kiértékelhető matematikai kifejezés (lásd a fenti példát!). b) Adott mátrix elemei, sorai, oszlopai, részmátrixai egyszerű hivatkozással érhetők el. Például, ha azt gépeljük be, hogy: a(3,2)
akkor a számítógép válasza: ans = 12
vagyis az "a" mátrix harmadik sorának második eleme. Az eredményt az "ans" név alatt kaptuk meg. Ha az "a" mátrix második sora érdekel csak, akkor az a2=a(2,:)
beírására az: a2 = 2
5
0
részmátrixot kapjuk. Vegyük észre a ":"-kettőspont szerepét a felírásban!
Case sensitive Előzőleg használt parancsok előhívása: ↑ Parancs leírásának megtekintése: help parancsnév (pl.: help for)
Sorozat létrehozása: Meg kell adni a sorozat kezdőértékét, végértékét és a sorozat elemei közötti lépésközt a következő formátumban: x=kezdőérték:lépésköz:végérték;
Konkrét értékeket behelyettesítve: x=150:0.1:190; (ahol a kezdőérték=150; a lépésköz=0.1; a végérték=190; az elemek az x tömbben jönnek létre) Az utasítás végén a pontosvessző biztosítja, hogy csak létrehozza a sorozatot, de ne írja ki képernyőre. Az utasítás végéről a pontosvesszőt elhagyva a keletkezett tömbelemek láthatóak lesznek.
Függvény definiálása: Egy a fenti x értékekhez tartozó lehetséges tagsági függvény megadása: x−a ,0 ha d ≠ 0 max1 − A( x) = d λ ha d = 0 a Konkrét értékeket behelyettesítve: y=max((1-abs(x-170)/10),0);
(ahol a=170; d=10)
Függvény definiálásánál is érvényes a pontosvesszőre vonatkozó szabály. Amennyiben pontosvesszővel zárul az utasítás, csak definiálja a függvényt, de nem jeleníti meg az értékeket, a pontosvessző elhagyásakor pedig kiíródnak a függvény értékek.
Függvény kirajzolása: A megfelelő (x,y) párok kirajzolása a plot paranccsal történik: plot(x,y) vagy plot(x,y,’r’) (ahol ’r’ a rajzolás színét adja meg, ebben az esetben piros (red)) melynek eredménye a következő függvény: 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
175
180
185
190
Függvény matematikai leírása: y 0 − y1 (x − x0 ) x0 − x1 ahol (x0,y0) az egyik, (x1,y1) a másik végpontja az egyenesnek y − y0 =
A következő függvény ábrázolásához először a matematikai leírásra van szükség. 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
175
180
185
190
A fenti képletbe helyettesítve a (x0,y0)=(160,0) és az (x1,y1)=(170,1) pontokat, adódik az x=[160,170] közötti egyenes matematikai leírása: y−0 = y=
0 −1 (x − 160) 160 − 170
x − 160 10
A többi x érték esetén a függvény értéke állandó, tehát a tagsági függvény teljes leírása:
0 ha x ≤ 160 ( x − 160 ) A1 ( x) = ha 160 < x < 170 10 1 ha x ≥ 170
Ciklus és elágazás használata: A fenti függvény ábrázolásához az egyes függvény szakaszokat külön kell kezelni x értékétől függően. Először tudni kell, hány elemű a korábban létrehozott x tömb (x=150:0.1:190) Ennek meghatározása a size(x) paranccsal történik, az eredmény 401 (ennyiszer kell a ciklusnak lefutnia).
Az elágazás szintaxisa IF feltétel utasítások ELSEIF feltétel utasítások ELSE utasítások END A for ciklus szintaxisa: FOR i = 1:N FOR j = 1:N utasítások; END END A konkrét értékekkel: FOR i=1:401 IF x(i)<160 y(i)=0; ELSEIF x(i)<170 y(i)=(x(i)-160)/10; ELSE y(i)=1; END END
Két függvény fuzzy metszete (ZADEH): A fenti y függvény és egy z függvény metszetének meghatározása következik, ahol z=max(1-abs(x-160)/5,0); Ahhoz, hogy y és z függvény egyszerre legyen látható, az y kirajzolása után a hold on parancsot kell beírni, ezután lehet kirajzolni a z függvényt. A hold on parancs hatása egészen addig tart, amíg a hold off paranccsal ki nem kapcsoljuk. plot(x,y) hold on plot(x,z,’r’)
Az eredményül kapott ábra: 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
175
180
185
190
160
165
170
175
180
185
190
A metszet zy=min(y,z) A lenti ábrában *-gal jelöljve: plot(x,zy,’*’) 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
Két függvény fuzzy uniója (ZADEH) zymax=max(y,z); Az uniót zölddel jelölve: plot(x,zymax,'g')
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
175
180
185
190
Melléklet: néhány fontosabb, gyakran használt MATLAB parancs és jelentése (a http://ait.iit.uni-miskolc.hu/~ait/segedlet/matlab/matlab-1.htm forrásból)
Általános utasítások demo what listázása diary who listázása load betöltése size clc startup
- bemutató jellegű programok - M-, MAT- és MEX-file-ok
help type
- a "súgó" meghívása - M-file tartalmának kiírása
- a munkaszöveg mentése - munkaterület változóinak
delete clear
- munkaállomány törlése - munkaterület törlése
- munkaterület változóinak
save
- munkaterület változóinak mentése
- mátrix dimenziói - parancsképernyő törlése - M-file végrehajtása indításkor
length more quit
- vektor hossza - ablakos lapozás - program befejezés
I.2.4.3. Algebrai alapműveletek Tömbműveletek + - összeadás - kivonás .* - elemek szerinti szorzás ./ - elemek szerinti osztás .^ - elemek szerinti hatványozás .\ - elemek szerinti baloldali osztás .' - transzponálás
Mátrixműveletek + - összeadás - kivonás * - szorzás / - osztás ^ - hatványozás \ - balról való osztás ' - konjugált transzponálás
I.2.4.4. Relációs és logikai műveletek < <= == & ~
- kisebb - kisebb vagy egyenlő - egyenlő - ÉS - NEGÁCIÓ
> >= ~= | xor
- nagyobb - nagyobb vagy egyenlő - nem egyenlő - VAGY - KIZÁRÓ VAGY
I.2.4.5. Matematikai függvények sin sinh cos cosh tan tanh cot coth sec sech csc csch pow2 exp log10 lcm real angle rem round ceil abs
- színusz - színusz hiperbolikusz - koszínusz - koszínusz hiperbolikusz - tangens - tangens hiperbolikusz - kotangens - kotangens hiperbolikusz - szekáns - szekáns hiperbolikusz - koszekáns - koszekáns hiperbolikusz - exponenciális (2-es alapú) - exponenciális (e-alapú) - logaritmus (10-es alapú) - legkisebb közös többszörös - komplex valós része - komplex fázisszöge - osztás maradék - kerekítés a legközelebbi egészre - kerekítés felfele - abszolút érték
asin asinh acos acosh atan atanh acot acoth asec asech acsc acsch log2 log sqrt gcd imag conj sign fix floor atan2
- arkuszszínusz - arkuszszínusz hiperbolikusz - arkuszkoszinusz - arkuszkoszinusz hiperbolikusz - arkusztangens - arkusztangens hiperbolikusz - arkuszkotangens - arkuszkotangens hiperbolikusz - arkuszszekáns - arkuszszekáns hiperbolikusz - arkuszkoszekáns - arkuszkoszekáns hiperbolikusz - logaritmus (2-es alapú) - logaritmus (e-alapú) - négyzetgyök - legnagyobb közös osztó - komplex képzetes része - komplex konjugált - szignum (előjel) függvény - kerekítés egészre (törtrész nélkül) - kerekítés lefele - arkusztangens (4 negyedes)
rank orth eig poly logm funm dot rsf2csf
- mátrix rangja - mátrix ortonormál bázisa - sajátérték és sajátvektor - gyökökből polinom (sorvektor) - mátrix logaritmus - általános mátrix függvény értéke - vektorok skaláris szorzata - valósból komplex átlós alak
I.2.4.6. Mátrix- és vektorfüggvények det - (négyzetes) mátrix determinánsa norm - mátrix vagy vektor normája inv - (négyzetes) mátrix inverze poly - mátrix karakterisztikus polinomja expm - mátrix exponenciális sqrtm - mátrix négyzetgyök cross - vektorok vektoriális szorzata cdf2rdf - complexből valós átlós alak
I.2.4.7. Adatanalizís utasítások és Fourier transzformációk max -legnagyobb érték mean - átlagérték sum - adatok összege sort - rendezés növekvő sorrendbe cov - kovariancia adatok összege trapz - numerikus integrálás (trapéz módsz.) del2 - diszkrét Laplace filter - elsőfokú szűrő fft - diszkrét Fourier transzformáció fft2 - 2. diszkrét Fourier transzformáció
min median prod std corrcoef diff
- legkisebb érték - középérték - adatok szorzata - standard eltérés - korelációs együtthatók - differenciál és/vagy derivált
gradient filter2 ifft ifft2
- gradiens - másodfokú szűrő - inverz diszkrét Fourier transzf. - 2. inverz diszkrét Fourier transzf.
I.2.4.8. Polinomiális, interpolációs és egyéb függvények conv
- konvolúció ,polinomiális szorzat
deconv
- dekonvolúció, polinomiális
polyval - polinom értéke polyvalm - mátrixpolinom értéke polyder - polinom deriváltja interp1 - elsőfokú polinomiális interpoláció fmin - egyváltozós függvény minimuma ode23 - alacsonyrendű differenciál megoldás quad - alacsonyrendű integrál megoldás
osztás polifit - polinomiális interpoláció roots - polinom gyökei residue - (egyszerű) résztörtekre bontás interp2 - másodfokú polinomiális interpoláció fmins - többváltozós függvény minimuma ode45 - magasrendű integrál megoldás quad8
- magasrendű integrál megoldás
function elseif while end break dbstatus dbquit dbclear
- új függvény megnevezés - az "if" használata esetén - feltételes ismétlés - az "if", "while", "for" vége - hurokművelet befejezése - megszakítási pontok listázása - soronkénti végrehajtás vége - programmegszakítási pont törlés
I.2.4.9. Speciális MATLAB utasítások feval if else for pause return dbstep dbstop beszúrás
- függvény végrehajtás - feltételes végrehajtás - az "if" használata esetén - ismétlés adott számszor - végrehajtás felfüggesztés - visszatérés egy adott függvényre - program soronkénti végrehajtása - programmegszakítási pont
I.2.4.10. Speciális mátrixok és mátrixműveletek eye ones rand
- egységmátrix - 1-esekből álló mátrix - véletlenszám mátrix
diag vander tril
- mátrix átlós elemei - Vandermonde mátrix - alsó háromszög mátrix kiemelés
zeros gallery randn mátr. magic compan triu
- zérókból álló mátrix - teszt mátrix - norm. disztrib. véletlenszám
. ; : () !
- mínusz - tizedes pont - pontosvessző (sorvég jel) - kettőspont (tömbmanipuláció) - kerek zárójelek (argumentumok) - DOS parancs beszúrása
i,j NaN realmin
- imaginárius egység ( ) - nem szám(Not a Number) - a lehető legkisebb valós szám
- varázsmátrix - kompanion mátrix - felső háromszög mátrix kiemelés
I.2.4.11. Speciális karakterek + = % , [] …
- plusz - hozzárendelés jele - szöveges megjegyzés kezdete - vessző (választójel) - szögletes zárójelek (mátrixok) - folytatás
I.2.4.12. Speciális számértékek pi
- a "pi" értéke (3,14159265...)
ans realmax
- utolsó számítás eredménye - a lehető legnagyobb valós szám
I.2.4.13. Két -és háromdimenziós grafikus megjelenítés plot - lineáris interpolációs rajzolás semilogx - x-tengelyen logaritmikus rajzolás bar - oszlopgrafikon
loglog - logaritmusos skálájú rajzolás semilogy - y-tengelyen logaritmikus rajzolás polar - rajzolás poláris koordinátákban
fplot grid text xlabel zlabel plot3 contour mesh axis axes cla figure newplot képernyő
- függvény kirajzolása - rácsozat - grafikon szövegezés - az x-tengely jelőlése - z-tengely jelőlése - 3D rajzolás - 2D kontür rajzolás - 3D metszet felületek kirajzolása - tengelyek skálázása és kirajzolása - tengelyek kirajzolása - tengelyek törlése - grafikus ablak létrehozása - új tengelyek és grafikus
stairs - lépcsőzetes ábrázolás title - grafikon címe gtext - szöveg elhelyezése egérrel ylabel - az y-tegely jelőlése zoom - nagyítás / kicsinyítés contourc - kontür rajz számolás contour3 - 3D kontür rajzolás surf - 3D árnyékolt területek kirajzolása caxis - tengelyek skálázása álszínnel colormap - színtérkép clf - rajz törlése refresh - grafikus kép frissítése close - rajz bezárás
Források: Matlab segédanyag magyar nyelven: http://ait.iit.uni-miskolc.hu/~ait/segedlet/matlab/matlab-1.htm Matlab segédanyag angol nyelven: http://www.mathworks.com/support/ vagy a help menüpont Fuzzy tagsági függvények és műveleteik: http://www.tankonyvtar.hu/informatika/fuzzy-rendszerek-fuzzy-080904
2. gyakorlat A hagyományos (crisp) halmazokon értelmezett alapműveletek, a komplementumképzés, a metszet és az egyesítés többféle módon általánosíthatók fuzzy halmazokra. Ezek közül a leggyakrabban használt fuzzy halmazműveletek láthatók a következőkben. Szükséges két fuzzy halmaz. Az ábrázolandó tartomány a [150,190] intervallum 0,1-es lépésközzel: x=150:0.1:190; Az első fuzzy halmaz ábrázolása: for i=1:401 if x(i)<160 y(i)=0; elseif x(i)<180 y(i)=1-abs((x(i)-170)/10); else y(i)=0; end end plot(x,y) A második fuzzy halmaz ábrázolása: for i=1:401 if x(i)<167 y1(i)=0; elseif x(i)<183 y1(i)=1-abs((x(i)-175)/8); else y1(i)=0; end end plot(x,y1,'r')
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
175
180
185
190
160
165
170
175
180
185
190
Fuzzy metszetek (t-normák) A leggyakrabban használt t-normák: A mininmum Tm(a,b)=min(a,b) for i=1:401 tz(i)=min(y(i),y1(i)); end plot(x,tz,'*')
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
Algebrai szorzat:Tp(a,b)=ab
for i=1:401 ta(i)=y(i)*y1(i); end plot(x,ta,'g')
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
Lukasiewicz-féle t-norma: Tl(a,b)=max(0,a+b-1) for i=1:401 tk(i)=max(0,y(i)+y1(i)-1); end plot(x,tk,'k')
175
180
185
190
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
Drasztikus metszet ha b=1 a TD ( a , b ) = b ha a=1 0 egyébként
for i=1:401 if y1(i)==1 td(i)=y(i); elseif y(i)==1 td(i)=y1(i); else td(i)=0; end end plot(x,td,’m’)
160
165
170
175
180
185
190
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
175
180
185
190
Fuzzy metszetek rendezettsége Együtt ábrázolva a fenti fuzzy metszeteket (t-normákat) látható, hogy minden a, b ∈ [0,1] esetén teljesül a t min (a, b) ≤ t (a, b) ≤ min(a, b) egyenlőtlenség, vagyis a minimum a legnagyobb t-norma. 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
Fuzzy uniók, konormák, diszjunkciók A leggyakrabban használt t-konormák: 1. ZADEH-féle unió S(a,b)=max(a,b) for i=1:401 sz(i)=max(y(i),y1(i)); end
170
175
180
185
190
plot(x,sz,’*’) 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
175
180
185
190
2. Algebrai összeg S(a,b)=a+b-ab for i=1:401 sa(i)=y(i)+y1(i)-y(i)*y1(i); end plot(x,sa,’g’)
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
3. Korlátos összeg
155
160
165
170
175
180
185
190
S(a,b)=min(1,a+b) for i=1:401 sk(i)=min(1,y(i)+y1(i)); end plot(x,sk,’c’)
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
4. Drasztikus unió ha b=0 a s max (a, b) = b ha a=0 1 egyébként for i=1:401 if y1(i)==0 sd(i)=y(i); elseif y(i)==0 sd(i)=y1(i); else sd(i)=1; end end plot(x,sd,’m’)
165
170
175
180
185
190
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
175
180
185
190
5. Fuzzy uniók Együtt ábrázolva a fenti fuzzy uniókat (t-konormákat, s-normákat) látható, hogy minden a, b ∈ [0,1] esetén teljesül a max(a, b) ≤ s (a, b) ≤ s max (a, b) egyenlőtlenség, vagyis a ZADEH-féle unió a legkisebb t-konorma, vagy s-norma.
1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 150
155
160
165
170
175
180
185
190
3 dimenziós ábrázolás Létre kell hozni egy x-y síkban elhelyezett rácsozott felületet, erre szolgál az [Y,Y1]=meshgrid(0:.01:1,0:.01:1) parancs, ahol a paraméterek rendre az intervallum kezdete, a felbontás finomsága és az intervallum vége Y-ra, majd Y1-re. Az ábrázoláshoz meg kell még határozni egy Z függvényt, majd a surf(Y,Y1,Z) paranccsal megkapható a 3D-s függvény.
Néhány fuzzy metszet 3D-s ábrázolása: 1. ZADEH-féle metszet Tz=min(Y,Y1);
A függvényt megjelenítő ablakban a irányból megnézhető a függvény.
ikonnal forgatható a 3D-s kép, így bármilyen
2. Korlátos különbség Tk=max(0,Y+Y1-1); Elforgatva:
Hasonlóképpen ábrázolható a többi fuzzy metszet és unió is 3 dimenzióban.
3. gyakorlat Fuzzy toolbox használata: a fuzzy szó leírásával indítható el (FIS Editor)
Első lépések beállítható a bemenet, illetve a kimenet neve (Name mező) hozzárendelhető több bemenet, illetve kimenet (Edit/Add Variable…/Input) elmenthető fájlba (File/Export/To File…) vagy a Matlabba exportálható (File/Export/To Workspace…) megnyitható egy korábban elmentett fájl (File/Import/From File…) vagy Importálható (File/Import/From Workspace…) a fájlok kiterjesztése: .fis A bemenet legyen egy szoba hőmérséklete és ennek megfelelően kell meghatározni, hogy a ventilátor milyen fokozaton működjön. A bemenet neve legyen „ho” a kimenet neve pedig „venti”. Ezután a bemenetre kettőt kattintva beállíthatóak a tagsági függvények, illetve a hőmérsékleti tartomány. (Membership function editor)
A bemenet beállításai A hőmérsékleti tartomány 0-50 (Range)
A tagsági függvények neve: cold, cool, warm, hot (Name, a kijelölt tagsági függvényre vonatkozóan) Alapállapotban 3 tagsági függvény van, ezért hozzá kell rendelni még egyet (Edit/Add MFs…) A választható tagsági függvény típusok közül a leggyakrabban használt a trimf (háromszög) és a trapmf (trapéz) A két szélső függvény általában trapéz alakú A függvények mozgathatók (a teljes függvény, illetve a töréspontok is) A függvény töréspontjainak helye számszerűen is megadható (Params)
A kimenet beállításai A fokozatok 1-10 közötti értékek legyenek (Range) A tagsági függvények neve: zero, low, medium, high Hozzá kell rendelni még egy tagsági függvényt A két szélső függvény legyen trapéz alakú
Szabályok hozzáadása Ahhoz, hogy a bemenet és a kimenet közötti összefüggések leírhatók legyenek, meg kell fogalmazni őket if (feltétel) then (utasítás) szerkezetű szabályokban (Membership Function Editor menüjében Edit/Rules…)
A szabályok feltétel része (a szoba hőmérséklete) az ablak baloldalában adható meg, az ehhez kapcsolt utasítás (milyen fokozatra kell kapcsolnia ventillátornak) pedig az ablak jobb oldalán. Lehetséges szabályok:
Szabályok grafikus megjelenítése A könnyebb áttekinthetőség kedvéért a szabályok grafikusan is megjeleníthetők (bármelyik ablakban View/Rules). A bemeneti érték változtatható a piros vonal mozgatásával, vagy konkrét érték adható meg az Input mezőben. A kimenet mindig ennek megfelelően változik, ugyanis fuzzy szabályozási rendszerekben a szabálypremissza és a szabálybemenet egybeesésének mértéke határozza meg az adott szabály kimenetének jelentőségét az adott szabálykimenetben.
A kimenet ábrázolása a bemenet függvényében Megtekinthető az is, hogy a bemenetektől függően hogyan változnak a kimenetek a szabályok eredményeképpen. (View/Surface)
A függvény exportálható Matlabba (Export/To Workspace) majd ott a gensurf(név) (név: az exportáláskor megadott változónév) paranccsal egy egyszerűen kezelhető ábraként jelenik meg a függvény.
Új bemenet hozzáadása A szoba hőmérséklete mellett legyen még egy bemenet, a szoba mérete m3-ben.
Az új bemenet tagsági függvényei:
A két bemenethez tartozó szabályok táblázatos formában: small
medium
big
cold
medium
medium
high
cool
low
medium
medium
warm
low
low
medium
hot
zero
low
low
Rule Editorban:
A szabályok súlyozhatók (Weight) 0 és 1 közötti értékekkel. A szabályok grafikus megjelenítése:
Kimenet ábrázolása a bemenetek függvényében (két bemenet esetén) Több bemenet esetén is a View/Surface menüponttal jeleníthető meg a kimenet a bemenet függvényében, de ekkor már az eredmény 3 dimenziós lesz.
Az ábra forgatható, így bármilyen irányból megnézhető, ezáltal pontosabb képet ad a függvény tulajdonságairól. Az esetleges exportálás (Export/ToWorkspace) után keletkezett ábra is forgatható, ahogy korábban a fuzzy metszetek 3 dimenziós ábrázolásánál is látható volt. Így az ábra egyszerűen elmenthető, később is könnyen kezelhető lesz.
4. gyakorlat A Simulink blokkokból felépített dinamikus és beágyazott rendszerek szimulációjára alkalmas program. A modellt különböző típusosztályokba tartozó blokkokból építjük fel (források, fuzzy logikai szabályozó, kijelzők). A Simulink indítása Matlabból nevének leírásával történik, ekkor megjelenik a hozzá tartozó grafikus felület. A következő példa tartalmaz egy fuzzy logikai szabályozót, aminek bemenete a szabályozási hiba, a mért vagy megfigyelt állapotváltozók, kimenete pedig a folyamat bemenete lesz, ezáltal egy visszacsatolást létrehozva az aktuális értéket illeszti a szabályokhoz. A cél, hogy az aktuális érték a kívánt értéket elérje, ennek megfelelően végzi el a következtetést a szabályozó.
Első lépés a modell megépítése:
Step: : Gain: e Gain1: e’ Fuzzy Logic Controller: maga a fuzzy szabályozó, a fuzzy toolboxban létre kell hozni egy fis fájlt, ami tartalmazza a beállításait Discrete Filter1, Transport Delay, Transfer Fcn: együttesen alkotják magát a rendszert Gain2: aktuális érték Scope: grafikus megjelenítő a szimuláció megtekintéséhez
Sign1: a kimenő jelsorozat
Fuzzy szabályozó beállításai Ezután a Fuzzy toolboxban létre kell hozni a fuzzy szabályozó tagsági függvényeit és meg kell adni a hozzájuk tartozó szabályokat. Két bemenet lesz, a hiba és a hiba eltérése
A hibához tartozó tagsági függvények:
Az eltérés tagsági függvényei:
A kimenet tagsági függvényei:
A szabályok:
A szimuláció Az elkészült fuzzy szabályozót nem elég fájlba menteni, exportálni kell a Matlab munkaablakába is (File/Export!To Workspace…), hogy a szimulációs modellben felhasználható legyen. A Simulink Fuzzy Logic Controller blokkjára kettőt kattintva a FIS file or structure mezőben kell megadni az így létrehozott, majd exportált fuzzy szabályozó nevét. Ezután elindítható a szimuláció (Simulation/Start) melynek eredménye a grafikus megjelenítő elemre (Scope) kattintva megtekinthető.
A szimuláció során látható, hogyan éri el a szabályozó a kívánt értéket. A képen a sárga vonal jelzi a kívánt értéket, a lila pedig a szabályozó aktuális értékeit.
5. gyakorlat Két különböző fuzzy szabályozóra épülő rendszer összehasonlítható egy modellbe építve őket, ezáltal elvégezhető a hatásvizsgálat, melynek eredményeként látható, hogy melyik szabályozó éri el hamarabb a kívánt eredményt. Az ábrán látható modellben a két rendszer a fuzzy szabályozótól eltekintve minden más elemében azonos. A két szabályozó különbözhet tagsági függvényeiben, az alkalmazott műveletekben, az alkalmazott szabályrendszerben, vagy az egyes szabályok súlyozásában, aminek eredményeképpen az adott rendszer hatékonyabbá tehető.
Az ábra felső részén látható rendszer az előző példabeli rendszerrel teljesen megegyezik a fuzzy szabályozó tekintetében is. Ez kerül összehasonlításra az ábra alsó részén található rendszerrel, melynek a fuzzy szabályozója több tagsági függvényt alkalmaz mind a bemenetek, mind a kimenet esetén és jóval nagyobb a szabályrendszere is. A bemenet itt is e és e’lesz.
Az új fuzzy szabályozó beállításai A hiba tagsági függvényei:
Az eltérés tagsági függvényei:
A kimenet tagsági függvényei:
Az alkalmazott szabályrendszer táblázatos formában:
e’
PB
Z
PS
PM
PM
PB
PB
PB
PM
NS
Z
PS
PM
PM
PB
PB
PS
NM
NS
Z
PS
PM
PM
PB
Z
NM
NM
NS
Z
PS
PM
PM
NS
NB
NM
NM
NS
Z
PS
PM
NM
NB
NB
NM
NM
NS
Z
PS
NB
NB
NB
NB
NM
NM
NS
Z
NB
NM
NS
Z
PS
PM
PB
e A táblázat alapján a következőképpen írhatók fel az alkalmazott szabályok: 1. If (e is NB) and (de is NB) then (output1 is NB) (1) 2. If (e is NB) and (de is NM) then (output1 is NB) (1) 3. If (e is NB) and (de is NS) then (output1 is NB) (1) 4. If (e is NB) and (de is Z) then (output1 is NM) (1) 5. If (e is NB) and (de is PS) then (output1 is NM) (1) 6. If (e is NB) and (de is PM) then (output1 is NS) (1)
7. If (e is NB) and (de is PB) then (output1 is Z) (1) 8. If (e is NM) and (de is NB) then (output1 is NB) (1) 9. If (e is NM) and (de is NM) then (output1 is NB) (1) 10. If (e is NM) and (de is NS) then (output1 is NM) (1) 11. If (e is NM) and (de is Z) then (output1 is NM) (1) 12. If (e is NM) and (de is PS) then (output1 is NS) (1) 13. If (e is NM) and (de is PM) then (output1 is Z) (1) 14. If (e is NM) and (de is PB) then (output1 is PS) (1) 15. If (e is NS) and (de is NB) then (output1 is NB) (1) 16. If (e is NS) and (de is NM) then (output1 is NM) (1) 17. If (e is NS) and (de is NS) then (output1 is NM) (1) 18. If (e is NS) and (de is Z) then (output1 is NS) (1) 19. If (e is NS) and (de is PS) then (output1 is Z) (1) 20. If (e is NS) and (de is PM) then (output1 is PS) (1) 21. If (e is NS) and (de is PB) then (output1 is PM) (1) 22. If (e is Z) and (de is NB) then (output1 is NM) (1) 23. If (e is Z) and (de is NM) then (output1 is NM) (1) 24. If (e is Z) and (de is NS) then (output1 is NS) (1) 25. If (e is Z) and (de is Z) then (output1 is Z) (1) 26. If (e is Z) and (de is PS) then (output1 is PS) (1) 27. If (e is Z) and (de is PM) then (output1 is PM) (1) 28. If (e is Z) and (de is PB) then (output1 is PM) (1) 29. If (e is PS) and (de is NB) then (output1 is NM) (1) 30. If (e is PS) and (de is NM) then (output1 is NS) (1) 31. If (e is PS) and (de is NS) then (output1 is Z) (1) 32. If (e is PS) and (de is Z) then (output1 is PS) (1) 33. If (e is PS) and (de is PS) then (output1 is PM) (1) 34. If (e is PS) and (de is PM) then (output1 is PM) (1) 35. If (e is PS) and (de is PB) then (output1 is PB) (1) 36. If (e is PM) and (de is NB) then (output1 is NS) (1) 37. If (e is PM) and (de is NM) then (output1 is Z) (1) 38. If (e is PM) and (de is NS) then (output1 is PS) (1) 39. If (e is PM) and (de is Z) then (output1 is PM) (1) 40. If (e is PM) and (de is PS) then (output1 is PM) (1) 41. If (e is PM) and (de is PM) then (output1 is PB) (1)
42. If (e is PM) and (de is PB) then (output1 is PB) (1) 43. If (e is PB) and (de is NB) then (output1 is Z) (1) 44. If (e is PB) and (de is NM) then (output1 is PS) (1) 45. If (e is PB) and (de is NS) then (output1 is PM) (1) 46. If (e is PB) and (de is Z) then (output1 is PM) (1) 47. If (e is PB) and (de is PS) then (output1 is PB) (1) 48. If (e is PB) and (de is PM) then (output1 is PB) (1) 49. If (e is PB) and (de is PB) then (output1 is PB) (1)
A szimuláció A szimuláció során látható, hogy a bonyolultabb, több szabállyal és tagsági függvénnyel rendelkező fuzzy szabályozó (kék) már az első lépéseknél hatékonyabban közelít a kívánt értékhez és gyorsabban is éri el azt, mint az előző példában alkalmazott egyszerű, négy szabállyal rendelkező szabályozó (lila).