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: érték Függvény Eps 2.2204e-16 realmin realmax Inf NaN i vagy j Date
2,2251e-308 1,7977e+308 Végtelen nem szám (Not-a-number) −1 Mai dátum
• Számok használata Pl: 3 –99 0.0001 9.6397238 •
megjegyzés felülírható: pl. >> eps=0.0001 majd visszaállítható: >> clear eps legkisebb valós szám legnagyobb valós szám Pl. 0/0, Inf-Inf Komplex egység
1.60210e–20
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
•
6.02252e23
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
Pl. >> x=[1 2 3]; >>y=[2 3 4]; >>x+y ans = 3 5 7 >> x.*y ans = 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’ ans = 20 o hatványozás elemenként: pl. >>x.^0.5 ans = 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. eye(m,n) - az átlóban 1 - esek vannak (egységmátrixok megadására). rand(m,n) – véletlenszerű elemek Pl. >> zeros(2,3) ans = 000 000
4
>> ones(4,2) ans = 11 11 11 11 >> eye(3,2) ans = 10 01 00 >> eye(3,3) ans = 100 010 001 >> d=10*rand(3,3) ans = 8.3850 7.0247 6.9354 5.6807 5.4657 6.2358 3.7015 4.4587 7.9548 >> fix(d) – egész rész ans = 876 556 347 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
Pl. >> A=[1 2 3 4 5 ; 6 7 8 9 10 ; 11 12 13 14 15 ; 16 17 18 19 20] A= 12345 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> A(2,5) ans = 10 >> A(3,:) ans = 11 12 13 14 15 >> A(:,5) ans = 5 10 15 20 >> A(2:3,2:4) ans = 789 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: +,-,.*,./) Pl. >> 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) ans = 34 34 34 34 sorok elemeinek összege: ( transzponáljuk az A-t és kiszámítjuk az oszlopok összegét) >> sum(A’) ans = 34 34 34 34 >> diag(A); - a mátrix átlója >> sum(diag(A)) ans = 34 a másik átló összegének kiszámításához megfordítjuk a mátrixot a fliplr paranccsal: >> sum(diag(fliplr(A))) ans = 34 egy oszlop elemeinek az összege (pl. 4. oszlop): >> sum(A(1:4,4)) ans = 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 + 4 x2 − 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] 2x3+3x2+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) tan(x) asin(x) acos(x) atan(x) atan2(y, x) sinh(x) cosh(x) tanh(x) asinh(x) acosh(x) atanh(x) Más matematikai függvények abs(x) sqrt(x) real(x) imag(x) round(x) fix(x) floor(x) ceil(x) sign(x) exp(x) log(x) log10(x) sort(x) sum(x) max(x) min(x)
Pl. cos(2+3i) = -4.1896 – 9.1092i acos(0.5) = 1.0472 acos(3) = 0 + 1.7627i See the MATLAB help for more details!!!
Megjegyzés x abszolút értéke x négyzetgyöke Az x komplex szám valós része Az x komplex szám imaginárius része Kerekítés a legközelebbi egészhez Zéró felé kerekítés -∞ felé kerekítés +∞ felé kerekítés. 1 if x > 0; -1 if x < 0. ex e alapú logaritmus 10-es alapú logaritmus Növekvő sorrendbe rendezi az x vektor elemeit. Ha x mátrix, akkor a rendezés oszloponként történik. Összeadja az x vektor elemeit. Ha x mátrix akkor összeadja oszlopait ( eredmény egy vektor) Megkeresi az x vektor legnagyobb elemét. Ha x mátrix, az eredmény egy sorvektor: az oszlopok maximum értékeivel 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. Pl. 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 Pl. 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 Pl. >> 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;
3x − 11x2 + 5 = 0 ha megszeretnénk oldani a 1 egyenletrendszert az er x1 + 4 x2 − 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 ; x1 , x2 , x3 ) = (− 2 x1 + 5 x3 , − (1 − sin t )x1 − x2 + 3x3 , − x1 + 2 x3 ) 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 Pl. >> x=6; >> x megjelenik: x= 6 >> disp(x) megjelenik: 6
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. Pl. 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. Pl. » 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
1 0.5
0
0
-0.5 -1
-0.5 -1
• 3D-s ábrákat lehet készíteni pl. 2 változós függvények ábrázolásával: Pl. Á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)
Pl. »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. Pl. >> 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. Pl. 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.
Pl. 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
Pl. 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’ Pl. Beírjuk EXCEL-be a következő adatokat és lementjük az a.csv állományba:
Matlabban: » dlmread('a.csv',',') ans = 1 2 3 4 5 6 7 8 9 10 11 12 Pl. » dlmread('a.csv',',',1,1) a második sor, második oszloptól olvassa be: ans = 5 6 8 9 11 12 Pl.
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: ans = 8 9 11 12 Pl. 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') ans = 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ó) Pl. » 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. Pl. >>t = ‘A+B’; >>A=1 ; >>B=2 ; >>eval(t) ans = 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). Pl. Feval(‘sin’,pi/2) megfelel a sin(pi/2)-nek Pl. 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:
Pl. 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 :
Pl. Oldjuk meg a köv. egyenletrendszert : sin( x) + y 2 + 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