Strona główna » Poradniki » MATLAB » Macierze
1011
 

Macierze

Wskazówki pracy z linią poleceń

Do tej pory za każdym razem po wpisaniu polecenia pojawiała się informacja o interpretacji programu. Możemy tego uniknąć dopisując na koniec polecenia średnik ;. Polecenie zostanie wykonane, ale program nie wypisze interpretacji w następnych linijkach. W ten sposób łatwiej dbać o czytelność historii operacji:

  1. >> a = 10;

Innym przydatnym znakiem okazuje się procent %. Można go dopisać w dowolnym miejscu w poleceniu. Wszystko co jest zapisane po nim jest traktowane jako komentarz. Ze względu na to jeśli chcemy użyć średnika na koniec polecenia to musimy to zrobić wpisując średnik przed % - średnik po % jest traktowany jako część komentarza:

  1. >> a = 10; % przypisz zmiennej a wartość 10

W przypadku wpisywania kilku poleceń nie musimy wpisywać każdego oddzielnie. Wszystkie polecenia można wpisać w tej samej linijce. Należy pamiętać, aby każde kolejne rozdzielić przecinkiem. W ten sposób interpretator będzie wiedział, że linijka zawiera kilka poleceń:

  1. >> a = 10, b = 5 % ustal zmienną a na 10, a zmienną b na 5

  2. a =

        10

  3. b =

        5

Należy pamiętać, że wyciszenie interpretacji polega na postawieniu średnika na końcu polecenia, dlatego w przypadku wpisywania kilku poleceń w linijce średnik należy wstawić po każdym poleceniu. Prawidłowe "wyciszenie" wszystkich intepretacji poprzedniego kodu wygląda tak:

  1. >> a = 10;, b = 5;

Z kolei postawienie średnika tylko na końcu linijki spowodowałoby tylko wyłączenie intepretacji ostatniego polecenia. Rezultat wyglądałby tak:

  1. >> a = 10, b = 5;

  2. a =

        10

Macierze

Macierz to układ liczb, symboli lub wyrażeń zapisanych w postaci prostokątnej tablicy. Zasada tworzenia jest podobna do tworzenia wektorów: dane w wierszu zapisujemy rozdzielając spacją lub przecinkiem. Każdy kolejny wiersz oddzielamy średnikiem. Wszystkie dane muszą znaleźć się w nawiasach kwadratowych. Przykładowo wpiszmy do programu następującą macierz:

  1. >> [1 2 3;10 9 8]

  2. ans =

        1     2     3
        10    9     8

Jeśli wpisywane wartości tworzą ciąg o stałej różnicy to można tutaj użyć pseudopętli for. Wtedy kod znacząco się upraszcza w zapisie, ale jest trudniejszy w interpretacji:

  1. >> m = [1:3; 10:-1:8];

Dodawanie i odejmowanie

Przypuśćmy, że mamy dwie macierze A i B o takich samych wymiarach:
,
które wprowadzimy do programu następująco:

  1. >> A = [5 1; 1 5];, B=[1 1; 1 0];

Teraz możemy wykonać operacje dodawania i odejmowania macierzy tj. operacja jest wykonana dla każdej pary elementów i, j:

  1. >> A+B

  2. ans =

        6     2     2     5

  3. >> A-B

  4. ans =

        4     0     0     5

Mnożenie

Na potrzeby tej części zadeklarujemy dwie macierze A, B oraz C, które będą wyglądać tak:

  1. >> A = [1:3; 10:-1:8];, B=[1:3:7; 10 10 10; 5 6 5];, C=[1, 2];

Jeśli chcemy pomnożyć dwie macierze to wystarczy użyć operatora mnożenia - gwiazdki*:

  1. >> A*B

  2. ans =

        36    42    42
       140   178   200

Jednak mnożenie macierzy nie zawsze jest możliwe. W przypadku, gdy będziemy chcieli wykonać nieprawidłową operację mnożenia kompilator powiadomi nas o błędzie. Treść błędu pojawi się nawet jeśli wyciszymy interpretację używając średnika:

  1. >> B*A
  2. Error using  * 
    Inner matrix dimensions must agree

Operator mnożenie w błędzie jest podkreślony - jest to link, który umożliwia bezpośrednie przejście do pomocy w programie. W ten sposób możemy uzyskać pomoc, dlaczego polecenie nie mogło zostać wykonane.

Jeśli chcemy pomnożyć macierz przez skalar to możemy wpisać:

  1. >> 2*C

  2. ans =

        2     4

Istnieje również możliwość, aby każdy element pomnożyć przez inną liczbę. Należy wtedy użyć dodatkowe operatora - kropki . przed znakiem operatora mnożenia *. Spowoduje to, że każdy element na pozycji i, j zostanie pomnożony przez element o współrzędnych z drugiej macierzy. Jeśli wymiary się nie zgadzają to zostanie zwrócony błąd:

  1. >> A.*B
  2. Error using  * 
    Matrix dimensions must agree

Błąd ten jest spowodowany różnymi rozmiarami macierzy. Przypuśćmy, że chcemy aby w macierzy A niezerowe były tylko wyrazy o obu współrzędnych nieparzystych. W tym celu przypiszemy macierzy C nową macierz, a następnie pomnożymy każdy element przez każdy:

  1. >> C=[1 0 1; 0 0 0]
  2. >> A.*C

  3. ans =

        1     0     3
        0     0     0

Dzielenie

