dr Przemysław Kajetanowicz

Pakiety matematyczne II r. WPPT

 

Wprowadzenie do MATLABA - krótki samouczek

 

Najlepszym sposobem zorientowania się w naturze nowo poznawanego języka programowania jest jego wypróbowanie.  Praca z przykładami występującymi w niniejszym samouczku powinna szybko pozwolić Ci poczuć "smak" nowego narzędzia, wyczuć jego typowe cechy oraz docenić jego siłę i elastyczność.

Oczywiście zakładamy, że czytasz ten tekst siedząc przy komputerze i mając przed sobą uruchomionego MATLABA. Ponieważ widok okna programu jest różny na różnych platformach sprzętowych, więc nie będziemy tu korzystać z mechanizmów pakietu zależnych od danego systemu operacyjnego.

Jak to z grubsza działa?

MATLAB jest interaktywnym pakietem do obliczeń numerycznych i symbolicznych. Interaktywnym, to znaczy takim, który pozwala na prowadzenie przez użytkownika dialogu z systemem na zasadzie "polecenie - akcja i/lub odpowiedź systemu". (Najprostsze porównanie, które się nasuwa, to dialog z systemem operacyjnym DOS w trybie linii poleceń).

Bezpośrednio po uruchomieniu MATLABA mamy przed sobą jego okno poleceń (command window) ze znakiem zachęty (prompt):

>>

Za chwilę napiszemy pierwsze polecenie, wcześniej jednak jeszcze kilka uwag.

Nazwy MATLAB używa się również w znaczeniu języka programowania używanego w pakiecie. Język ten jest zorientowany macierzowo. Oznacza to, wektory i macierze są naturalnymi strukturami danych w MATLABIE, a co za tym idzie, naturalnym stylem programowania w MATLABIE jest tzw. wektoryzacja algorytmów pozwalająca na zastąpienie wielu tradycyjnych pętli typu for czy while składnią wykorzystującą wspomniane struktury wektorowe. Przykłady zobaczymy za chwilę.

Polecenia MATLABA możemy zapisać w pliku tekstowym, tzw. M-pliku (M-file), a następnie taki plik "odegrać" jak płytę kompaktową. Na przykład jeśli zapiszemy taki plik na dysku pod nazwą dosomething.m, a następnie wprowadzimy w oknie poleceń MATLABA polecenie dosomething, system otworzy nasz plik (o ile go znajdzie - o tym później), po czym spróbuje zinterpretować i wykonać zawarte w pliku polecenia. Więcej o M-plikach powiemy na pierwszym wykładzie, tutaj chcemy tylko przybliżyć ich ideę.

Zanim zaczniemy pracę, jeszcze jedna uwaga. Wpisanie polecenia help jakiespolecenie  powoduje wyświetlenie przez MATLABA pomocy dotyczącej użycia danego polecenia lub funkci czy innego symbolu (zobaczysz, jak łatwo, praktycznie automatycznie można samemu uzupełniać system pomocy MATLABA).

Kilka początkowych wskazówek

·        wprowadzając polecenia pamiętaj, że MATLAB rozróżnia wielkie i małe litery

·        średnik wpisany na końcu linijki powoduje, że MATLAB nie wyświetla wyniku tego polecenia

·        komentarze rozpoczynają się znakiem %.

·        natychmiastową pomoc na temat polecenia, funkcji czy symbolu możesz wyświetlić wpisując polecenie help, po którym wpiszesz odpowiednią nazwę

·        pracę z MATLABEM kończysz przez wpisanie polecenia exit lub quit

Pierwsze kroki i eksperymenty

Resztę tego dokumentu potraktuj jako szereg eksperymentów mających na celu zorientowanie się w podstawach. Nie jest to systematyczne wprowadzenie do języka, lecz raczej garść wstępnych informacji.

Zaczniemy od najprostszych poleceń. Od tej pory wprowadzaj w linii poleceń MATLABA tekst pojawiający się tutaj po znaku zachęty, >> (chyba, że jest po nim komentarz). MATLAB odpowiada na polecenia w różny sposób, jak to zaraz zobaczymy.

 

Najprostsze polecenia

Wprowadzamy wyrażenia

» 2/2*3

ans =

     3

» 2*2/3

ans =

    1.3333

Średnik na końcu "zabija output"

» 7*8;

Jeden wiersz może zawierać kilka poleceń oddzielonych przecinkami lub średnikami.

EDU» a=1/2, b=17

a =

    0.5000

b =

    17

» a=7;b=8; % Nic się nie wyświetliło w odpowiedzi - dlaczego ?

» a*b

ans =

    56

Zauważ, że zmienna "ans" przechowuje ostatni wynik

» ans

ans =

    56

Można łatwo przekonać się, jakie zmienne mamy w pamięci

» who

 

Your variables are:

 

a         ans       b

 

Liczby zespolone

Liczby zespolone wprowadzamy w naturalny sposób. Częśc rzeczywista i zespolona mogą, ale nie muszą być oddzielone spacją.

z=1+i

z =

   1.0000 + 1.0000i

Uwaga. Musisz uważać dokonując operacji na liczbach zespolonych. Porównaj następujące dwa wyrażenia:

1+i/i

ans =

      2     

» (1+i)/i

ans =

      1       -    1i  

Wektory i macierze

Wektor wierszowy możemy utworzyć przez wypisanie jego współrzędnych w nawiasach kwadratowych. Poszczególne współrzędne oddzielamy spacjami lub przecinkami:

