 
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ę