Wszystkie powyższe informacje dotyczące mnożenia odnoszą się również do operacji dzielenia. Należy jednak pamiętać, że znak operacji dzielenia to /. Wtedy chcąc podzielić dwie macierze wystarczy wpisać:

  1. >> B/A

  2. ans =

        2.8182   -0.1818
        0.9091    0.9091
        0.4848    0.4848

Pobieranie fragmentów macierzy

Jeśli chcemy wybrać element z macierzy nalezy wpisać nazwę macierzy, otwórzyć nawias okrągły podać współrzędne rozdzielone przecinkiem i zamknąć nawias. Przykładowo wybierzmy pierwszy element z drugiego wiersza macierzy A:

  1. >> A=[1:3; 10:-1:8] % deklarujemy macierz
  2. >> A(2, 1) % wybieramy pierwszy element z drugiego wiersza

  3. ans =

        10

Jeśli jednak chcemy wybrać całą kolumnę lub wiersz to liczbę zastępujemy średnikiem:

  1. >> A(2, :) % wybieramy cały drugi wiersz

  2. ans =

        10    9    8


  3. >> A(:, 3) % wybieramy całą trzecią kolumne

  4. ans =

        3
        8

Używając operacji wybierania możemy zastępować całe wiersze i kolumny. W tym celu należy wybrać fragment macierzy, a następnie przypisać nową wartość. Przykładowo zastąpmy trzecia kolumnę wektorem , wtedy:

  1. >> A(:, 3) = [4 5]'

  2. ans =

        1     2     4
       10     9     5

Jednak co jeśli wybierzemy wiersz lub kolumnę, która nie istnieje ? Wtedy zostanie zwrócony błąd:

  1. >> A(4, :)
  2. Index exceeds matrix dimensions

Należy jednak ostrożnie zamieniać całe wiersze i kolumny w macierzy. Przypuśćmy, że chcemy zmodyfikować trzeci wiersz, który nie istnieje. Program nei zwróci błędu. Dane zostaną dopisane do macierzy w odpowiednich miejscach. Wszystkie pola nowej macierzy, które nie zostały ustawione zostaną wyzerowane. W ten sposób możemy rozszerzać macierze. Dopiszmy do macierzy wektor wierszowy [3 4 5]:

  1. >> A(3, :) = [3:5]

  2. A =

        1     2     4
       10     9     5
        3     4     5

Z macierzy A możemy wybrać podmacierz. W tym celu należy wskazać lewe górne pole i prawe dolne w nawiasach okrągłych (zamiast współrzędnych). Przypuśćmy, że chcemy z A wyodrębnić macierz bez pierwszych dwóch wierszy i pierwszej kolumny. Wtedy:

  1. >> A(2:2, 2:end)

  2. ans =

        9     5

Jednak jeśli chcielibyśmy tylko usunąć pierwszy wiersz i pierwszą kolumnę to wystarczy wpisać:

  1. >> A(1:2, 2:end)

  2. ans =

        2     4
        9     5

Macierze możemy razem łączyć. W tym celu należy utworzyć macierz i zamiast podawać wartości to wstawić nazwę zmiennych. Przykładowo możemy dołączyć macierz B do macierzy A na dwa sposoby - kolumny z B dołączamy jako kolumny A lub dołączamy do wiersze macierzy A wiersze macierzy B:

  1. >> [A B] % zapisujemy macierz B po prawej stronie macierzy A

  2. ans =

        1     2     4     1     4     7
       10     9     5    10    10    10
        3     4     5     5     6     5
  3. >> [A; B] % dopisujemy macierz B pod macierzą A

  4. ans =

        1     2     4
       10     9     5
        3     4     5
        1     4     7
       10    10    10
        5     6     5

Funkcje dla macierzy kwadratowych

Macierz kwadratową możemy odwrócić na dwa sposoby:

  1. >> A^-1; % podnosząc do potęgi -1
  2. >> inv(A); % używając funkcji inv (ang. invert)
  3.     3.5714     0.8571    -3.7143
       -5.0000    -1.0000     5.0000
        1.8571     0.2857    -1.5714

Do wyliczania wyznacznika macierzy możemy posłużyć się funkcję det (ang. determinant):

  1. >> det(A)

  2. ans =

        7.0000

Macierz losowa

Program umożliwia wylosowanie macierzy. Służ do tego polecenie rand. W nawiasach okrągłych podajemy wymiary macierzy. Każde pole macierzy będzie zawierać wartość z zakresu

  1. >> rand(3, 2); % losujemy macierz o trzech wierszach i dwóch kolumnach
  2.     0.8147     0.9134
        0.9058     0.6324
        0.1270     0.0975

Zadania

Zadanie 1

Wykonaj poniższe polecenia:

Zalecam wykonanie poleceń bez zaglądania do artykułu. Wskazówka: Każdy podpunkt odpowiada dokładnie jednemu poleceniu!

  1. Wprowadź do programu następujące macierze:
  2. Macierz C to różnica A i B, zachowaj ją
  3. Z kolei macierz D to suma A i B, zachowaj ją
  4. Dołącz do macierzy A z prawej strony macierz C
  5. Dołącz do macierzy B z dołu macierz D
  6. Dołącz transpozycję macierzy A do macierzy B z prawej strony, zapisz jako macierz M
  7. Pomnóż macierz M przez skalar 4
  8. Pomnóż macierz A przez macierz M
  9. Następnie wylosuj macierz L, aby miała taki sam rozmiar jak M
  10. Pomnóż wszystkie elementy L przez elementy z M
  11. Wypisz diagonale macierzy L oraz policz wyznacznik