MATLAB 1. A Matlabról A MATLAB (MATrix LABoratory = mátrix laboratórium) egy interaktív, tudományos és műszaki számítások elvégzésére kifejlesztett, mátrixalapú, magas színtű programozási nyelv. A MATLAB néhány jellemzője: több mint 600 matematikai, tudományos és mérnöki függvényt tartalmaz, matematikai analízisre, numerikus módszerekre és algoritmusok fejlesztésére a MATLAB programozási nyelvén könnyű különböző elemzéseket, modellezéseket és szimulációkat létrehozni és megjeleníteni, de akár önálló alkalmazásokat is meg lehet benne megvalósítani beépített ábrázoló rutinjaival egyszerűvé teszi a 2D és 3D ábrák létrehozását és szerkesztését vektorok, mátrixok, többdimenziós tömbök, objektumok és felhasználó által létrehozható adatstruktúrák segítik az adatfeldolgozást be- és kimeneti fájlszűrői segítségével képes írni és olvasni az elterjedtebb fájlformátumokat, köztük az ASCII-t és az EXCEL-t is. más alkalmazásokkal C, C++, Fortran, Java, ActiveX, vagy DDE felületen keresztül képes kapcsolatot létrehozni programozói felülete hatékony szerkesztési és hibakeresési felületet nyújt 2. A help használata >> help utasítás-név 3. Változók, értékadás, számok, konstans függvények, kifejezések, műveletek: >>változó = kifejezés Pl1. >> a=5 a = 5 Létrejön az a változó mint egy 1x1-es mátrix, értéke 5. Pl2. >> q=sin(5) q = -0.9589 Ha a sor végére pontosvesszőt írunk, az eredmény nem íródik ki. A MATLAB - ban vannak tárolt értékek, mint pl. a π szám. Értékét a pi paranccsal 1
(függvényyel) írathatjuk ki. A MATLAB 4 tizedes pontossággal írja ki az értékeket (alapbeállítás), ezt a >> format long utasítással állíthatjuk át 14 tizedesjegy pontosságra, és a >> format short paranccsal vissza. Más speciális függvények konstans értékekkel: Függvény érték megjegyzés Eps 2.2204e-16 felülírható: pl. >> eps=0.0001 majd visszaállítható: >> clear eps realmin 2,2251e-308 legkisebb valós szám realmax 1,7977e+308 legnagyobb valós szám Inf Végtelen NaN nem szám (Not-a-number) 0/0, Inf-Inf i vagy j 1 Komplex egység Date Mai dátum Számok használata Pl: 3 99 0.0001 9.6397238 1.60210e 20 6.02252e23 Aritmetikai operátorok: + (összeadás), - (kivonás), * (szorzás), / (osztás), ^ (hatványozás), \ (inverz osztás). Pl1. Számítsuk ki Vol= >>R=2; >>Vol=(4/3)*pi*R^3 Vol=33.5103 Pl2. >>d=2\1 d= 0.5000 logikai kifejezések: o egyenlőség == o nem egyenlő ~= o kisebb egyenlő, nagyobb egyenlő <=, >= o és: & o vagy: pl. >> if ((d==4) (c==1 & h<=7)) p=1 end who, whos parancs: változók lekérdezése 2
környezet (változók) mentése és betöltése: save állománynév és load állománynév 4. Vektorok és mátrixok vektorok meagadása pl. Sorvektor: >> x=[0 1.5 3 4.5] x= 0 1.5000 3 4.5000 oszlopvektor: >> y=[1;2;3;4] y= 1 2 3 4 megadhatjuk így is (sor vektor transzponáltja): >> y=[1 2 3 4] elemekre való hivatkozás, kiíratás: pl. >> x(3) ans= 3 vektor kibővítése ( új elem hozzáadása): pl. >> x(5)=6; vagy >>x=[x,6]; Egyenközű vektor megadása a,, : " operátor illetve a linspace függvénnyel: kezdőérték: lépésköz: végsőérték linspace(első_elem,utolsó_elem, elemek_száma) Pl1. >> V=-2:5 V =-2-1 0 1 2 3 4 5 Pl2. >> V=6:-2:-4 V = 6 4 2 0-2 -4 Pl3. >> V=linspace(0,20,6) V = 0 4 8 12 16 20 Vektorműveletek: o Ha x,y két egyforma hosszú és formájú vektor, akkor lehet használni a +,-,.*,./ műveleteket( elemenkénti összeadás, kivonás, szorzás, ill. osztás). 3
>> x=[1 2 3]; >>y=[2 3 4]; >>x+y 3 5 7 >> x.*y 2 6 12 o skalár szorzat: két egyforma elemszámú de kül. formájú (egyik sormásik oszlopvektor kell legyen) vektor között: * pl. >> x*y 20 o hatványozás elemenként: pl. >>x.^0.5 1.0000 1.4142 1.7321 Mátrixok (2 dimenziós vektorok) használata: Értékadás: o elemek felsorolásával : a sor elemeit szóközzel vagy vesszővel kell elválasztani, a sorok végét pontosvessző jelöli, az elemek függvényként is megadhatók. Pl : >> A=[1 2 3 ; 4^2 sin(5) 6*pi ; 7, 8, 9] A = 1.0000 2.0000 3.0000 16.0000-0.9589 18.8496 7.0000 8.0000 9.0000 o létrehozás mátrixgenerátorokkal: zeros(m,n) - nxm elemű mátrix, melynek minden eleme nulla. ones(m,n) - a mátrix minden eleme 1. >> zeros(2,3) 0 0 0 0 0 0 eye(m,n) megadására). rand(m,n) véletlenszerű elemek - az átlóban 1 - esek vannak (egységmátrixok 4
>> ones(4,2) 1 1 1 1 1 1 1 1 >> eye(3,2) 1 0 0 1 0 0 >> eye(3,3) 1 0 0 0 1 0 0 0 1 >> d=10*rand(3,3) 8.3850 7.0247 6.9354 5.6807 5.4657 6.2358 3.7015 4.4587 7.9548 >> fix(d) egész rész 8 7 6 5 5 6 3 4 7 o mátrixok beolvasása külső szövegállományokból: pl. Ha létrehozunk egy mátrixot egy a.txt nevű szövegállományban: elemek közt szóköz, minden sor külön sorban, akkor a >> Load a.txt parancs létrehozza az a változót, ami tartalmazza a mátrixot. Hivatkozások a mátrix elemeire, soraira, oszlopaira illetve blokkjaira (az indexelés 1 - től kezdődik): A(m,n) m. sor n. eleme A(m,:) m. sor A(:,n) n. oszlop A(i,j:n) az i-ik sor (n-j+1) eleme: a j. oszloptól az n. oszlopig A(m:i,j:n) (i - m + 1) x (n - j + 1) - es blokk: az m - i. sor j - n. elemeit adja meg A([m,i],[n,j]) 2x2 - es mátrix az A mátrix m. és i. sorában levő n. és j. elem. 5
>> A=[1 2 3 4 5 ; 6 7 8 9 10 ; 11 12 13 14 15 ; 16 17 18 19 20] A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> A(2,5) 10 >> A(3,:) 11 12 13 14 15 >> A(:,5) 5 10 15 20 >> A(2:3,2:4) 7 8 9 12 13 14 MÁTRIXMŰVELETEK Lehetnek : 1. tipikus mátrixalgebrai műveletek (mátrixszorzás, inverz, transzponált) 2. elemenkénti műveletvégzés( összeadás, kivonás, szorzás, osztás: +,-,.*,./) >> A=[1 2;3 4]; >> B=[5 6;7 8]; >> C=A*B C = 19 22 43 50 Elemenként pedig a műveleti jel elé pontot teszünk: >> D=A.*B D = 5 12 21 32 Függvények is alkalmazhatók mátrixra, vektorra: >> X=0:pi/2:2*pi X = 0 1.5708 3.1416 4.7124 6.2832 >> Y=sin(X) 6
Y = 0 1.0000 0.0000-1.0000-0.0000 megj.: Ez a függvényábrázolásnál is fontos! Az értelmezési tartományként adott intervallumot egyenletesen felosztjuk, majd az így kapott vektor minden elemére alkalmazzuk a függvényt. >>Plot(X,Y) Bővebben a 9.Grafika fejezetben. Dürrer mágikus mátrixa: >> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 oszlopok elemeinek összege: >> sum(a) 34 34 34 34 sorok elemeinek összege: ( transzponáljuk az A-t és kiszámítjuk az oszlopok összegét) >> sum(a ) 34 34 34 34 >> diag(a); - a mátrix átlója >> sum(diag(a)) 34 a másik átló összegének kiszámításához megfordítjuk a mátrixot a fliplr paranccsal: >> sum(diag(fliplr(a))) 34 egy oszlop elemeinek az összege (pl. 4. oszlop): >> sum(a(1:4,4)) 34 7
konkatenálás: >> B = [A A+32; A+48 A+16] B = 16 3 2 13 48 35 34 45 5 10 11 8 37 42 43 40 9 6 7 12 41 38 39 44 4 15 14 1 36 47 46 33 64 51 50 61 32 19 18 29 53 58 59 56 21 26 27 24 57 54 55 60 25 22 23 28 52 63 62 49 20 31 30 17 Sorok, oszlopok törlése: >>X = A; >>X(:,2) = [ ] X = 16 2 13 5 11 8 9 7 12 4 14 1 5. Egyenletrendszerek megoldása 3x1 11x2 + 5 = 0 x1 + 4x2 6 = 0 AX=B A=[3 11; 1 4] B=[-5;6] X=inv(A)*B vagy x=a\b 6. Polinomok P=[2 3 1 4] 2x 3 +3x 2 +x+4 polinom értékének számítása x=t-ben: polyval(p,t) deriválás: polyder(p) polinomok szorzása: conv(p,q) 8
7. Matematikai függvények: Trigonometriai függvények sin(x) cos(x) cos(2+3i) = -4.1896 9.1092i tan(x) asin(x) acos(x) acos(0.5) = 1.0472 atan(x) acos(3) = 0 + 1.7627i atan2(y, x) sinh(x) See the MATLAB help for more details!!! cosh(x) tanh(x) asinh(x) acosh(x) atanh(x) Más matematikai függvények Megjegyzés abs(x) x abszolút értéke sqrt(x) x négyzetgyöke real(x) Az x komplex szám valós része imag(x) Az x komplex szám imaginárius része round(x) Kerekítés a legközelebbi egészhez fix(x) Zéró felé kerekítés floor(x) - felé kerekítés ceil(x) + felé kerekítés. sign(x) 1 if x > 0; -1 if x < 0. exp(x) e x log(x) e alapú logaritmus log10(x) 10-es alapú logaritmus sort(x) Növekvő sorrendbe rendezi az x vektor elemeit. Ha x mátrix, akkor a rendezés oszloponként történik. sum(x) Összeadja az x vektor elemeit. Ha x mátrix akkor összeadja oszlopait ( eredmény egy vektor) max(x) Megkeresi az x vektor legnagyobb elemét. Ha x mátrix, az eredmény egy sorvektor: az oszlopok maximum értékeivel min(x) Minimum érték vektorban és mátrix oszlopaiban 9
8. Matlab programozás Matlabban létrehozhatunk *.m állományokat, ezeknek 2 típusa van: Scriptek parancssorozat Függvények saját függvény létrehozása. 8.1.Scriptek használata File/New/M-file parancs hatására megjelenik egy szövegszerkesztő, ahol megírhatjuk a parancssort (utasítássort), lementhetjük majd a parancsablakban a lementett névvel hivatkozva lefuttathatóak a beírt parancsok. A % jel után megjegyzések írhatók, ezeket a megjegyzéseket a MATLAB a program végrehajtása során figyelmen kívül hagyja. Lementjük egy s1.m file-ba a következő parancsokat: A=[1 2 3]; B=[1 0 1]; A.*B majd s1 et beírva a Matlab parancsablakban végrehajtódik a 3 utasítás: >>s1 ans= 1 0 3 8.2. programvezérlő utasítások 8.2.1. IF If logikai feltétel Utasítások Elseif logikai feltétel Utasítások Else Utasítások End a=input('a='); b=input('b='); if a>b disp('a nagyobb mint b') elseif a==b disp('a egyenlo b') else disp('a kisebb mint b') 10
end megj. input beolvasás disp megjelenítés, kiírás 8.2.2. While while feltétel utasítás(ok) end pl. Legkisebb pozitív szám kiszámítása >> x=1; while x>0 x=x/2 end 8.2.3. For for változó=kezdőérték:növekmény:végérték utasítás(ok); end >> for i=1:2:9 disp(i) end 1 3 5 9 8.3. Függvények írása function [ki1,ki2, ]=fv_nev(be1,be2, ) ahol, a ki1,ki2, jelenti a visszatérítendő változókat ( a függvény értékét), míg be1,be2, a bemenő paramétereket Pl1. 11
Írjunk egy függvényt: f(x,y)=2 x - 3 y ln x Létrehozunk egy f1.m nevű állományt és beírjuk: Function z=f1(x,y) z=2*x-3*y*log(x) majd lementjük. Megj.: a z változóban lesz kiszámolva a függvény értéke f1 a függvény neve és ezt kell adni az állomány nevének is x,y a függvény bemenő paraméterei. Ha a parancsablakban beírjuk: >> t=f1(1,2) akkor azt kapjuk, hogy: t= 2.0000 Pl2. Írjunk egy függvényt a lineáris egyenletrendszerek megoldására: Létrehozunk egy er.m nevű állományt és beírjuk: function x=er(p) % lineáris egyenletrendszer megoldása % a parameter egy (m-1 x m)-es matrix, ahol % az utolsó oszlop a szabadtagokat tartalmazza. [m n]=size(p); A=p(1:m,1:n-1); B=(-1)*p(1:m,n); x=a\b; 3x1 11x2 + 5 = 0 ha megszeretnénk oldani a egyenletrendszert az er x1 + 4x2 6 = 0 függvénnyel, akkor a Matlab parancsablakban beírjuk: >> c=[3-11 5;1 4-6]; >> x=er(c) és azt kapjuk, hogy: x = 2 1 Ha a parancsablakban beírjuk: >> help er akkor a függvényben szereplő % utáni sorokat kapjuk: lineáris egyenletrendszer megoldása a parameter egy (m-1 x m)-es matrix, ahol az utolsó oszlop a szabadtagokat tartalmazza. 12
Pl3. Írjuk meg a következő függvényt: f t; x, x, x = 2x + 5x, 1 sint x x + 3x, x + x ( ) ( ( ) ) 1 2 3 1 3 1 2 3 1 2 Létrehozunk egy f2.m nevű állományt és beírjuk: function z = f2(t, x); z(1) = - 2*x(1) + 5*x(3); z(2) = - (1-sin(t))*x(1) x(2)+ 3*x(3); z(3) = - x(1) + 2*x(3); z = [ z(1), z(2), z(3)]; A Matlab parancsablakban beírhatjuk: >> h=f2(0, [1, 2, 0]) h= -2.0000-3.0000-1.0000 8.4. Beolvasás - kiiratás input: beolvasás használat: változó=input(szöveg) Pl: >> x=input( x= ) megjelenik: x= és megadhatjuk az x értékét. disp: kiíratás disp(x) kiírja az x értékét anélkül, hogy kiírná az x= - t >> x=6; >> x megjelenik: x= 6 >> disp(x) megjelenik: 6 3 13
9. Grafika 9.1. 2D s grafikonok A plot beépített utasítás x-y grafikonok készítésére szolgál; ha x és y azonos hosszúságú vektorok, akkor a plot(x,y) felrajzolja a görbét amit a megfelelő x(i),y(i)) koordinátájú pontok összekötésével kapunk. A szinuszfüggvény grafikonja a [4,4] intervallumon: >>x=-4:0.01:4; y=sin(x); plot(x,y) Ekkor az x vektor az értelmezési tartomány felosztását tartalmazza 0.01 lépésközzel, az y pedig a megfelelő függvényértékeket. A grid utasítással lehet ki/be kapcsolni a grafikon segédvonalait (rács). Egy grafikonon több függvény is ábrázolható: >>x=-2:0.01:2; y=sin(x);t=cos(x); h=exp(x) ; plot(x,y,x,t,x,h); 8 7 6 5 4 3 2 1 0-1 -2-1.5-1 -0.5 0 0.5 1 1.5 2 Vonalstílus megadása: >>plot(x,y,'-',x,t,'- -',x,h,':') y folytonos, t szaggatott, h pontozott 8 7 6 5 4 3 2 1 0-1 -2-1.5-1 -0.5 0 0.5 1 1.5 2 A stílus paraméter egy karakterlánc a következő felépítéssel: vonalstílus-jel-szín 14
A vonalstílust láttuk a fenti példában, a jel lehet: x, *, o stb. ezek a jelek jelennek meg a pontokban, a szín pedig a megfelelő színek angol kezdőbetűje: r piros, y sárga, stb.» x=-2:0.2:2; y=sin(x); plot(x,y,'-or') 1 0.8 0.6 0.4 0.2 0-0.2-0.4-0.6-0.8-1 -2-1.5-1 -0.5 0 0.5 1 1.5 2 Ha pl. a vonalat nem akarjuk megrajzolni, csak piros kereszteket, akkor kihagyjuk a vonalstílust:» plot(x,y,'r+') Ha piros vonallal és fekete pontokkal szeretnénk kirajzoltatni:» plot(x,y,'-r',x,y,'ok') megj.: kétszer rajzoljuk ki: először piros folytonos vonallal, majd fekete pontokkal, vonal nélkül. A fekete szín jele a k. ( mert a b a kék: blue) A hold on parancs hatására megmarad a grafikon és a következő plot utasítások rajza is felkerül rá. A hold off-al lehet kikapcsolni. Mátrixok kirajzolása: a plot(m) utasítás az m mátrix oszlopait ábrázolja a sorszám függvényében:» m=[1 0 3; 10 5 6; 4 8 2;10 3 8];» plot(m) 15
10 9 8 7 6 5 4 3 2 1 0 1 1.5 2 2.5 3 3.5 4 9.2. 3D s grafikonok Ha x,y,z három egyforma hosszú vektor, akkor a plot3(x,y,z) egy 3D-s ábrát készít.» t = 0:pi/50:10*pi;» plot3(sin(t),cos(t),t)» grid on 40 30 20 10 0 1 0.5 0-0.5-1 -1-0.5 0 0.5 1 3D-s ábrákat lehet készíteni pl. 2 változós függvények ábrázolásával: Ábrázoljuk a Z=sqrt(X.^2 + Y.^2) függvényt: A meshgrid utasítással létrehozunk egy 2 dimenziós hálót: azokat az x,y pontokat amelyben kiszámítjuk és ábrázoljuk a Z-t. Az ábrázolást a mesh(x,y,z) paranccsal végezzük el. Használata: [X,Y]=meshgrid[x,y]. Ha a háló négyzetes, akkor írhatjuk: [X,Y]=meshgrid[x] ami megfelel a [X,Y]=meshgrid[x,x]-nek» [X,Y] = meshgrid( 8:.5:8); 16
Z = sqrt(x.^2 + Y.^2); mesh(x,y,z)»r=z+eps; R=sin(R)./R; mesh(x,y,r) a surf(x,y,r) felületi színezést ad a grafikonnak:»surf(x,y,z) 17
a shading interp utasítással finomabb színezést (interpolálással) lehet adni a felületnek: >> shading interp A Matlab további grafikus lehetőségeiről a HELP-ben illetve a http://www-ccs.ucsd.edu/matlab/fulldocset.html címen megtalálható online kézikönyvekben találunk leírást. Using MATLAB Graphics: http://www-ccs.ucsd.edu/matlab/pdf_doc/matlab/graphg.pdf 10. Állománykezelés állomány nyitása: fopen használata: állományazonosító=fopen(állomány neve, nyitási mód) nyitási módok: 'r' read - olvasás 'w' write (create if necessary) írás (létrehozás ha szükséges) 18
'a' append (create if necessary) bővítés (létrehozás ha szükséges) 'r+' read and write (do not create) olvasás és írás (nem létrehozás) Az állományok bináris módban nyílnak meg. Ha szövegállományként szeretnénk megnyitni a nyitási mód mellé oda kell tenni a 't' t. >> fid=fopen( c:\konyvtar\a.txt, at ) megnyitja a C: lemez konyvtar nevű könyvtárában levő a.txt szövegállományt bővítésre. Ha a.txt nem létezik létrehozza. Állomány zárása: fclose(állományazonosító) formatált olvasás állományból: fscanf használata: változó=fscanf(állományazonosító, formátum, méret) A formátum a C nyelvben használatos formátum specifikációk: %s karakterlánc %d decimális egész szám %f valós szám A méret paraméter opcionális: n max. n elemszámú vektort olvas be inf max. az állomány végéig olvas [m,n] max. egy mxn-es mátrixot olvas be. Létrehozunk egy c:\a.txt szövegállományt a következő tartalommal: 23.56 1.65 3.45 8.953 5 7 6 9 12.43433 5.8766 Az állomány tartalmát különbözőféleképpen lehet beolvasni: Először meg kell nyitni: >>fid=fopen( c:\a.txt, rt ); Beolvasás egy oszlopvektorba >>x=fscanf(fid, %f ) x= 23.5600 1.6500 3.4500 8.9530 5.0000 7.0000 6.0000 9.0000 12.4343 5.8766 3 szám beolvasása ( egy 3 elemű oszlopvektorba): 19
>>x=fscanf(fid, %f,3) x= 23.5600 1.6500 3.4500 egy 2x2 - es mátrix beolvasása: >>x=fscanf(fid,'%f',[2,2]) x = 23.5600 3.4500 1.6500 8.9530 az egész állomány beolvasása egy 2xn-es mátrixba ( n változó szám = a sorok száma) >>x=fscanf(fid,'%f',[2,inf]) x = 23.5600 3.4500 5.0000 6.0000 12.4343 1.6500 8.9530 7.0000 9.0000 5.8766 az egész állomány beolvasása egy 3xn-es mátrixba >>x=fscanf(fid,'%f',[3,inf]) x = 23.5600 8.9530 6.0000 5.8766 1.6500 5.0000 9.0000 0 3.4500 7.0000 12.4343 0 formázott írás állományba: fprintf használat: fprintf(fid, formátum, változó) fid állományazonosító, ha hiányzik, akkor a kiírás a képernyőre történik formátum - a C nyelvben használatos formátum specifikációk: változó a változó amit az állományba vagy a képernyőre íratunk. A formátum tartalmazhat speciális karaktereket: pl. \n jelentése: új sor. Ha beírjuk: x = 0:.1:1; y = [x; exp(x)]; fid = fopen('c:\b.txt','w'); fprintf(fid,'%6.2f %12.8f\n',y); fclose(fid) akkor a b.txt állományban a következő sorok jönnek létre: 0.00 1.00000000 0.10 1.10517092... 1.00 2.71828183 20
Ha beírjuk: B = [8.8 7.7; 8800 7700] fprintf('x = %6.2f meter vagy %8.3f mm\n',9.9,9900,b) megjelenik: X = 9.90 meter vagy 9900.000 mm X = 8.80 meter vagy 8800.000 mm X = 7.70 meter vagy 7700.000 mm különböző elválasztókat használó állományból való olvasás: dlmread használat: - m=dlmread(állománynév,elválasztó) pl. m=dlmread( c:\a.txt, * ) ha az a.txt állományban a számok a * karakterrel vannak elválasztva egymástól. ( az EXCEL állományokat lehet lementeni pl. CSV formátumba, ahol az elválasztó a vessző. Egy ilyen file beolvasásához megadjuk a nevét és a, elválasztót. ) - m=dlmread(állománynév,elválasztó, sor, oszlop) a sor és oszlop paraméterek megadják, hogy a beolvasás honnan kezdődjön (az indexelés zérótól indul). - m=dlmread(állománynév,elválasztó, sor, oszlop,tartomány) ahol a tartomány formája: [R1 C1 R2 C2], az R1 C1 jelenti a bal felső sarkat, míg az R2 C2 a jobb alsó sarkat. A tartományt meg lehet adni az EXCEL-ben használt jelölésekkel is: A3..B7 Beírjuk EXCEL-be a következő adatokat és lementjük az a.csv állományba: Matlabban:» dlmread('a.csv',',') 1 2 3 4 5 6 7 8 9 10 11 12» dlmread('a.csv',',',1,1) a második sor, második oszloptól olvassa be: 5 6 8 9 11 12 21
» dlmread('b.csv',',',2,1,'b3..c4') a harmadik sor második oszlopától (2,1) kezdve beolvassa a B3..C4 tartományt. Ebben az esetben a (2,1) megegyezik a B3-al: 8 9 11 12 Ha a kezdő sor és oszlop nem egyezik meg a tartomány kezdetével, akkor 0-kkal tölti fel az üres részt:» dlmread('b.csv',',',0,0,'b3..c4') 0 0 0 0 0 0 0 8 9 0 11 12 megj. a fenti utasítás megegyezik a» dlmread('b.csv',',',0,0,[2 1 3 2]) utasítással írás állományba elválasztókkal: dlmwrite használat: dlmwrite(állomány,mátrix,elválasztó)» dlmwrite( c.csv,m,, ); 11. Az eval és feval utasítások Ha t egy karakterlánc típusú változó, akkor az eval(t) egyszerűen végrehajtja a t-ben leírt utasítást. >>t = A+B ; >>A=1 ; >>B=2 ; >>eval(t) 3 Pl2. Hozzunk létre 12 darab egységmátrixot : M1 legyen egy 1x1 es M12 egy 12x12-es egységmátrix. >>for n=1:12 eval(strcat( M,num2str(n), =eye(n) )) end megj.: a strcat függvény összerakja (konkatenálja) a karakterlánc paramétereit egy karakterláncba. a num2str függvény az n számot karakterlánccá alakítja 22
A feval egy karakterláncban megadott függvényt értékel ki. Használata: feval(függvény, paraméterek). Feval( sin,pi/2) megfelel a sin(pi/2)-nek Létrehozunk egy plotf függvényt függvények ábrázolására: function plotf(f,x) y=feval(f,x); plot(x,y) és segítségével 3 függvényt ábrázolunk: >>x=0:.1:10; >>plotf('sin',x), plotf('cos',x), plotf('exp',x) 12. Egyenletek és egyenletrendszerek megoldása Egyenletek megoldása az Fzero paranccsal lehetséges: Ha keressük az f(x)=2sin(x)-1 függvény gyökét 0.5 közelében (azaz a keresést 0.5-ből indítjuk), akkor előbb le kell írnunk az f függvényt m- állományként: (f.m) function y=f1(x) y=2.*sin(x)-1; majd az Fzero parancs segítségével kapjuk meg a megoldást: >>fzero('f1',0.5) Egy egyenletrendszer megoldása hasonlóképpen történhet az Fsolve paranccsal : Oldjuk meg a köv. egyenletrendszert : 2 sin( x) + y + log( z) = 7 y 3 3x + 2 z = 1 x + y + z = 5 Létrehozzuk a függvény-állományt, melybe 0-ra rendezve írjuk az egyenleteket: function u=f2(w) x=w(1); y=w(2); z=w(3); u=zeros(1,3); u(1)=sin(x)+y^2+log(z)-7;u(2)=3*x+2^y-z^3+1;u(3)=x+y+z-5; Majd az [1 1 1] pont közelében levő megoldást így kapjuk meg: >>fsolve('f2',[1 1 1]) 23