» u = [1 2 3], v = [-1, 4, 6]

u =

     1     2     3

v =

    -1     4     6

 

Wektory kolumnowe można uzyskać oddzielając współrzędne średnikami:

» w = [8; 0; -1]

w =

     8

     0

    -1

Innym sposobem przechodzenia między wierszowym i kolumnowym zapisem wektora jest macierzowa operacja transponowania. W MATLABIE jest ona realizowana przy pomocy operatora transponowania ' (pojedynczy cudzysłów) w przypadku wektorów i macierzy rzeczywistych. W przypadku macierzy zespolonych operator ten jest transpozycją ze sprzężeniem.

» w'

ans =

     8     0    -1

» w = [1+i  i  -2-7i]

w =

      1       +    1i            0       +    1i           -2       -    7i     

EDU» w'

ans =

      1       -    1i     

      0       -    1i     

     -2       +    7i

 

Oto jak można zdefiniować wektor o "jednostajnie rozmieszczonych współrzędnych":

» y = [1 : 8]

 

y =

 

     1     2     3     4     5     6     7     8

 

Czy widzisz, że y jest tablicą jednowymiarową, której nie musieliśmy nadawać wartości pętlą for ?

 

A oto jak można tworzyć inne wektory tego typu ("krok" różny od 1)

» c = [12 : 4 : 99] % drugi parametr odpowiada długości kroku

 

c =

 

  Columns 1 through 12

 

    12    16    20    24    28    32    36    40    44    48    52    56

 

  Columns 13 through 22

 

    60    64    68    72    76    80    84    88    92    96

 

Wyczyśćmy całą pamieć i usuńmy zmienne

» clear

Teraz popatrzmy, jak można utworzyć macierz:

» A = [1 8 9; 3 2 2; 0 1 1]

 

A =

 

     1     8     9

     3     2     2

     0     1     1

Zauważmy, że elementy pojedynczego wiersza są oddzielane spacjami lub przecinkami, natomiast kolumny - średnikami.

 

» A = [1, 8, 9; 3, 2, 2; 0, 1, 1]

 

A =

      1            8            9     

      3            2            2     

      0            1            1     

Podstawowe działania na wektorach i macierzach.

» x = [1 2 3]; y = [0 1 0];

» x + y

 

ans =

 

     1     3     3

 

» 2*x

 

ans =

 

     2     4     6

 

Mnożenie wektorów i macierzy "element przez element"

» x.*y

 

ans =

 

     0     2     0

 

Zauważyliście kropkę przed symbolem mnożenia "*" ?

A co by było, gdybyśmy nie dali kropki?

» x * y

??? Error using ==> *

Inner matrix dimensions must agree.

 

Gwiazdka jest operatorem mnożenia macierzy, dlatego wyszedł nam błąd. Zasada jest prosta: obecność kropki przed symbolem mnożenia lub potęgowania jest dla MATLABA wskazówką, że odpowiednie operacje wykonuje się "po współrzędnych". Natomiast brak kropki oznacza, że operacja ma być wykonana w sensie macierzowym (np. mnożenie macierzy, iloczyn skalarny wektora wierszowego przez kolumnowy).

 

Popatrzmy na różnicę między macierzami B i C :

 

» B = A^2       % B jest kwadratem macierzy A w sensie mnożenia macierzy

 

B =

 

    25    33    34

     9    30    33

     3     3     3

 

» C = A.^2   % C jest macierzą powstałą przez podniesienie każdego elementu macierzy A do kwadratu

 

C =

 

     1    64    81

     9     4     4

     0     1     1

 

EDU» % Przy dzieleniu trzeba szczególnie pilnować kropek. Niby nic się nie dzieje:

 

EDU» [2 4 6 8 22] / 2

 

ans =

 

     1     2     3     4    11

 

Spróbuj jednak podzielić liczbę dwadzieścia przez kolejne współrzędne wektora:

» x = [2 4 5]

x =

      2            4            5     

EDU» 20/x

??? Error using ==> /

Matrix dimensions must agree.

 

Musimy to zrobić "z kropką przed znakiem dzielenia":

» 20./x

ans =

     10            5            4 

 

Operatorem "dzielenia bez kropki" zajmiemy się później.

 

Macierze odwrotne i układy równań.

Operacja odwracania macierzy kwadratowej realizowana jest funkcją inv.

» A = [1 0 1; 2 1 0; 1 1 1]

A =

      1            0            1     

      2            1            0     

      1            1            1     

» inv(A)

ans =

     1/2          1/2         -1/2    

     -1            0            1     

     1/2         -1/2          1/2

 

Teraz powinieneś już sobie poradzić z rozwiązywaniem kwadratowych układów równań. Rozważmy równanie Ax = b, gdzie A jest macierzą stopnia 3, a b - wektorem kolumnowym wymiaru 3. Rozwiązanie równania otrzymujemy jako x = A-1 b, co w MATLABIE możemy zrealizować np. tak:

» A = [1 0 1; 2 1 0; 1 1 1]

A =

      1            0            1     

      2            1            0     

      1            1            1 

» b=[7 6 11]'

b =

      7     

      6     

     11 

» x=inv(A)*b

x =

      1     

      4     

      6 

To już koniec krótkiego samouczka. Jesteś gotów do samodzielnego rozwiązania listy zadań nr 0.