5. Matlab – matematické operácie s maticami
29. Máj, 2009, Autor článku: Foltin Martin, MATLAB/Comsol
Ročník 2, číslo 5
Pridať príspevok
V predošlej časti sme sa bavili o definovaní premennej v ktorej je uložená matica, ukázali sme si ako sa dostaneme k jednotlivým prvkom, alebo submaticiam. Vieme už aj ako zistiť rozmer matice, alebo vektora. Tým sme si pripravili základnú bázu vedomostí na to, aby sme mohli začať robiť matematické operácie s maticami. V dnešnej časti sa sústredíme na elementárne operácie, ktoré Matlab obsahuje a sú často využívané.
Najskôr si definujme maticu, ktorú budeme využívať v príkladoch (matica je náhodne zvolená).
>> A=[2 4 3; 9 1 5; 9 4 8]
A =
2 4 3
9 1 5
9 4 8
Ako prvú funkciu, ktorá môže mať na vstupe maticu, si ukážme sum. Táto funkcia vracia súčet prvkov matice v stĺpcoch. Výstupom je teda vektor. Prvý prvok bude výsledkom súčtu 2+9+9, druhý 4+1+4 a posledný 3+5+8.
>> sum(A)
ans =
20 9 16
Ak by sme potrebovali získať súčet v riadkoch, tak postačuje vstupnú maticu transponovať (symbol apostrof). Oveľa častejšie ale potrebujeme súčet všetkých prvkov v matici. V taktomto prípade môžeme opäť využiť funkciu sum. Táto funkcia dokáže samozrejme sčítať aj prvky vektora. No a práve vektor dáva ako výstup funkcia sum pri sčítaní matice. Preto ak chceme vedieť súčet všetkých prvkov v matici, použijeme dvakrát funkciu sum.
>> sum(sum(A))
ans =
45
Často využívanou funkciou v lineárnej algebre je výpočet determinantu matice (matica musí byť štvorcová). Determinant vypovedá o základných vlastnostiach matice a s úspechom sa dá využiť pri výpočte sústavy lineárnych rovníc. V Matlabe sa výpočet determinantu robí pomocou funkcie det.
>> det(A)
ans =
-51
Ďalšou unárnou operáciou (funkcia s jedným operandom) je inverzia matice. V matlabe je výpočet možný dvoma spôsobmi (sú ekvivalentné). Prvý je pomocou príkazu inv a druhý umocnením matice na -1. Táto fukcia je opätovne definované iba pre štvorcové matice (pre neštvorcové sa dá použiť tzv. pseudoinverzia – pinv).
>> inv(A)
ans =
0.2353 0.3922 -0.3333
0.5294 0.2157 -0.3333
-0.5294 -0.5490 0.6667
>> A^(-1)
ans =
0.2353 0.3922 -0.3333
0.5294 0.2157 -0.3333
-0.5294 -0.5490 0.6667
Skúškou správneho výpočtu môže byť násobenie matice jej inverziou. Výsledkom by mala byť jednotková matica.
>> A*inv(A)
ans =
1.0000 0 0
0 1.0000 -0.0000
0 0 1.0000
Opustime teraz pole unárnych funkcií a pozrime sa na binárne funkcie ako sčítanie, alebo násobenie matíc. Keďže do binárne operácie vyžadujú dva operandy, definujme si druhú maticu.
>> B=[4 1 0; 2 5 3;1 6 3]
B =
4 1 0
2 5 3
1 6 3
Základné aritmetické operácie sú sčítanie a odčitanie (symboly + a – ).
>> A+B
ans =
6 5 3
11 6 8
10 10 11
Maticu však môžeme sčítať aj so skalárom. V tomto prípade sa ku každému prvku matice pripočíta skalár.
>> A+2
ans =
4 6 5
11 3 7
11 6 10
Pokročilejšou funkciou je násobenie matíc. V Matlabe sú dva prístupy k násobeniu. Jeden je klasický (známy z lineárnej algebry v zmysle definície), alebo násobenie po prvkoch. Klasické násobenie sa realizuje symbolom *.
>> A*B
ans =
19 40 21
43 44 18
52 77 36
V násobení po prvkoch dochádza k vzájomnému vynásobeniu prvkov na rovnakých miestach v maticiach vstupujúcich do násobenia. V Matlabe sa tento úkon realizuje pridaním bodky pre príslušný operátor. (operátor bodka vždy mení význam nasledujúceho operátora tak, aby bol aplikovaný po prvkoch).
>> A.*B
ans =
8 4 0
18 5 15
9 24 24
Špecialitou Matlabu je možnosť matice aj deliť. V podstate sa nejedná o nič iné ako o násobenie inverznou maticou. Je definované ako delenie zľava (A/B), tak aj delenie sprava. Význam týchto operácií je uvedený v tabuľke.
Delenie zľava | A/B | A . B-1 |
Delenie sprava | A\B | A-1 . B |
O ekvivalentnosti zápisov sa môžeme ľahko presvedčiť.
>> A/B
ans =
-0.2000 1.8000 -0.8000
-0.3333 8.6667 -7.0000
-1.1333 10.8667 -8.2000
>> A*inv(B)
ans =
-0.2000 1.8000 -0.8000
-0.3333 8.6667 -7.0000
-1.1333 10.8667 -8.2000
Práve tento zápis sa dá efektívne uplatniť pri riešení sústavy lineárnych rovníc.
V Matlabe môžeme dokonca matice umocňovať. Jedná sa vlastne o ekvivalent násobenia matice sama sebou. Preto umocnenie matice na druhú, je vlastne (matica) * (matica).
>> A^2
ans =
67 24 50
72 57 72
126 72 111
>> A*A
ans =
67 24 50
72 57 72
126 72 111
No a nesmieme zabudnúť ani na umocnenie po prvkoch (opäť použijeme operátor bodka)
>> A.^2
ans =
4 16 9
81 1 25
81 16 64
Matice môžeme využívať aj v pri operáciach porovnania. Veľmi jednoducho vieme napr. zistiť koľko prvkov v matici je väčších ako zvolená hodnota. Potrebujeme vedieť koľko prvkov je väčších ako 5 v matici A a kde sa nachádzajú. Príkazom porovnania zistíme súradnice prvkov, kde je podmienka splnená.
>> C=A>5
C =
0 0 0
1 0 0
1 0 1
No a ak potrebujeme vedieť ich počet, tak len spočítame jednotky v matici C.
>> sum(sum(C))
ans =
3
Takže vieme povedať, že v matici A sú 3 prvky väčšie ako 5.
Dnešná časť seriálu si kládla za cieľ oboznámiť čitateľa s matematickými operáciami, ktoré spracúvajú matice. Podrobnejšie informácie o použitých funkciách sa dajú nájsť v manuále k Matlabu, alebo v elektronickom helpe. V ďalšej časti sa sústredíme na výpočet sústavy lineárnych rovníc. V Matlabe je niekoľko možných postupov, ktoré si predstavíme.
18. Október, 2009 o 16:37
Velmi dobre clanky, celkovo vsetky co tu su o matlabe…pre zaciatocnika je to super
18. Október, 2009 o 17:30
Využívate Matlab v škole ? Tak rozšírte tieto články aj medzi spolužiakov, nech to má zmysel. V príprave je toľko tém, že ten seriál bude nekonečný ako Milagros.
24. Október, 2009 o 18:36
Náhodou jsem objevil tento server a musím opravdu říci, že tu začnu být pravidelným návštěvníkem, články o Matlabu jsou velmi srozumitelné a zatím naprosto pokrývají moje potřeby znalostí Matlabu, takže díky…
24. Október, 2009 o 22:38
Dakujeme za podporu. Z akej skoli ste ? Celkom by nas zaujimalo kde vsade v skolach ten Matlab je a do akej hlbky sa pouziva.
28. Október, 2009 o 19:02
Vcelku fajn by bolo keby ste si napisali co Vam tu chyba resp. co v matlabe by ste tu chceli rozobrat