KURZUS: Számítási módszerek
MODUL: Matematikai számítások MATLAB-bal
2. lecke Mátrixok/1
Cél: Mint már tudjuk, a MATLAB alapvetően mátrixokkal számol és dolgozik. Bármilyen konkrét problémát is kapunk, a MATLAB-bal végzett munkánk során elengedhetetlen lesz a mátrixok kezelésének megfelelő szintű ismerete. A mostani (és a következő) lecke ezt az alapot nyújtja Önnek. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Javasoljuk, hogy a helyenként talán túl technikainak (unalmasnak) tűnő részletek ellenére is nyitottan, pozitív szemlélettel forduljon ehhez az anyagrészhez. Az itt befektetett energia az alkalmazásoknál bőségesen kamatozik majd. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Követelmények: Ön akkor sajátította el megfelelően a tananyagot, ha (a MATLAB segítségével) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
Időszükséglet: A tananyag elsajátításához (a feladatok megoldásával együtt) hozzávetőlegesen 5 órára lesz szüksége. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Kulcsfogalmak | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixok megadása, hivatkozások | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A mátrix a MATLAB alapvető adattípusa (adathordozója), ezért a mátrixokkal végzett műveletek kiemelkedő fontosságúak lesznek a későbbi, összetettebb problémák megoldása során is. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A következőkben szisztematikusan bemutatjuk a mátrixok kezelésével kapcsolatos tudnivalókat. A lecke későbbi felhasználás esetén "referencia kézikönyvként" is szolgálhat. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixok létrehozása, betöltése | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Már a MATLAB-bal való ismerkedésünk kezdeteinél is megfigyelhettük, hogy a rendszer egy kis csomagszerű ikont használ a Workspace ablakban az általunk létrehozott változók szimbólumaként. Ez jelzi azt, hogy létrejött egy mátrix objektum (függetlenül attól, hogy a felhasználó esetleg csak a pi értékét akarta megtudni, még a számológépszintű használat során - ekkor az eredmény egy 1×1-es mátrixba került). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Általánosabban persze a (kétdimenziós) mátrix a MATLAB-ban is egy olyan számtáblázat, amely n sort és m oszlopot tartalmaz. Ha a mátrixnak speciálisan csak egy oszlopa, ill. egy sora van, akkor (oszlop-, ill. sor)vektorról beszélünk. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A MATLAB-ban a mátrixok megadására a következő lehetőségek használhatók: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
A lehetőségek többségét most áttekintjük, 3. csoport egyes opcióit a lecke későbbi részében tanuljuk, és a kisebb mátrixokból való összerakásra is visszatérünk még. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A megadás legegyszerűbb lehetősége az elemek direkt felsorolása (ez a módszer nyilvánvalóan csak kisebb mátrixokra használható), szögletes zárójelek között. Ilyenkor a sor- és oszlop szerinti tagolást/struktúrát is jeleznünk kell a MATLAB számára. A sorok végét a pontosvessző jelzi, soron belüli tagolásra a vessző használható, de ez el is hagyható (ez esetben a szóköz szeparál). A legutolsó elem után nincs pontosvessző! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1, 2; 3, 4] | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A méretmegadásnál konzekvensnek kell lennünk: mátrixba nem illeszthető struktúra esetén hibaüzenetet ad a MATLAB. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> B = [1 2; 3 4 5] | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Kisebb vektorok megadásánál is az elemek felsorolása a legegyszerűbb módszer. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> a = [1; 2; 3], b = [1 2 3 4] | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Oszlopvektor megadásánál a transzponálás műveletet is használhatjuk, amely sorvektorból oszlopvektort készít és fordítva, ezzel a szeparáló pontosvesszők használata elkerülhető. (A művelet komplex elemek esetén konjugálást is végrehajt.) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> x = [0:30:180]' % a : operátor leírását lásd a köv. példánál | |||||||||||||||||||||||||||||||||||||||||||||||||||||
MATLAB-os környezetben célszerű követnünk azt a megállapodást - példáinkban mi is ezt tesszük -, hogy a vektorokat hagyományosan kisbetűvel kezdődő változóval, a mátrixot nagybetűvel kezdődő változóval azonosítjuk. (Így áttekinthetőbb írásmódhoz jutunk.) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hozzon létre az elemek felsorolásával egy olyan "a" oszlopvektort, amely növekedően tartalmazza az első négy prímszámot! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hozzon létre az elemek felsorolásával egy olyan "b" sorvektort, amely növekedően tartalmazza az első négy pozitív páros számot! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Sok esetben kifejezést is használhatunk az elemek megadásához. A kettőspont operátor sorozatok előállítására alkalmas, itt az első és az utolsó elemet kell megadni (alapesetben 1-lépésközű sorozatot generál). Második paraméterként lépésköz is megadható, ha az nem 1 (természetesen az 1 lépésközt is kiírhatjuk). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> a = [1:5], b = [10:5:30] | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hasonlóan működik a linspace operátor is. Ez esetben a sorozat első és utolsó elemét, ill. a generálandó elemek számát kell megadni. Ha ez utóbbit elhagyjuk, akkor 100 elemű sorozat jön létre. A MATLAB automatikusan egyenlő felosztást alkalmaz. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> c = linspace(2, 10, 9) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hozza létre a kettőspont operátor segítségével a következő j vektort: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
j = | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hozza létre a linspace parancs segítségével a következő s vektort: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
s = | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ha a mátrixok/vektorok megadásánál az elemek típusa különböző, akkor ez az elemek konverziójához vezet, ami túlcsordulást is eredményezhet: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [eps*1e16, pi; 2, floor(now())/2014] % mind double | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Tanulságként levonható, hogy a mátrix elemeinek megadásakor lehetőleg ne keverjük az elemek típusát, mert úgyis konverzió következik be, és ez többnyire információvesztéssel jár. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ellenőrizze a megfelelő paranccsal a fenti mátrixok, illetve vektorok típusát és helyfoglalását! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A c vektor esetén nem közöltük a rendszer válaszát. Próbálja meg először MATLAB használata nélkül előállítani az eredménymátrixot! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A létrehozott mátrixok/vektorok méretjellemzői lekérdezhetők. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> size(A), length(A) % a length ilyenkor a nagyobb méretet adja | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A MATLAB-ban üres mátrix, illetve vektor is megadható, szándékosan (pl. ciklusban, kezdőértékként), vagy akár hibás használat következményeként is. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> C = [], size(C), d = [1:0] | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixok feltöltésére a Variable Editor is lehetőséget ad. Új mátrix létrehozásához üssünk a Workspace ablakban CTRL+N-et. Ekkor egy "unnamed" mátrixobjektum keletkezik, ami kezdetben 1×1-es és egy darab 0-s elemet tartalmaz. Erre duplán rákattintva az új mátrix egy Excel-szerű környezetben a szükséges adatokkal feltölthető. Megfigyelhető, hogy ha új sort vagy oszlopot nyitunk, akkor a MATLAB a teljes sort/oszlopot 0-val tölti fel azokon a részeken, ahol még nem adtunk meg értéket. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A feltöltés után az "unnamed" objektumot célszerű átnevezni. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Természetesen már létező mátrixot is átszerkeszthetünk (bővíthetünk) a Variable Editorral. Ez esetben a már létező névre kell duplán kattintani a Workspace ablakban. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hozzon létre a Variable Editor segítségével egy 3×3-as C mátrixot, amely az első 9 pozitív egész számot tartalmazza. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixok létrehozásának következő lehetősége a darabokból való összerakás ("építkezés"). Ezt a technikát igen gyakran alkalmazzák MATLAB környezetben, bonyolultabb módokon is (a mi tananyagunkban is szerepelnek később még ilyen példák). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Az építkezéses megadásnál nagyon figyelnünk kell az összeilleszthetőségre! Elméletileg gondolkodhatunk sor- vagy oszlopstruktúrában, és a sorrend is felcserélhető. (Az eredmény az utóbbi esetben is más és más lehet, az egymás mellé rakás nem kommutatív művelet.) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1, 2; 3, 4], B = [2.5; 4.5] | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hozzon létre két különböző 2×2-es mátrixot (A és B). Illessze őket össze az összes lehetséges módon (egymás mellé és egymás alá, összesen 4 lehetőség). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Már létező mátrix bővítésével is előállíthatunk új mátrixot. A bővítés történhet sor- vagy oszlopfolytonosan (merge, illetve append művelet; természetesen a megfelelő illeszkedési szabályok betartásával). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> F = [A [10; 20]] % merge: oszlopokkal bővítés | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hozzon létre egy 3×3-es mátrixot. Bővítse egy sorral, majd egy oszloppal. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Bár a mátrixok elemeinek hivatkozásaival a következő alfejezetben foglalkozunk, már itt is alkalmazzuk a részmátrix-hivatkozást, amelynek segítségével új mátrix is létrehozható (darabolás). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> D = A(1:2, 1) % vagy: D = A(:,1), teljes részhiv. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Természetesen több különböző, már létező mátrix darabjaiból is építkezhetünk, ezt a lehetőséget a hivatkozásoknál tárgyaljuk. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Adatok betöltése, mentése | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A külső fájlból való adatbetöltés is létrehozásnak minősül, hiszen a MATLAB-ban konkrétan a betöltéskor jön létre az új mátrixváltozó. Nagy méretű adattömbök esetében ez a lehetőség különösen nagyon praktikus. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A külső adatok tárolhatók szöveges formátumban (pl.: .txt, .dat, .csv), vagy kódolt, bináris állományban (.mat - ez az alapértelmezés). A betöltésre a load parancs szolgál, a mentésre pedig a save. A load parancsnál megadható a forrásfájl neve, és a beolvasni kívánt változók neve (akár csoportosan, joker jelekkel). Ha nem adunk meg fájlnevet, akkor a rendszer a matlab.mat fájt próbálja betölteni az aktuális könyvtárból. Ha a változónevet nem írjuk ki, akkor az összes változó betöltődik (bináris fájl esetén). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A következő példában beolvasunk egy mátrixot (lineáris egyenletrendszer mátrixa a konstans oszlopvektorral együtt), és lekérdezzük a rangját. (A lineáris egyenletrendszerek megoldását az Excel modulban már tanultuk, itt a MATLAB modulban az 5. leckében tárgyaljuk.) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> load Ab.csv % ha változónevet nem adunk meg, akkor Ab lesz | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A save parancs is hasonlóan működik. Alapértelmezés bináris (.mat) fájlba menti az összes változót, de kérhetünk más fájltípust is (-ASCII opció), ill. lehetőségünk van a menteni kívánt változók egyedi vagy csoportos megadására (joker jelek). Egyszerű példák: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> save matrix.mat F % F mátrix mentése bináris fájlba | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A következő példában a mentésnél nem adunk meg változó, ill. fájlnevet. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> clear, A = [4 5 6; 5, 6, 8; 1 7 7], b = [23; 30; 11], save | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A rendszer tájékoztatott bennünket, hogy az alapértelmezés szerinti matlab.mat fájlba mentett (az aktuális könyvtárba). Visszatöltéssel a mentés sikere ellenőrizhető (kiírással vagy a Workspace ablakban láthatjuk a változóinkat): | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> clear, load | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mentse el az "A" betűvel kezdődő nevű MATLAB-os változóit bináris fájlba, majd törölje őket a clear paranccsal, és töltse vissza őket a mentett fájlból. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
További részletek a parancsok használatáról a súgóban olvashatók. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixok/vektorok beolvasása külső programokból, így Excelből is lehetséges. A megvalósításra az xlsread parancs szolgál. A beolvasásnál megadható a táblázatrész pozíciója, és az is, hogy melyik munkalapon helyezkedik el (részletek: súgó). Példák: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = xlsread('adatok.xls') % adatok a bal felső sarokban | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hozzon létre egy Excel munkafüzet különböző lapjain néhány mátrixot. Olvassa be a mátrixokat a MATLAB-ba az xlsread paranccsal. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hasonlóan, az xlswrite parancs Excel munkafüzetbe való mentésre szolgál. Példa: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> xlswrite('egyenlet.xls', [A b], 'Ab') | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Itt az első paraméter a fájl neve, a második paraméter a mentendő mátrix, ami kifejezéssel is megadható, a harmadik és nem kötelező paraméter a füzetlap azonosítója. A második paraméterben megadott [A b] mátrixkifejezés az A és b mátrixok egyesítését jelenti (a korábban tanult merge művelet). Így egy 3×4-es mátrixot kaptunk és ezt mentettük el. Megjegyzendő, hogy ha a paraméterként megadott füzetlap nem létezik, akkor a MATLAB azt is létrehozza. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Próbálja ki az xlswrite parancsot többféle beállítással Excel munkafüzetbe történő adatmentésre. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixok elemhivatkozásai | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixok elemeire a sor- és oszlopindex megadásával hivatkozhatunk (kerek zárójelbe írva, az elválasztásra vessző szolgál). A hivatkozás egyben értékadásra is használható. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A következő példában létrehozunk egy 3×3-as tesztmátrixot, és ezen "gyakorlatozunk". Először csak 1-1 elemet hivatkozunk, illetve módosítunk. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = ones(3); % 3×3-as csupa egyes mátrix létrehozása | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Látható, hogy a még nem létező indexű elemre vonatkozó értékadás nem okoz hibát, hanem bővíti a mátrixot. A MATLAB ilyen esetekben külön figyelmeztetés nélkül végrehajtja a műveletet (a nem definiált, de a bővülés miatt szükségszerűen bevezetendő új elemek 0-val töltődnek fel). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hozzon létre egy 3×3-as tesztmátrixot, és próbálja ki az elemhivatkozást (értékadással) létező, és nem létező indexek megadásával. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Vektoroknál (egydimenziós eset) értelemszerűen egy index megadásával dolgozunk. Az indexelés 1-től indul, sor- és oszlopvektornál egyaránt. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> b = [3:2:11]; | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Megemlítjük, hogy a hivatkozás kétdimenziós esetben is működik egy index megadásával is. Ez esetben viszont a számozás oszlopfolytonos, erre az azonosításnál figyelnünk kell! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1 2 3; 4 5 6; 7 8 9]; | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Az értékadás (és a hivatkozás) - mátrixoknál és vektoroknál egyaránt - csoportosan is végrehajtható. Ezt a technikát is gyakran alkalmazzák a MATLAB-ban, mivel így nagy méretű objektumokat is hatékonyan lehet manipulálni. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Csoportos hivatkozásra vektoroknál célszerűen a kettőspont operátort használjuk, kerek zárójelen belül. Az alkalmazásban nincs különbség a sor- és oszlopvektorok között. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> a = [4, 7, 2, 1, 8, 3]; a(2:4) = 0 % több elem azonos értékű lesz | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ha több elemnek különböző értéket akarunk adni, akkor a megadott elemszámoknak pontosan egyezni kell, ellenkező esetben hibát kapunk. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> a([5, 6]) = [10, 20] | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ez a technika elemek fizikai törlésére is felhasználható, ilyenkor azonban a vektor mindig rövidül! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> a(1:2)=[] | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixoknál a csoportos hivatkozás lehetőségei a következők: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A(s_ind, :) % teljes sor | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Figyelje meg a hivatkozásoknál a kettőspont operátor szerepét! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Példák: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1 2 3; 4 5 6; 7 8 9]; | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Legyen B = [1:4; 5:8; 9:12; 13:16]. Adja meg a megfelelő hivatkozással | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
A részmátrix-hivatkozások is felhasználhatók mátrixok összeillesztésére, azaz a korábban bemutatottakhoz hasonló típusú feladatok megoldására. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Legyen C = [1 1; 2 2] és D = [3 3; 3 3; 3 3]. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
E = | |||||||||||||||||||||||||||||||||||||||||||||||||||||
mátrixot. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
E = | |||||||||||||||||||||||||||||||||||||||||||||||||||||
mátrixot. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Példa csoportos értékadásra (az A mátrix jobb felső sarokrészét nullázzuk, egy 2×2-es csupanulla mátrixszal): | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A(1:2, [2:3]) = zeros(2) % a [ ] kiírható, vagy elhagyható | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Nullázza ki az A mátrix bal alsó sarokrészét (2×2-es részmátrix). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A csoportos értékadás a mátrix struktúrájának módosítására is felhasználható (pl. oszlopok, sorok eltolása, bővítéssel és felülírással is). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1 2 3; 4 5 6; 7 8 9]; | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Az A mátrixon hajtsa végre azt az értékadást, hogy a 2 és 3. sorok tartalmát másolja a 3. és 4. sorokba. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A fizikai törlés műveleténél eltérés van a vektorokhoz képest: itt vigyáznunk kell arra, hogy mátrixból csak teljes sor vagy oszlop törölhető, egyéb, "hiányos" rész nem ("lyukas" mátrix nem megengedett). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A(1, 1)=[] % a törlés nem végrehajtható (egy elem) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Komplex számokat tartalmazó mátrixok (vektorok) is ugyanígy kezelhetők, a műveletek a fentiek. Csak egy példát nézünk meg: létrehozunk egy komplex sorvektort és több lépésben bővítjük. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> z = 5*exp(i*[0:pi/4:pi]') | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Az utolsó művelet eredményét nem közöltük. Állítsa elő önállóan a végső z-t. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Műveletek mátrixokkal | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrix-skalárműveletek | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A mátrixokkal végzett skalárműveletek általános jellemzője, hogy a mátrix minden elemén (elemenként) végrehajtódnak. Kivételként rögtön a hatványozásra gondolhatunk, de a hatványozás valójában a mátrix önmagával végzett szorzása. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A műveletek alkalmazása egyszerű, nem tartogat meglepetést. Az összeadás és a (skalárral való) szorzás kommutatív (a kivonás és az osztás nyilvánvalóan nem). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1, 2; 3, 4]; A + 2 % c + A = A + c | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Állítsa elő a MATLAB-bal az A - 2 mátrixot. Hogyan értelmezhető a 2 - A mátrix? Írja le füzetébe, majd ellenőrizze a MATLAB-bal. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Az összeadást és a kivonást (skalárműveletek) úgy is tekinthetjük, hogy a MATLAB a konstansból készít egy, a megadott mátrixszal azonos méretű konstansmátrixot, és a két mátrixszal végzi el a műveletet. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A*0.5 % c*A = A*c | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A skalárral való osztás a skalár reciprokával való szorzást jelenti, tehát az A/c helyett az A*1/c is írható. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Állítsa elő a MATLAB-bal az A/3 mátrixot. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrix-mátrixműveletek: összeadás, kivonás, transzponálás | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A mátrixok között végzett összeadásnál, ill. kivonásnál figyelnünk kell arra, hogy csak azonos méretű mátrixok/vektorok adhatók össze, vagy vonhatók ki egymásból. Méreteltérésnél hibaüzenetet kapunk. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A következő példában egy 2×3-as csupaegyes-mátrix felhasználásával mutatunk be összeadási és kivonási műveleteket. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = ones(2,3); A2 = A + A, A1 = A2 - 2*A | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A transzponálás műveletet már korábban is használtuk példáinkban. Ez a mátrix főátlóra való tükrözését jelenti, azaz a sorok és oszlopok felcserélődnek. (Ha a mátrixban komplex elemek is vannak, akkor azokra a rendszer konjugálást is végrehajt.) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> B = [1, 2; 3, 4; 5, 6], B' % 2×3-as mátrix transzponáltja 3×2-es | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Vegyen fel a MATLAB-ban egy 3×2-es, komplex számokat tartalmazó mátrixot. Transzponálja (transzponálás konjugálás művelet). Ellenőrizze az eredményt! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixok szorzása | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Idézze fel, hogy mit tanultunk a mátrixok összeszorozhatóságáról az Excel modulban! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Két mátrix pontosan akkor szorozható össze, ha az első oszlopainak száma a második tényező sorainak számával egyezik meg. Az eredmény egy olyan mátrix, amelynek annyi sora van, mint az első mátrixnak volt, és annyi oszlopa, amennyi a másodiknak. (A jobb áttekinthetőség céljából érdemes rajzolni!) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A méretek képletformában: [m; n] × [p; q] [m; q] és n = p (első méret: sorok száma) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mindezt végiggondolva láthatjuk, hogy a mátrixok szorzása "nagyon nem kommutatív" művelet: előfordulhat, hogy végrehajtható, de nem; lehet az is, hogy mindkét szorzat létezik, de . | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A következő példában két csupaegyes-mátrixot próbálunk összeszorozni. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> ones(2, 3)*ones(3, 4) % 2×3-as és 3×4-es, összeszorozható, méret 2×4 lesz | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hogy a bemutatott hibát elkerüljük, a szorzás végrehajtása előtt mindig célszerű ellenőrizni (lehet fejben is), hogy a művelet elvégezhető-e, és ha igen, akkor mekkora lesz az eredménymátrix. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Az A = ones(3, 2) és a B = magic(4) mátrixokat szeretnénk A × B módon összeszorozni. Az A mátrix melyik méretét és mennyire kellene változtatni, hogy ez sikerülhessen? | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ha a MATLAB-bal szeretnénk ellenőrizni az összeszorozhatóságot, akkor a size (illetve a length) függvényt használhatjuk. Lekérdezhetjük egyszerre egy mátrix sor- és oszlopméretét, de megadható az is, hogy melyik dimenzió szerinti méretre vagyunk kíváncsiak. Például egy 3×2-es A mátrix esetén size(A, 1) = 3 és size(A, 2) = 2 lesz. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Így az A és B mátrixok összeszorozhatósága eldönthető a következő hasonlítással: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> size(A, 2) == size(B, 1) % belső indexek azonosak-e? | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ha ez teljesül, akkor a C = A*B mátrix mérete: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
[size(A, 1) size(B, 2)] % külső indexek | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A length függvénnyel a következő módon kérdezhetők le a méretek méretek (itt D egy 7×5-ös mátrix): | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> meret=size(D), sorok=length(D(:,1)), oszlopok=length(D(1,:)) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Legyen A = [1:3; 4:6; 7:9], B = ones(3). Ellenőrizze, hogy egyenlő-e az A*B és B*A szorzat. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hajtsa végre ugyanezt a | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Speciális mátrixokra a szorzatmátrix is lehet speciális tulajdonságú. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Idézze fel, hogy mit tanultunk a lineáris transzformációk alkalmazásáról (mátrixszorzás; bázisvektorok transzformáltjai) az Excel számítások modulban! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Következő példánkban egy véletlen mátrixot generálunk, és - az Excel számítások modulban már megismert - egyszerű transzformációs mátrixokat (swap - csere, sorokra és oszlopokra) alkalmazunk rá. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> X = randi([1 19], 3) % véletlen mátrix generálása (határok, méret) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Legyenek a transzformációs mátrixok a következők: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
SW12 = [0 1 0; 1 0 0; 0 0 1], SW13 = [0 0 1; 0 1 0; 1 0 0], SW23 =[1 0 0; 0 0 1; 0 1 0]. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Az SW12*X szorzat felcseréli az X mátrix 1. és 2. sorát (a második tényező természetesen nemcsak mátrix, hanem vektor is lehet). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> SW12 = [0 1 0; 1 0 0; 0 0 1]; SW12*X | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ellenőrizze, hogy a többi swap mátrixszal balról történő szorzás szintén felcseréli az X mátrix megfelelő sorait! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mi történik, ha az SW mátrixokkal jobbról szorozzuk az X mátrixot? | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Négyzetes mátrixokra értelmezett a hatványozás művelete, amely technikailag a mátrix önmagával való szorzását jelenti. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1 2 3; 4 5 6; 7 8 9]; | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Magasabb kitevős hatványok is hasonló módon képezhetők. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ellenőrizze, hogy egy adott SW mátrix páros kitevős hatványa az egységmátrixot adja, amely a helybenhagyás művelet. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mi lesz az SW mátrixok páratlan kitevős hatványa? | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Pontozott mátrixműveletek | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A MATLAB az azonos méretű mátrixok (vektorok) között megengedi az elempáronkénti műveleteket. Ezek hasonlóak az Excel blokkok (tartományok) között elempáronként elvégezhető műveletekhez. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A MATLAB-ban az elempáronként végrehajtható műveletek a következők (a hagyományostól eltérő végrehajtást a műveleti operátorjel elé írt pont minősítővel jelezzük): | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mint korábban, itt is érvényes, hogyha az egyik operandus skalár, akkor a végrehajtás során valójában a másik operandusnak megfelelő méretű és csupa azonos elemből álló mátrix képződik, és ezzel dolgozik a MATLAB. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A pontozott transzponálás és a sima transzponálás között csak annyi a különbség, hogy a komplex elemek konjugálása az elsőnél nem történik meg, sima transzponáláskor viszont igen. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Néhány példa a pontozott műveletekre: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1 2; 3 4]; | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Adott a C és az A = [1 5; 2 3] mátrix. Állítsa elő a B mátrixot, ha... | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Hajtsa végre a MATLAB-bal a következő parancsokat! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> T = exp(i*[0:pi/3:pi]') | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Értelmezze az eredményt! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A pontozott műveleteket elsősorban a függvények kiszámításánál használjuk. Ilyenkor szinte minden esetben az elempáronkénti végrehajtás szükséges, és a pontnélküli kifejezés tipikusan hibaüzenetet generálhat (illetve nem feltétlenül az történik, amit szeretnénk)! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Tegyük fel például, hogy a sin(x)*x függvényt akarjuk ábrázolni (a függvényábrázolás feladatát részletezően lásd később), és ehhez szeretnénk készíteni egy alappont-vektort és egy függvényérték-vektort. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> x = 0:pi/4:pi | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Próbálja ki ugyanezt a sin(x)/x és a sin(x)./x műveletekkel is! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Osztási művelet mátrixokra (inverzek) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A MATLAB a mátrixszal való osztást valamilyen inverzzel való szorzással hajtja végre. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Idézze fel, hogy mit tanultunk a mátrixok inverzének létezéséről és meghatározásáról az Excel számítások modulban! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Tudjuk, hogy valódi inverz (inv parancs) akkor létezik, ha a - négyzetes - mátrix determinánsa 0, ill. ha a mátrix rangja megegyezik a sorainak (oszlopainak) számával. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Legyen E = [1 2; 3 a]. Válasszuk meg az a paraméter értékét úgy, hogy a mátrix rangja | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> E = [1 2; 3 6] % a 2. oszlopvektor az 1. kétszerese | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Az inverz mátrixra teljesül, hogy , ahol az egységmátrix. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> inv(E)*E | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Megjegyezzük, hogy ha mindkét mérőeszköz használható (a rang és a determináns is), akkor az előbbit célszerű alkalmazni. A determinánsszámítás ugyanis numerikus rendszerekben adhat nullához nagyon közeli kis értéket, amiről önmagában nehéz lehet eldönteni, hogy valójában nulla (csak a kerekítési pontatlanságok miatt látszik nullától különbözőnek), vagy nem nulla. A problémára még visszatérünk a lineáris egyenletek kapcsán. (Eml.: Az Excelben nem volt választásunk, ott csak a determinánsszámítást használhattuk.) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Emlékeztetünk arra (Excel számítások modul, 1. lecke), hogy mivel az inverz az adjungált mátrix elemeinek a determinánssal való osztásával áll elő, ezért - a determináns jegyeitől függően - a MATLAB-ban is kérhetünk pontos törtes megjelenítést az inverzre. Az Exceltől eltérően a valódi tört formátum itt nemcsak 3, hanem több jegyre is alkalmazott. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> C = [-50 -81 87; -22 -38 33; 45 -18 -98] | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Egyes speciális esetekben az inverz mátrix lehet speciális alakú. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> P = [1 1 1; 1 2 3; 1 3 6] % Pascal-mátrix, lásd később is | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Határozza meg a korábban tanult SW12 = [0 1 0; 1 0 0; 0 0 1] mátrix inverzét a MATLAB-bal! Magyarázza meg az eredményt! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ha valódi inverz nem létezik (azaz: a rang meghatározása alapján látjuk), de mi ennek ellenére mégis kiadjuk az inv parancsot, akkor hiba- vagy figyelmeztető üzenetet kapunk kapunk (miszerint a mátrix szinguláris vagy közel szinguláris) és az eredmény egy hibás mátrix lesz. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> E = [1 2; 3 6]; inv(E) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A valódi inverznél általánosabban értelmezett a bal- és a jobbinverz. Ezek nem négyzetes mátrixokra is bevezethetők. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Egy A (általános) mátrix B bal-, illetve J jobbinverze definíció szerint az a nem feltétlenül négyzetes mátrix, amelyre teljesül, hogy , illetve (itt E a megfelelő méretű négyzetes egységmátrix). A bal- és a jobbinverz létezésének az a feltétele, hogy a mátrix teljes rangú legyen (azaz a "szélső" mérete egyezzen meg a rangjával és ez legyen a megfelelő egységmátrix rangja is). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A balinverz és a jobbinverz általában nem egyértelmű (több alkalmas mátrix is választható). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Példa: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1 2 3; 4 5 6]; % kiinduló 2×3-as mátrix | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Legyen B = [1; 2]. Válassza meg a C = [a, b] mátrixban (vektorban) az a és b együtthatókat úgy, hogy C a B mátrix balinverze legyen! Hány megfelelő C mátrix található? | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A bal- és a jobbinverz előállításához célszerűen a \ (balosztó, mldivide) és a / (jobbosztó, mrdivide) műveletek használhatóak. Ezek a MATLAB-ban nagyon fontos szerephez jutnak és igen gyakran alkalmazottak. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Olvassa el a MATLAB súgóban az mldivide és az mrdivide műveletekhez tartozó szócikket! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A\B elvégezhetőségéhez szükséges, hogy A és B sorainak száma megegyezzen, A/B-nél pedig hasonlóan az kell, hogy A-nak és B-nek azonos számú oszlopa legyen. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ellenőrizze a szorzásszabály alapján ezeket a kijelentéseket! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Az eredmény a lineáris egyenletrendszerek megoldási technikájával értelmezhető (lásd még később is). Például ha A egy n×n-es mátrix és B egy n-elemű oszlopvektor, akkor X = A\B az AX = B egyenletrendszer megoldása (eltekintve persze attól az esettől, amikor A szinguláris). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ha csak mátrixokban gondolkodunk, akkor mondhatjuk a következőket: ha A és B is megfelelő méretű, nem feltétlenül négyzetes mátrix, akkor A\B eredménye egy olyan X mátrix, amelyre AX = B, A/B eredménye egy olyan Y mátrix, amelyre YB = A. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Egy egyszerű példa négyzetes mátrixokra: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1 2; 3 4]; B = [5 4; 3 2]; | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ugyanehhez az A és B mátrixhoz keressen egy olyan D mátrixot, amelyre D*B = A teljesül. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A fenti mátrixegyenleteket felhasználhatjuk bal- és jobbinverz előállítására is, ha a jobb oldalra a megfelelő méretű egységmátrixot (E; előállítása az eye paranccsal) írjuk. Eszerint egy A mátrix (egy) jobbinverze előállítható a megfelelő méretű egységmátrix felhasználásával A\E alakban, a (pontosabban: egy) balinverz pedig E/A alakban (ha léteznek). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [1 2 3; 4 5 6]; | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ugyanezzel a technikával megpróbálunk ehhez az A-hoz balinverzet is készíteni, de ez nem lesz sikeres, ugyanis balinverz nem is létezik, mert A rangja most nem a szélső méret: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> B = eye(3)/A % balinverz konstrukció (próba) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ellenőrizze, hogy a most kapott B valójában egy újabb jobbinverz! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ha egy mátrixnak egyszerre létezik bal- és jobbinverze, akkor azok megegyeznek, és a mátrix ilyenkor négyzetes. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> B = [4 2 5; 1 -1 4; 4 0 2]; rank(B) % a mátrix invertálható | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A műveletekre érvényes B/A = (A'\ B')' is (ha a megfelelő mátrixok léteznek). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> D = A/B | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A pszeudoinverz is egy, a valódi inverznél jóval általánosabb inverzfogalom, itt a cél a szinguláris együttható mátrixszal rendelkező lineáris egyenletrendszerek valamilyen szempontból optimális (pl. legjobban közelítő) megoldása. (Tehát eltérően a bal- és jobbinverztől, a pszeudoinverz nem teljes rangú esetekben is értelmezhető.) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Idézze fel, hogy mit tanultunk a Moore-Penrose-féle kváziinverzről - és a lineáris egyenletrendszerek megoldásáról - az Excel számítások modulban (2. lecke)! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ahogy már tanultuk, a kváziinverz az vagy az képlettel számolható ki, attól függően, hogy az egyenletrendszert leíró mátrix összefüggő vagy túlhatározott. Szerencsére a MATLAB-ban a számolásra létezik beépített függvény, a pinv, a képleteket tehát nem kell megjegyeznünk. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A következő példában egy "csonkolt" lineáris egyenletrendszer mátrixon bemutatjuk, hogy a pinv függvény és a "kincstári" képlet ugyanazt az eredményt adja. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> F = [1 2 3 4; 5 6 7 8; 9 10 11 13] % az eredeti egyenletrendszer összefüggő | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ha egy négyzetes mátrix determinánsa 0, akkor bal- vagy jobbinverze sem létezik, de a pszeudoinverz itt is értelmezhető. Ha egy mátrix esetén bal- vagy jobbinverz létezik, akkor az megegyezik a pszeudoinverzzel. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> B = [4 2 5; 1 -1 4; 4 0 2]; % a fenti B mátrix | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A pszeudoinverz egyszerűen ellenőrizhető két tulajdonsága a következő Hiba! A hivatkozási forrás nem található.: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
Egy nem 0 elemeket tartalmazó 2×2-es mátrixra ellenőrizze ezeket a tulajdonságokat a MATLAB-bal! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ellenőrizze, hogy négyzetes mátrixokra az művelet melyik inverzet számolja ki az alfejezetben megtanultak közül! Mi a helyzet nem négyzetes mátrixok esetén? | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixaritmetikai és pontozott műveletek: összefoglaló | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ebben az alfejezetben két tesztmátrix felhasználásával összefoglalóan bemutatjuk a megismert aritmetikai és pontozott műveleteket. A mátrixok méreteit úgy választjuk meg, hogy a műveletek elvégezhetők legyenek. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A = [5 -2; 4 3]; B =[2 4; 1 -2]; | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mátrixaritmetikai operátorok
1. táblázat | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Megjegyzések: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
A fenti 2. és 3. megjegyzés a számítási-kerekítési hibák miatt nem mindig teljesül: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> A\B, inv(A)*B | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Pontozott operátorok
2. táblázat | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Logikai műveletek mátrixokra | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A MATLAB nagyon sokféle mátrix-logikai műveletet támogat. Ezek függvénnyel minden esetben megvalósíthatók, néhány kivételtől eltekintve operátorral is. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A következő táblázatban bemutatjuk ezeket a műveleteket, két tesztmátrixszunk: A = [5 -2; 4 3] és B = [2 4; 4 -2]; az adott művelet eredménye a táblázat utolsó oszlopában látható. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Logikai mátrixműveletek és -függvények
3. táblázat | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Figyelje meg, hogy a logikai műveletek az any és az all kivételével mindig elempárokra hajtódnak végre. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Szerezzen tapasztalatokat a fenti táblázatban megadott MATLAB-os logikai műveletek használatáról (hasonlítson össze elempáronként két azonos méretű mátrixot). | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Bár már az előző leckében tanultunk a skalárokkal végezhető logikai műveletekről, a fenti táblázathoz kapcsolódóan bemutatjuk most külön ezeket is. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Logikai skalárműveletek
4. táblázat | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A MATLAB - hasonlóan az Excelhez - a nem nulla értékeket logikai igaznak tekinti. Ha ilyen értéket negálunk, akkor nullát kapunk. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> ~2014, ~0 % nem 0 tagadása 0, 0 tagadása 1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A logikai műveletek kiértékelésekor az ún. rövidzárt használja a MATLAB, azaz ha egy kifejezés eredményét az első operandus meghatározza, akkor a többi operandus már nem értékelődik ki: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> p = [], ures = isempty(p) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A műveletek precedenciája | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Most, hogy áttekintettük az összes műveletet és hasonlítást, amelyek a mátrixokra alkalmazhatók, visszatérünk a precedenciára, amelyet az első MATLAB leckében már érintettünk (eml.: Precedencia ábra), de akkor még nem rendelkeztünk minden szükséges ismerettel a teljes, kimerítő tárgyaláshoz. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
A műveletek rangsora a MATLAB-ban a következő: | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
Ha ettől és a balról-jobbra szabály szerinti végrehajtástól el akarunk térni, akkor kellőképp zárójelezni kell! Jegyezzük meg, hogy a felesleges, de jól elhelyezett zárójelpárok a számítási eredményt nem változtatják meg. | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Vizsgáljuk meg a következő példát! | |||||||||||||||||||||||||||||||||||||||||||||||||||||
>> c = 5, x = 2 + c:10, y = 2 + (c:10) | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Mivel az összeadás nagyobb precedenciájú művelet, mint a sorozatképzés, ezért az x sorozat képzése 5 + 2-ről indul és 10-ig tart. A második esetben viszont először az [5 6 7 8 9 10] sorozat készül el, majd ennek minden eleme 2-vel növelődik. |
Önellenőrző kérdések | ||
Felesleges zárójeleket és szimbólumokat ne használjon! | 1. Legyen E = [2, 3, 5; 7, 11, 13]. Milyen utasítást adtunk ki (tömbrész hivatkozás; sor/oszlop), ha a következő eredményt kaptuk? ans = ![]() | |
Felesleges zárójeleket és szimbólumokat ne használjon! | 2. Legyen D = [1, 3, 5, 7; 9, 11, 13, 15; 17, 19, 21, 23]. Milyen utasítást adtunk ki (tömbrész hivatkozás), ha a következő eredményt kaptuk? ans = ![]() | |
3. Az A, B, C, D, E mátrixokról a következőket tudjuk: | ||
size(A) : [4 5] | ||
Milyen méretűek a B és C mátrixok? size(B): ![]() | ||
4. Az A = [1 2; 3 4] mátrix felhasználásával megfelelő aritmetikai műveletek alkalmazásával és építkezéssel készítse el a következő X mátrixot: X = ![]() | ||
5. Legyen A = [1 2 3; 4 5 6]. Adja meg a B csupa egyes mátrixot (a ones függvénnyel) úgy, hogy A + B' elvégezhető legyen! ![]() | ||
6. Milyen méretű mátrixot tartalmazzon a D változó, hogy az A*D művelet eredménye egy 3×7 méretű mátrix legyen? size(A), size(B), size(C) ![]() | ||
7. Legyen A = [1, 2; 3, 4] és B = [10, 7; 22, 15]. Határozza meg azt a Z mátrixot, amelyre Z*B = A. Adja meg az Z mátrix 1. sorának 1. elemét! Ha az eredmény nem egész, két tizedesre kerekítve írja be! ![]() | ||
8. Ellenőrizze, hogy az M = [1 1 1; 1 1 2] mátrix jobbinverze az N1 = [1 -2; 1 1; -1 1] mátrix! Mutassa meg, hogy N2 = [1 -0.5; 1 -0.5; -1 1] is jobbinverz! Keressen még egy jobbinverzet is! | ||
A tankönyv használata nélkül, csak a MATLAB súgó (mldivide, mrdivide) segítségével írja fel (mátrixegyenlettel), hogy mi lesz a következő kifejezések értéke: | ||
A\B, illetve | ||
E/A, | ||
ahol E az egységmátrix! (Feltehetjük, hogy a műveletek elvégezhetők.) | ||
9. Legyen X = [8 5 2 2; 6 4 1 4; 3 0 1 0]. | ||
Nem négyzetes mátrixnak nincs inverze, csak pszeudoinverze. Ellenőrizze, hogy olyan esetben, mint most (az X mátrixnak kevesebb sora van, mint oszlopa) a pszeudoinverz a jobbinverz, azaz X*pinv(X) lesz az egységmátrix. A pszeudoinverz tehát most X\eye(3) módon - ahol eye(3) a 3×3-as egységmátrix - is számolható. | ||
Határozza meg az X transzponáltjának a pszeudoinverzét is! Ez balinverz? |