5. Matlab – matematické operácie s maticami

29. Máj, 2009, Autor článku: Foltin Martin, MATLAB/Comsol
Ročník 2, číslo 5 This page as PDF 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.

5 príspevky(ov) k článku “5. Matlab – matematické operácie s maticami”

  1. peter napísal:

    Velmi dobre clanky, celkovo vsetky co tu su o matlabe…pre zaciatocnika je to super

  2. Martin Foltin napísal:

    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.

  3. Jakub napísal:

    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…

  4. Martin Foltin napísal:

    Dakujeme za podporu. Z akej skoli ste ? Celkom by nas zaujimalo kde vsade v skolach ten Matlab je a do akej hlbky sa pouziva.

  5. Gillian Bega napísal:

    Vcelku fajn by bolo keby ste si napisali co Vam tu chyba resp. co v matlabe by ste tu chceli rozobrat :)

Napísať príspevok