Matlab alapok Baran Ágnes Elágazások, függvények Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15
Logikai kifejezések <, <=, >, >=, ==, = (két mátrixra is alkalmazhatóak, ilyenkor elemenként történik az összehasonĺıtás) A&B, A B, A, xor(a,b) (az kiértékelés elemenként) Logikai függvények all(a) egy sorvektorral tér vissza, oszloponként megvizsgálja, hogy minden elem 0-tól különböző-e (ugyanaz, mint all(a,1)) all(a,2) egy oszlopvektorral tér vissza, soronként megvizsgálja, hogy minden elem 0-tól különböző-e any(a) egy sorvektorral tér vissza, oszloponként megvizsgálja, hogy van-e 0-tól különböző elem (ugyanaz, mint any(a,1)) any(a,2) egy oszlopvektorral tér vissza, soronként megvizsgálja, hogy van-e 0-tól különböző elem Baran Ágnes Matlab alapok Elágazások, függvények 2 / 15
Logikai függvények ind=find(a) a nemnulla elemek sorszámaival tér vissza, ahol az elemek számozása oszlopfolytonosan történik. Ha A egy sorvektor, akkor a visszaadott érték is az, egyébként oszlopvektor ind=find(a,n) az A első n darab nemnulla elemének sorszámával tér vissza ind=find(a,n,last) az A utolsó n darab nemnulla elemének sorszámával tér vissza [rowi,coli]=find(a) a nemnulla elemek sor- és oszlopindexeivel tér vissza [rowi,coli,elem]=find(a) a nemnulla elemek sor- és oszlopindexeivel, illetve a nemnulla elemekkel tér vissza Baran Ágnes Matlab alapok Elágazások, függvények 3 / 15
Logikai függvények A find függvény argumentumába A helyett bármilyen logikai kifejezés is beírható, pl: find(a<=b) find(a==5) find(a>5,4) find(a>5,4,last) find(a<5 & A>4) find(abs(a-2)<=0.01) logical(a) egy logikai tömbbel tér vissza: az A nemnulla elemeinek a logikai 1, a nulla elemeknek a logikai 0 felel meg Baran Ágnes Matlab alapok Elágazások, függvények 4 / 15
Elágazások, if-else if logikai kifejezés utasítások elseif logikai kifejezés utasítások else utasítások Példa N=input('Adjon meg egy egesz szamot: '); if mod(n,7)==0 disp('oszthato 7-tel'); elseif mod(n,13)==0 disp('oszthato 13-mal'); else disp('sem 7-tel sem 13-mal nem oszthato'); Baran Ágnes Matlab alapok Elágazások, függvények 5 / 15
switch switch kifejezés case kifejezés utasítások case kifejezés utasítások... otherwise utasítások Baran Ágnes Matlab alapok Elágazások, függvények 6 / 15
for-ciklus for ciklusvaltozo=vektor utasitasok Példák s=0; for i=1:100 s=s+i; s=100; for i=98:-2:2 s=s+i; a=[4 2-1 5]; s=0; for i=a s=s+1/i; Baran Ágnes Matlab alapok Elágazások, függvények 7 / 15
while-ciklus while logikai kifejezés utasitasok Példa n=input('n= '); F=[1, 1, zeros(1,n-2)]; i=2; while i<n F(i+1)=F(i)+F(i-1); i=i+1; S=['A Fibonacci-sorozat elso ' num2str(n) ' tagja:']; disp(s); disp(f); Baran Ágnes Matlab alapok Elágazások, függvények 8 / 15
Vezérlő utasítások break kilép az aktuális for- vagy while-ciklusból (csak a legbelsőből) continue a for- vagy while-ciklus következő lépésével folytatja pause billentyűlenyomásig felfüggeszti a program futását pause(n) n másodpercre felfüggeszti a program futását return leálĺıtja az m-fájl futását error( uzenet ) az m-fájl futása uzenet hibaüzenettel befejeződik Baran Ágnes Matlab alapok Elágazások, függvények 9 / 15
Függvények írása A Matlab-függvények szerkezete: function kimenovaltozok=fvneve(bemenovaltozok) utasitasok Fontos! A fenti függvényt fvneve.m néven kell elmenteni. Példák. function y=masodf(x) y=2*x.ˆ 2-3*x+5; Ekkor a y=masodf(x) utasítás eredménye a 2x 2 3x + 5 kifejezés értéke, ahol x akár vektor, vagy mátrix is lehet, ebben az esetben a függvény elemenként hajtódik végre és, y is vektor, vagy mátrix (ezt az teszi lehetővé, hogy a fv-ben minden művelet végrehajtható mátrixokra is, mivel a négyzetreemelés jele elé kitettük a. jelet) Baran Ágnes Matlab alapok Elágazások, függvények 10 / 15
Példa. Nemnegatív számok geometriai, számtani és négyzetes közepe. function [G,A,N]=kozepek(x) if all(x>=0) A=mean(x); N=sqrt(mean(x.^2)); G=nthroot(prod(x),length(x)); else error('a vektornak van negativ eleme') Hívása pl.: [k1,k2,k3]=kozepek(x) (mindhárom közepet visszaadja) k=kozepek(x) (csak az elsőt) [M,S]=kozepek(x) (csak az első kettőt) [,,k]=kozepek(x) (csak a harmadikat) Baran Ágnes Matlab alapok Elágazások, függvények 11 / 15
Anoním függvények, function handle Függvényeket definiálhatunk parancssorban is: >> f1= @(x) x.*sin(x); Ilyen módon az f 1(x) = x sin(x) függvényt definiáltuk, hívása pl.: >> y=f1(pi/4) y= 0.5554 A @ szimbólum után zárójelben szerepelnek a függvény változói (most x), ezt követi a függvény (ez egy ú.n. anoním függvény). Az = baloldalán szereplő változó (most f1) egy ú.n.,,function handle típusú változó lesz. Baran Ágnes Matlab alapok Elágazások, függvények 12 / 15
Akár többváltozós függvényeket is megadhatunk így: >> f2= @(x,y) x.^2+x.*y-y+3; Ekkor pl. >> z=f2(2,-1) z= 6 A function handle tárolja azon változók értékét is, amelyek szükségesek a függvény kiértékeléséhez: >> a=2.5; b=3; >> f3= @(x) a*sin(x)+b*cos(x); >> y=f3(-4) y= -0.0689 >> clear a b >> y=f3(-4) y= -0.0689 Baran Ágnes Matlab alapok Elágazások, függvények 13 / 15
Feladatok Legyen x = [0 1 2 0 4 4] és y = [ 1 2 3 1 0 4]. Vizsgálja meg az alábbi logikai kifejezések értékét! (1) x == y (2) x <= y (3) x > y (4) x > 0 (5) y <= 3 (6) x y (7) x&y Az előző feladat vektoraival vizsgálja meg az alábbi kifejezések értékét (1) find(x == y) (2) find(x <= y) Legyen a=rand(1,20) Készítse el azt a b vektort, amely az a 0.5-nél nagyobb elemeit tartalmazza! Baran Ágnes Matlab alapok Elágazások, függvények 14 / 15
Feladatok Írjon egy-egy Matlab függvényt, amely tetszőleges n esetén előálĺıtja az alábbi mátrixokat n n-es méretben! 1 0 0 0 0 2 2 2 2 2 0 2 0 0 0 A = 3 0 3 0 0 0 6 0 4 0, B = 0 2 2 2 2 0 0 2 2 2 0 0 0 2 2 0 0 9 0 5 0 0 0 0 2 Írjon egy függvényt, mely adott A mátrix esetén előálĺıtja azt a B mátrixot, amelyet úgy kapunk, hogy az A minden sorának végére odaírjuk az abban a sorban álló elemek átlagát! Baran Ágnes Matlab alapok Elágazások, függvények 15 / 15
Feladatok Írjon egy Matlab függvényt, amely adott a és x 0 pozitív valós számok és n pozitív egész szám esetén előálĺıtja az x k+1 = 1 ) (x k + axk, k = 0, 1,... 2 sorozat x n tagját! Írjon két függvényt, melyek adott x vektor esetén kiszámítják azt az y vektort, melynek minden koordinátája 1-gyel nagyobb az x vektor megfelelő koordinátájánál! Az első függvényben for-ciklussal koordinátánként végezze a műveletet, a másodikban használja a vektorizált alakot (y=x+1). Mérje le a futási időket akkor, amikor a függvényeket egy 1000000 elemű véletlen vektorral hívja! (Használja a tic és toc függvényeket.) Baran Ágnes Matlab alapok Elágazások, függvények 16 / 15