1
Operacje na macierzach
w programie
MATLAB
2
Operacje na macierzach
Na zajęciach tych uwagę poświęcono następującym zagadnieniom:
•
algebrze liniowej,
•
tablicom,
•
funkcjom analizy danych.
3
Algebra liniowa
Algebra liniowa zajmuje się liniowymi przekształceniami macierzy.
Na przykładzie macierzy magicznej Dürera przedstawione
zostanie szereg przykładów operacji macierzowych wykonywanych
w programie MATLAB:
» A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
Na
poprzednich
zajęciach
zaprezentowano
operację
transponowania macierzy, A'. Dodanie macierzy transponowanej
do macierzy źródłowej generuje macierz symetryczną.
4
Algebra liniowa
» A + A'
ans =
32 8 11 17
8 20 17 23
11 17 14 26
17 23 26 2
Wymnożenie macierzy transponowanej przez macierz źródłową
również generuje macierz symetryczną:
» A'*A
ans =
378 212 206 360
212 370 368 206
206 368 370 212
360 206 212 378
.
5
Algebra liniowa
Wyznacznik macierzy magicznej Dürera jest równy zeru co
oznacza, że jest to macierz osobliwa:
» d = det(A)
d =
0
Jeżeli macierz jest osobliwa, to niemożliwe jest odwrócenie
macierzy. W przypadku wydania polecenia:
» X = inv(A)
otrzymujemy komunikat:
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.175530e-
017.
6
Algebra liniowa
W przypadku macierzy Z:
»
Z=[1 2 3;4 5 6;7 8 0]
Z =
1 2 3
4 5 6
7 9 0
wyznacznik macierzy jest różny od zera:
» dz = det(Z)
dz =
27
7
Algebra liniowa
Wartości własne macierzy magiczne są również interesujące:
» e = eig(A)
e =
34.0000
8.0000
0.0000
-8.0000
Jedna z wartości własnych jest równa zeru, co jest jedną z konsekwencji
osobliwości macierzy. Największa wartość własna macierzy 34 jest równa
magicznej sumie. W przypadku macierzy Z wartości własne są równe:
» ez = eig(Z)
ez =
-0.3884
12.1229
-5.7345
8
Algebra liniowa
Polecenie programu MATLAB:
» [V,D] = eig(Z)
generuje macierz diagonalną D wartości własnych oraz pełną
macierz
V,
której
kolumny
są
wektorami
własnymi
odpowiadającymi określonym wartościom własnym:
Powyższe macierze spełniają następujący warunek: Z*V = V*D.
9
Algebra liniowa
Jeżeli macierz magiczną przemnożymy przez jej magiczną sumę:
» P = A/34
otrzymujemy macierz stochastyczną, której kolumny i wiersze są
równe jedności:
P =
0.4706 0.0882 0.0588 0.3824
0.1471 0.2941 0.3235 0.2353
0.2647 0.1765 0.2059 0.3529
0.1176 0.4412 0.4118 0.0294
Powyższe macierze przedstawiają proces stochastyczny nazywany
procesem Markowa.
10
Algebra liniowa
Kolejne potęgi macierzy zawierają kolejne kroki procesu. W
naszym przypadku piąta potęga macierzy P:
» P^5
wynosi:
0.2507 0.2495 0.2494 0.2504
0.2497 0.2501 0.2502 0.2500
0.2500 0.2498 0.2499 0.2503
0.2496 0.2506 0.2505 0.2493
Przy k dążącym do nieskończoności, wszystkie elementy k-tej
potęgi , P
k
, dążą do ¼.
11
Tablice
W programie MATLAB tablicami są dwuwymiarowe macierze o
wartościach numerycznych. Operacje arytmetyczne na tablicach
wykonywane są element po elemencie – oznacza to, że dodawanie
i odejmowanie jest takie samo, jak w przypadku macierzy, zaś
mnożenie daje w rezultacie inne wyniki. W programie znak kropki .
oznacza, że występujący po niej operator arytmetyczny dotyczy
tablic oraz operacja będzie wykonywana element po elemencie.
12
Tablice
Jeżeli kwadratową macierz magiczną Dürera przemnożymy
element po elemencie przez nią samą:
» A.*A
otrzymujemy tablicę zawierającą kwadraty liczb całkowitych z
przedziału od 1 do 16:
ans =
256 9 4 169
25 100 121 64
81 36 49 144
16 225 196 1
13
Tablice
Operacje na tablicach są również wykorzystywane podczas generowania
nowych tablic. Niech n jest wektorem kolumnowym:
» n = (0:9)';
wówczas polecenie:
» pows = [n n.^2 2.^n]
generuje tablicę kwadratów i potęg dwójki:
pows =
0 0 1
1 1 2
2 4 4
3 9 8
4 16 16
5 25 32
6 36 64
7 49 128
8 64 256
9 81 512
14
Tablice
Elementarne funkcje matematyczne wykonują operacje na tablicach element
po elemencie, np. polecenia:
» format short g
» x = (1:0.1:2)';
» logs = [x log10(x)]
buduje tablicę logarytmów:
logs =
1.0 0
1.1 0.04139
1.2 0.07918
1.3 0.11394
1.4 0.14613
1.5 0.17609
1.6 0.20412
1.7 0.23045
1.8 0.25527
1.9 0.27875
2.0 0.30103
15
Operatory macierzowe i tablicowe
W tablicy zestawiono wyniki operacji dla macierzy A i B:
wykorzystując operatory macierzowe i tablicowe. Operatory
tablicowe poprzedzone są zawsze kropką, np.:
mnożenie macierzowe - gwiazdka *;
mnożenie tablicowe - kropka i gwiazdka (.*).
3
2
1
1
A
2
0
1
1
B
Operator
arytmetyczny
Operator
macierzowy
Operator tablicowy
dodawanie
tak, jak macierzowy
1
2
0
2
B
A
16
Operatory macierzowe i tablicowe
Operator
arytmetyczny
Operator
macierzowy
Operator tablicowy
odejmowanie
tak, jak macierzowy
mnożenie
(brak przemienności
mnożenia macierzy)
5
2
2
0
B
A
8
2
3
1
B
*
A
6
4
2
1
A
*
B
6
0
1
1
A
*
.
B
B
*
.
A
17
Operatory macierzowe i tablicowe
Operator
arytmetyczny
Operator macierzowy
Operator
tablicowy
dzielenie
dzielenie
prawostronne
(B=C1*A)
dzielenie lewostronne
(B=A*C2)
potęgowanie
8
2
3
1
A
/
B
1
C
3
/
2
0
1
1
B
\
.
A
A
/
.
B
0
3
1
3
B
\
A
2
C
11
8
4
3
A
*
A
2
^
A
9
4
1
1
2
.^
A
18
Operatory macierzowe i tablicowe
Operator
arytmetyczny
Operator macierzowy
Operator
tablicowy
potęgowanie
tak, jak
macierzowy
3
1
2
1
'
A
Podczas mnożenia macierzowego A*B liczba wierszy
macierzy A musi być równa liczbie kolumn macierzy
B.
W rachunku macierzowym nie jest spełnione prawo
przemienności mnożenia.
Transponowanie
macierzy
o
składnikach
rzeczywistych daje takie same wyniki niezależnie od
tego, czy wykorzystywany jest operator macierzowy, czy
tablicowy. Różnice pojawiają się, kiedy składniki macierzy
są zespolone - otrzymujemy dodatkowo macierz o
elementach sprzężonych z odpowiednimi elementami
macierzy zespolonej.
19
Operatory macierzowe i tablicowe
Jeśli:
to:
i
3
i
3
2
i
2
1
i
1
z
i
3
i
2
1
i
3
2
i
1
'
z
i
3
i
2
1
i
3
2
i
1
.'
z
20
Macierze wielowymiarowe
W programie MATLAB możliwe jest definiowanie macierzy
wielowymiarowych. Odwoływania do elementów tych macierzy
wymaga liczby indeksów większej niż 2. Przyjmuje się, że
indeksy oznaczają:
pierwszy indeks - wiersz macierzy (wymiar 1);
drugi indeks - kolumnę macierzy (wymiar 2);
trzeci indeks - stronę macierzy (wymiar 3 i następne).
Macierz taką definiuje się stronami:
» D(:,:,1) =[1 3 0; 5 7 2]
{strona 1}
» D(:,:,2) =[4 7 8; 1 0 5]
{strona 2}
2
7
5
0
3
1
5
0
1
8
7
4
21
Macierze wielowymiarowe
Odwołanie do elementu w pierwszym wierszu, drugiej kolumnie,
na stronie drugiej ma postać:
» D(1,2,2)
ans =
7
Macierze wielowymiarowe można także tworzyć za pomocą
funkcji generujących macierze:
» A = randn(3,5,4)
22
Funkcje przekształcające macierze
utworzenie macierzy diagonalnej A ze składnikami wektora z na
głównej przekątnej:
» A = diag(x)
utworzenie wektora x z elementów znajdujących się na głównej
przekątnej macierzy A:
» x = diag(A)
•
utworzenie macierzy odwrotnej do A; inv(A)=A^(-1):
» inv(A)
•
utworzenie macierzy przez powielenie podmacierzy A m razy w
poziomie i n razy w pionie:
» repmat(A,n,m)
•
utworzenie macierzy o n wierszach i m kolumnach z elementów
branych kolejno kolumnami z macierzy A; jeśli A nie zawiera mxn
elementów, to pojawi się komunikat o błędzie:
» reshape(A,n,m)
23
Funkcje przekształcające macierze
obrócenie macierzy A o 90º w kierunku przeciwnym do ruchu
wskazówek zegara:
» rot90(A)
utworzenie z macierzy A macierzy trójkątnej dolnej (wyzerowanie
elementów znajdujących się powyżej głównej przekątnej):
» tril(A)
•
utworzenie z macierzy A macierzy trójkątnej górnej (wyzerowanie
elementów znajdujących się poniżej głównej przekątnej):
» triu(A)
24
Działania na skalarach
Macierze i skalary można łączyć ze sobą na różne sposoby. Np.
wielkość skalarną można odjąć od macierzy przez odjęcie jej od każdego
elementu macierzy. Średnia wartość elementów macierzy magicznej jest
równa 8.5, stąd polecenie:
» B = A - 8.5
generuje macierz, której sumy elementów w kolumnach są równe zeru:
B =
7.5 -5.5 -6.5 4.5
-3.5 1.5 2.5 -0.5
0.5 -2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5
» sum(B)
ans =
0 0 0 0
25
Działania na skalarach
Podobnie jest w przypadku dodawania skalara do macierzy oraz
mnożenia, dzielenie przez skalar. W przypadku działań na skalarach
MATLAB przyporządkowuje wyszczególnioną wielkość skalarną
wszystkim elementom macierzy znajdującym się w danym zakresie.
Np. polecenie
» B(1:2,2:3) = 0
przyporządkowuje wartość równą zero danemu blokowi macierzy B :
B =
7.5 0 0 4.5
-3.5 0 0 -0.5
0.5 -2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5
26
Indeksy logiczne
Wektory logiczne są generowane przez operacje logiczne lub
operacje relacji. Mogą być one użyte do wyboru określonych
elementów macierzy. Niech X oznacza przykładową macierz, zaś L
jest macierzą o tym samym wymiarze – jest ona rezultatem
operacji logicznej na macierzy X. Wówczas X(L) wybiera te
elementy macierzy X, dla których elementy macierz L są różne
od zera.
Rodzaj indeksów może być wybrany poprzez określenie
logicznej operacji wykonywanej na indeksach. Załóżmy, że został
zdefiniowany następujący zbiór danych:
»
x =
2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8
gdzie NaN oznacza błędny pomiar. W celu usunięcia błędnych
pomiarów można użyć logiczne indeksowanie.
27
Indeksy logiczne
Funkcja finite(x) przyjmuje wartość „prawda” w przypadku wartości
numerycznych, zaś fałsz dla wartości nienumerycznych NaN oraz w
przypadku nieskończoności Inf:
» x = x(finite(x))
x =
2.1 1.7 1.6 1.5 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8
Następujące polecenie usuwa z wektora danych elementy o
wartościach znacznie różniących się od „średnich” elementów
wektora – elementy, w przypadku których różnica od wartości
średniej wektora jest większa niż trzykrotne odchylenie standardowe:
» x = x(abs(x-mean(x)) <= 3*std(x))
x =
2.1 1.7 1.6 1.5 1.9 1.8 1.5 1.8 1.4 2.2 1.6 1.8
28
Operacje logiczne i relacji
29
Polecenie find
Funkcja find znajduje niezerowe elementy w macierzy i podaje ich
położenie (przyjmując, że wszystkie elementy macierzy tworzą wektor
zawierający kolejne kolumny macierzy). W najprostszej formie funkcja
find generuje wektor kolumnowy położeń elementów w macierzy. Np.
polecenie:
» k = find(isprime(A))'
znajduje położenia liczb pierwszych (funkcja isprime) w macierzy
magicznej przy użyciu jednowymiarowego indeksowania elementów:
k =
2 5 9 10 11 13
Wektor k zawiera indeksy elementów macierzy zawierające liczby
pierwsze.
30
Polecenie find
Polecenie
» A(k)
ans =
5 3 2 11 7 13
wyświetla wartości wybranych elementów macierzy. W
przypadku, gdy indeks k zostanie użyty z lewej strony równania
macierz magiczną można przedstawić w następującej postaci:
» A(k) = NaN
A =
16 NaN NaN NaN
NaN 10 NaN 8
9 6 NaN 12
4 15 14 1
31
Dziękuję za uwagę