MATLAB 4. gyakorlat Lineáris egyenletrendszerek, leképezések
Menetrend Kis ZH MATLAB függvények Lineáris egyenletrendszerek Lineáris leképezések
Kis ZH pdf
MATLAB függvények a szkriptekhez hasonlóan az Editorban készülnek.m kiterjesztés, NE kezdődjön számmal a fájlnév, NE legyen benne space és NE egyezzen meg beépített függvény nevével (pl. plot.m) function kulcsszóval kezdődik, end zárja le bemenő paraméterek és lehetséges kimenetek saját, lokális scope (a nem visszatérési értékként megadott változók csak a függvény futása alatt léteznek)
peldafv.m function kimenet = peldafv(bemenet1, bemenet2) % Példafüggvény help bejegyzése. A két bemenő % paraméter tetszőleges szám lehet, a kimenet % ezek összege. end kulonbseg = bemenet1 bemenet2; kimenet = bemenet1 + bemenet2; 1. help peldafv 2. hívjuk meg a függvényt: osszeg = peldafv(2.3, 5.6); 3. Mi van a Workspace-ben?
Példa 1. Írjunk függvényt, amely két bemenő paraméterrel és egy visszatérési értékkel rendelkezik. A bemenő paraméterek közül az első egy mátrix, a második pedig egy egész szám 1 és 3 között. A függvény a második bemenő paraméter értéke alapján a következőket adja vissza: 1 esetén az első paraméterként kapott mátrix rangját 2 esetén a mátrix determinánsát 3 esetén a mátrix inverzét A feltételvizsgálathoz switch struktúrát használjunk!
Megoldás 1. function kimenet = MatrixMuv(matrix, kapcsolo) end switch kapcsolo case 1 kimenet = rank(matrix); case 2 kimenet = det(matrix); case 3 kimenet = inv(matrix); otherwise error('hibás kapcsoló érték.'); end
Megoldás 1. - ellenőrzés >> M = [3 2 7;8 10 23;15 4 1]; >> M_rang = MatrixMuv(M,1) M_rang = 3 >> M_det = MatrixMuv(M,2) M_det = -398.0000 >> M_inv = MatrixMuv(M,3) M_inv = 0.2060-0.0653 0.0603-0.8467 0.2563 0.0327 0.2965-0.0452-0.0352 >> M*M_inv ans = 1.0000 0-0.0000 0.0000 1.0000-0.0000 0.0000-0.0000 1.0000
Lineáris egyenletrendszerek ( ax+by+cz=d ex+ fy+ gz=h ix+ jy+kz=l ) ( a11 x1+a12 x2+a13 x3=b1 a 21 x 1 +a 22 x 2 +a 23 x 3 =b 2 a 31 x 1 +a 32 x 2 +a 33 x 3 =b 3 ) A x=b A 1 A x=a 1 b x= A 1 b
Példa 2. Anna, Béla és Cili Münchenbe utaznak a hétvégére vonattal. Amint leszállnak a RailJet-ről, elhatározzák, hogy gyümölcsöt vesznek. Be is térnek az első kisboltba, ahol: Anna vásárol három almát, 12 banánt és egy narancsot, összesen 2.36 EUR-ért. Béla 12 almát és két narancsot vesz 5.26 EUR-ért. Cili két banánt és három narancsot vesz 2.77 EUR-ért. Számoljuk ki, hogy mennyibe került az egyes gyümölcsök darabja!
Megoldás 2. >> A = [3 12 1;12 0 2;0 2 3] A = 3 12 1 12 0 2 0 2 3 >> b = [2.36;5.26;2.77] b = 2.3600 5.2600 2.7700 >> x = inv(a)*b x = 0.2900 0.0500 0.8900 >> x = A\b x = Ezt használjuk! (gyorsabb és pontosabb, mint az inv()) 0.2900 0.0500 0.8900
Példa 3. Feladat: Adjuk meg I 1, I 2 és I 3 irányát és nagyságát!
Megoldás 3. >> A = [1-1 -1;50 20 0;0-20 60] A = 1-1 -1 50 20 0 0-20 60 >> I = A\b I = -0.1346-0.3635 0.2288 >> b = [0;-14;21] b = Eredmény: 0-14 21 I 1 = 134.6 ma, a csomópontból kifelé I 2 = 363.5 ma, a csomópontba befelé I 3 = 228.8 ma, a csomópontból kifelé
Megoldás 3. - szimuláció Qucs (http://qucs.sourceforge.net/) >> I = A\b I = -0.1346-0.3635 0.2288
Lineáris leképezések Minden mátrix egy lineáris leképezésnek tekinthető. A gyakorlaton csak 2D leképezésekről lesz szó.
Példa 4. Töltsük be a house.mat fájlt és rajzoljuk ki a house változó tartalmát! Végezzük el az alábbi mátrixok által megadott transzformációkat az alakzaton és rajzoljuk ki az eredményeket egy ábrán, 4 subplotra: [ A = 0.5 0 ] 1 0 1 A 2 =[ 1 0 ] 0 0.5 A 3 = [ 0 1 0.5 0 ] A 4 = [ 0.5 0 0 1 ]
Megoldás 4. load house.mat figure(1); plot(house(:,1),house(:,2)); axis equal; title('house'); % transzformációk % elvégzése H1 = house*a1; H2 = house*a2; H3 = house*a3; H4 = house*a4;
Megoldás 4. load house.mat figure(1); plot(house(:,1),house(:,2)); axis equal; title('house'); % transzformációk % elvégzése H1 = house*a1; H2 = house*a2; H3 = house*a3; H4 = house*a4; figure(2); subplot(221); plot(h1(:,1),h1(:,2)); axis equal title('house*a1'); subplot(222); plot(h2(:,1),h2(:,2)); axis equal title('house*a2'); subplot(223); plot(h3(:,1),h3(:,2)); axis equal title('house*a3'); subplot(224); plot(h4(:,1),h4(:,2)); axis equal title('house*a4');
2D forgatás 2D esetben forgatásról a rajzolási síkra merőleges (általában Z) tengely körül beszélhetünk. Forgatási transzformációs mátrix (φ szöggel): [ R(φ)= cos(φ) sin (φ) ] sin(φ) cos(φ)
Példa 5. Rajzoljuk ki a house változó 15-15 fokkal elforgatott változatait 90 fokig! Ehhez írjunk egy for ciklust, amely minden iterációban elvégez egy kirajzolást! (az adott forgatási szöget a ciklusváltozó jelöli) A program futásának gombnyomásig történő késleltetését a pause paranccsal érhetjük el.
Megoldás 5. % ha nem lenne betöltve load house.mat figure(3); for ang = 0:15:90 % aktuális forgatási szög phi = ang; % aktuális forgatási mátrix R = [cosd(phi) -sind(phi); sind(phi) cosd(phi)]; % forgatás elvégzése HR = house*r; % kirajzolás plot(hr(:,1),hr(:,2)); xlim([-10 10]); Ylim([-10 10]); title(['forgatás ' num2str(ang) ' fokkal']); end % a futás megállítása tetszőleges % billentyű megnyomásáig pause;