background image

 

1

Operacje na macierzach     

         w programie 

MATLAB

background image

 

2

Operacje na macierzach

   Na zajęciach tych uwagę poświęcono następującym zagadnieniom:

algebrze liniowej, 

tablicom,

funkcjom analizy danych.

background image

 

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ą.

background image

 

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

.

background image

 

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.

 

background image

 

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

  

background image

 

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

  

background image

 

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.

background image

 

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
 

background image

 

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 ¼

background image

 

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.

background image

 

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

background image

 

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

background image

 

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

background image

 

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

background image

 

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

background image

 

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

background image

 

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 

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.  

background image

 

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

background image

 

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

background image

 

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)

background image

 

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 Ainv(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)

background image

 

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 macierzy trójkątnej dolnej (wyzerowanie 
elementów znajdujących się powyżej głównej przekątnej):
 

» tril(A)

utworzenie z macierzy macierzy trójkątnej górnej (wyzerowanie 
elementów znajdujących się poniżej głównej przekątnej):
 

» triu(A)

background image

 

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

background image

 

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

background image

 

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. 

background image

 

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

background image

 

28

Operacje logiczne i relacji

background image

 

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. 

background image

 

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

background image

 

31

Dziękuję za uwagę


Document Outline