Wprowadzenie do Matlaba w przykładach.pdf

(273 KB) Pobierz
Wprowadzenie do Matlaba
Wprowadzenie do Matlaba
na przykładach
Tomasz Twardowski
Kraków 2003
Słowo od Autora
Opis powstał jako pomoc dla studentów pracujących na moich zajęciach, co nie wyklucza
innego jego użycia. Nie ma być wyczerpującym przeglądem komend Matlaba, raczej
ułatwieniem startu w nowym środowisku obliczeniowym. Uczy jak korzystać z systemu
pomocy, przybliża podstawowe komendy i struktury języka. W założeniu miał być zwarty i
„strawny” w ciągu godziny-dwóch pracy przy komputerze. Sugerowany sposób korzystania z
dokumentu to jednoczesne czytanie komentarzy i wykonywanie w Matlabie podawanych
przykładów. Dla oszczędności miejsca usunięto puste linie z zapisów sesji interaktywnych.
Listingi programów i komunikaty Matlaba są wydrukowane czcionką Times i odmiennie
justowane, a używane w tekście symbole Matlaba są podkreślone (jak np. nazwa funkcji
disp ).
Z oszczędności miejsca konsekwentnie stosuję rodzaj męski pisząc o Czytelniku, płeć
piękną proszę o wyrozumiałość. Opis ma dobrze służyć jego użytkownikowi, więc jeśli masz
jakieś krytyczne i jednocześnie konstruktywne uwagi na temat tego dokumentu to prześlij je
na mój adres e-mail. Dodać jeszcze muszę, że wyrażane w tekście opinie są moimi
prywatnymi, a nie mojego pracodawcy.
Spis treści
Kilka pytań i odpowiedzi na początek
Czym jest Matlab ?
Matlab jest środowiskiem (edytor, debugger, okno poleceń, okna wykresów) obliczeniowym z
interpreterem specyficznego języka zapisu zadań obliczeniowych. Może pracować w trybie
interakcyjnym przez wykonywanie poszczególnych poleceń z linii komend jak i w trybie
wsadowym przez wykonywanie instrukcji z pliku (skryptu Matlaba nazywanego m-plikiem).
Czym nie jest Matlab ?
Matlab nie jest językiem ogólnego przeznaczenia i z tego powodu generowane przez niego
aplikacje nie będą konkurencyjne względem efektywnych czasowo języków C++ czy Fortran.
Pisanie np. krytycznej czasowo aplikacji sterowania szybkiego obiektu w Matlabie (nawet w
wersji skompilowanej) czy gry multimedialnej, chociaż możliwe, nie jest dobrym pomysłem.
Którą wersję Matlaba opisuje ten dokument ?
Opis dotyczy części wspólnej języka i funkcji dla wersji 4.x, 5.x i 6.x. Prezentowane przykłady
były testowane na wersji 4.2. Elementy języka i funkcje wprowadzone w wersjach 5.x i 6.x są
opisane w odrębnym rozdziale.
Dlaczego Matlab jest taki popularny ?
O sile i popularności tego środowiska obliczeniowego decydują zasobne biblioteki gotowych
funkcji (toolbox’y) i łatwość poruszania się w środowisku obliczeniowym. Dostępne funkcje
pokrywają podstawowe potrzeby obliczeniowe w wielu dziedzinach i mogą być
modyfikowane na poziomie kodu źródłowego.
Do czego można wykorzystać Matlaba ?
Po pierwsze do obliczeń numerycznych na macierzach liczb zespolonych. Po drugie do
przedstawiania informacji z obliczeń w postaci wykresów o różnej postaci z możliwością ich
eksportowania do edytorów. Po trzecie do jeszcze kilku mniej popularnych, a czasem
dziwnych, zastosowań.
Czy wynikom obliczeń w Matlabie można ufać ?
Biblioteki Matlaba zawierają funkcje pisane w większości przez specjalistów. Niektóre
toolbox’y firmują nazwiska znane w dziedzinach specjalistycznych. Nie powinny więc
zawierać błędów. Innym problemem jest możliwy w niektórych obliczeniach duży stopień
kumulacji niedokładności reprezentacji numerycznej danych. W przypadku takich trudnych
zadań obliczeniowych Matlab ostrzega o możliwej niedokładności wyniku. Ograniczone
zaufanie do narzędzi i świadomość tego co się próbuje policzyć jest najlepszym wyjściem.
Czy kod w Matlabie może współpracować z kodem kompilowanym ?
Ze środowiska można wywoływać własne funkcje (w postaci wykonywalnej biblioteki DLL)
kompilowane w innych środowiskach programowania (np. VC++). Matlab ma również
możliwość kompilowania kodu i tworzenia samodzielnej aplikacji.
Skąd wziąć Matlaba ?
Jeśli chcesz mieć własną licencję to musisz zaoszczędzić odpowiednią kwotę pieniędzy
(dość dużą jeśli wybieramy zestaw z kilkoma toolboxami) i wybrać się do sprzedawcy tego
oprogramowania. Ponieważ ten dokument jest przeznaczony dla uczciwych ludzi, inne
polecane wyjście to wybranie czegoś tańszego (patrz poniżej).
Jeśli nie Matlab to co ?
Istnieją inne środowiska obliczeń, jedne ukierunkowane na obliczenia numeryczne (Octave,
Scilab, MathCAD), inne na obliczenia symboliczne (Mathematica, Maple). Podobno Octave
pod Linuxa jest darmowy i ma składnię zbliżoną do Matlaba. Sam z żadnego z wymienionych
nie korzystałem, bo nie mam potrzeby (zatrudnia mnie zamożna instytucja ;-)).
Taki lepszy kalkulator
Uruchomiłeś Matlaba i widzisz okienko Command Window z podpowiedzią pomocy i
znakiem zachęty:
To get started, select "MATLAB Help" from the Help menu.
>>
Bez dużej wiedzy na temat Matlaba możesz prowadzić obliczenia w stylu kalkulatorowym, z
użyciem wartości zespolonych, stałych predefiniowanych (jak operator zespolony j i wartość
pi) i funkcji (opis dostępny w systemie pomocy jak w przykładzie), np.:
>> log10(sqrt(10))*3^4 + real(exp(j*pi/4))*3/4 - sin(pi/2)
ans =
40.0303
>> help log10
LOG10 Common (base 10) logarithm.
LOG10(X) is the base 10 logarithm of the elements of X.
Complex results are produced if X is not positive.
See also LOG, LOG2, EXP, LOGM.
Jak można zobaczyć w powyższym przykładzie wynik wykonania polecenia jest domyślnie
zapisywany do zmiennej ans . Jednak możemy go zapisać do dowolnie nazwanej (poza
nazwami już użytymi w środowisku Matlaba) innej zmiennej, bez potrzeby jej deklarowania.
Możemy również używać wyników zapamiętanych w zmiennych w dalszych obliczeniach.
Zarówno dane do obliczeń jak i wyniki obliczeń mogą być macierzami o dowolnych
(ograniczeniem jest rozmiar pamięci) wymiarach. Nazwy i wymiary zdefiniowanych
zmiennych możesz odczytać komendą whos.
>> T=[1 0 0; 0 0 1; 0 1 0]
T =
1 0 0
0 0 1
0 1 0
>> x=[1;2;3]
x =
1
2
3
>> x=T*x
x =
1
3
2
>> y=x'*x
% Komentarz: operator apostrof (’) oznacza transpozycję
y =
14
>> whos
Name Size Bytes Class
T 3x3 72 double array
x 3x1 24 double array
y 1x1 8 double array
Grand total is 13 elements using 104 bytes
>> z=y*T;
>> z
z =
14 0 0
0 0 14
0 14 0
Jak można zauważyć w przedostatnim poleceniu dodanie średnika (;) na końcu wyrażenia
powoduje „ciche” przypisanie do zmiennej, bez wypisywania jej wartości na ekranie. W
dowolnym momencie możemy poznać zawartość zmiennej wpisując jej nazwę, oczywiście
bez średnika, i naciskając Enter (jak w ostatnim poleceniu z przykładu). Średnik spełnia
także ważną rolę przy wypełnianiu macierzy wartościami, jak w pierwszych dwóch
poleceniach. Sygnalizuje on interpreterowi koniec wiersza macierzy (przejście do nowego
wiersza), podczas gdy przecinek i spacja separują wartości w kolejnych kolumnach tego
samego wiersza. Matlab sprawdza poprawność formalną wpisywanych poleceń
obliczeniowych, w tym zgodność wymiarów macierzy.
Macierze mogą być parametrami wywołania większości funkcji, które bądź realizują operacje
macierzowe bądź wykonują operację dla każdego elementu macierzy. Rozróżnienie na te
dwa typy operacji macierzowych istnieje również dla standardowych operatorów mnożenia,
dzielenia i potęgowania, które wykonują operacje macierzowe w wersji standardowej
(operatory *, / i ^) lub operacje element przez element w wersji specjalnej (operatory .*, ./ i
.^).
>> a=[1 2 3; 3 2 1];
>> max(a)
ans =
3 2 3
>> b=[1 0 0; 0 1 0; 0 0 1];
>> c=[a; 2 3 1]
c =
1 2 3
3 2 1
2 3 1
>> b*a
??? Error using ==> *
Inner matrix dimensions must agree.
>> c*b
ans =
1 2 3
3 2 1
2 3 1
>> c.*b
ans =
1 0 0
0 2 0
0 0 1
>> c^2
ans =
13 15 8
11 13 12
13 13 10
>> c.^2
ans =
1 4 9
9 4 1
4 9 1
>> b./c
ans =
1.0000 0 0
0 0.5000 0
0 0 1.0000
>> b/c
ans =
-0.0833 0.5833 -0.3333
-0.0833 -0.4167 0.6667
0.4167 0.0833 -0.3333
Wyniki działania niektórych funkcji macierzowych mogą początkowo dziwić, jak w drugiej linii
przykładu funkcja max() . Jednoznacznie działa ona dla wektorów, zwracając wartość
maksymalną. Jej zdefiniowane dla macierzy działanie polega na wyznaczeniu wartości
maksymalnej z każdej kolumny, i zwróceniu wektora wyznaczonych wartości. Wyznaczenie
maksymalnej wartości w macierzy wymaga więc podwójnego wywołania max(max(a)) .
Programowanie obliczeń
Jak już wspomniano, Matlab może interpretować instrukcje zapisane w pliku. Plik taki jest
nazywany m-plikiem lub skryptem Matlaba i musi mieć rozszerzenie „.m”. Ponieważ
programy więcej niż 3-linijkowe trudno jest obsługiwać w trybie interakcyjnym, m-pliki są
często wykorzystywanym rozwiązaniem.
Nawet proste obliczenia, które mają być wykonywane warunkowo lub wielokrotnie,
wymagają użycia konstrukcji sterujących. Takie konstrukcje językowe to instrukcje warunku
( if , switch) i pętli ( for , while ). Podstawowa instrukcja warunkowa w Matlabie ma postać
ogólną:
>> help if
IF IF statement condition.
The general form of the IF statement is
IF expression
statements
ELSEIF expression
statements
ELSE
statements
END
Example
if I == J
A(I,J) = 2;
elseif abs(I-J) == 1
A(I,J) = -1;
else
A(I,J) = 0;
end
a instrukcja podstawowej pętli:
>> help for
FOR Repeat statements a specific number of times.
The general form of a FOR statement is:
Zgłoś jeśli naruszono regulamin