Działania na macierzach
Działania na macierzach
Ale nie takie działania jak nas uczono na I roku studiów, tylko takie dziwniejsze...
W MATLABie wszystko tak naprawdę jest macierzą. Nawet pojedyncza liczba jest traktowana jako macierz o wymiarach 1x1. Macierze, które mają więcej niż jeden element tworzymy poprzez podanie ich elementów w nawiasach kwadratowych [] - i nie wolno do tego używać innego typu nawiasów! Wartości w kolumnach oddzielone są spacjami, wiersze oddzielone są średnikami.
Zadanie (2)
Przed wykonaniem tego ćwiczenia wpisz:
>> clear
>> clc
aby wyczyścić wartości wszystkich zmiennych oraz ekran. Następnie wpisz komendy, naciskając każdorazowo ENTER:
>> A = [1 7; 3 8 ; 5 6]
>> B = [19 21 44] % macierz o jednym wierszu i trzech kolumnach
>> C = [14;15;16] % trójelementowy wektor
>> D = [12 11 10; 9 8]
Dlaczego próba wpisania ostatniej macierzy wywołała błąd?
Zdefiniuj zmienną A o zawartości podanej poniżej, następnie wypróbuj dane zapytania i określ, co one robią.
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
>> A
>> A(:,3)
>> A(2,:)
>> A(1,2) % najpierw podajemy numer wiersza, czy kolumny?
>> A(1:3,3:4)
>> A(:)
>> A(:,:)
>> [A A]
>> [A ; A]
>> A(:,1) =[ ] % to działanie wykonaj klika razy pod rząd
Używając strzałek przewiń listę komend do polecenia, w którym macierz A została utworzona i wywołaj ponownie to polecenie. Polecenie to możesz też znaleźć w oknie Command History. Następnie wpisz:
>> A(2,:)=[-1 -2 -3 -4]
Działań na macierzach jest bardzo dużo i powinieneś je wszystkie (nie)stety pamiętać. Ewentualnie, musisz pamiętać gdzie je znaleźć :) W zasadzie, działania te zapamiętają się same - o ile będziesz je dostatecznie często stosować. Do najważniejszych działań należą:
(1) Zakresy liczb dla macierzy C:
-
C(i,j) - wydobywanie elementu macierzy znajdującego się w i‐tym wierszu i j‐tej kolumnie,
-
C(a:b,c:d) - wydobywanie podmacierzy,podaje się wpierw zakres wierszy (od a-tego do b-tego wiersza) a potem kolumn (od c-tej do d-tej kolumny),
-
C(i,:) - wydobywanie i-tego wiersza,
-
C(:,j) - wydobywanie j-tej kolumny,
-
mając macierze C i D o właściwych wymiarach, można je połączyć po prostu dodając kolumny:
[C D] lub wiersze: [C;D],
-
polecenie C(:) zamienia macierz na wektor,
-
dwukropek jest bardzo przydatnym operatorem oznaczającym „od… do…”.
-
m:n to zakres liczb m,m+1,m+2,...n (przy założeniu: m<n)
-
m:s:n to zakres liczb od m do n z krokiem s, np.: 1:3:10 zwróci liczby: 1, 4, 7, 10,
-
C=[] - utworzenie macierzy pustej lub wyzerowanie macierzy,
-
C(i,:)=[] - usunięcie i‐tego wiersza,
-
C(:,j)=[] - usunięcie j‐tej kolumny.
(2) Działania liczbowe na macierzach:
-
C*D – mnożenie dwóch macierzy (o ile ich wymiary są odpowiednie),
-
C.*D – mnożenie ze sobą elementów macierzy kwadratowych o tych samych rozmiarach element po elemencie (tak jak to czasem na początku mnożą studenci: to z tym, to z tym, to z tym...)
-
C^n – mnożenie macierzy samą przez siebie n razy: C*C*...*C,
-
C.^n – podnoszenie każdego elementu macierzy do n-tej potęgi,
-
C' – uzyskanie macierzy transponowanej,
-
C+3*D – dodawanie macierzy, mnożenie przez liczbę.
(3) Inne operacje macierzowe:
-
tril(C) – tworzenie macierzy dolnotrójkątnej,
-
triu(C) – tworzenie macierzy górnotrójkątnej,
-
sum(C) – suma elementów w kolumnach,
-
sum(C,2) - suma elementów w wierszach,
-
mean(C) – średnia elementów w kolumnach,
-
mean(C,2) – średnia elementów w wierszach. % podobnie działają polecenia max i min
Zadanie (3)
Wypróbuj zapytania:
>> A = [1 2 3; 4 5 6; 7 8 9];
>> A-5 % brzydki zapis, no ale trudno...
>> B = [9 8 7; 1 2 3];
>> B*A
>> A*B
>> A.*B % czy da się? I dlaczego nie?
>> A*A
>> A^2
>> A.^2
>> B'
>> B(3,:)=[4 5 6]
>> A+2*B
>> max(A)
>> max(max(A))
Zadanie (4)
Wyczyść ekran oraz listę zmiennych i wypróbuj działanie następujących komend, tworzących tzw. macierze specjalne:
>> A=magic(4) % kwadrat magiczny o wymiarach 4x4 (sumy wyrazów w wierszach,
% kolumnach i na obu przekątnych są równe)
>> B=eye(4) % macierz jednostkowa o wymiarach 4x4
>> C=ones(4,5) % macierz złożona z samych jedynek o wymiarach 4x5
>> D=zeros(size(C)) % macierz złożona z samych zer, ma mieć takie same wymiary jak C
>> E=diag([1,34,exp(1),pi]) % macierz przekątniowa
>> F=[A C;B D] % macierz złożona z macierzy A, C, B i D
>> length(F) % największy z wymiarów macierzy
>> size(F) % wymiary macierzy
>> ndims(F) % liczba wymiarów macierzy
>> numel(F) % liczba elementów macierzy
>> V=primes(50) % wektor zawierający liczby pierwsze nie większe niż 50
>> V(end) % end oznacza ostatni element wektora
Zadanie (5)
Przetestuj następujące komendy:
>> A=[1,2,3;4,5,6]
>> B=[1,4,3;15,18,5]
>> A==B % porównanie element po elemencie
>> A>B % które elementy są większe w A niż w B
>> A>=B
>> A~=B % znalezienie elementów różnych w macierzach
>> mod(B,2)==1 % gdzie w B są liczby nieparzyste?
>> mod(B,2)==0 % gdzie w B są liczby parzyste?
>> mod(B,2)==0 & B>10 % gdzie w B są liczby parzyste oraz większe od 10?
>> mod(B,2)==0 | B>10 % gdzie w B są liczby parzyste lub większe od 10?