Pakiet Matlab

Transkrypt

Pakiet Matlab
Pakiet Matlab
Ernest Woźniak i Michał Waśniowski
http://student.agh.edu.pl/∼wasniow/matlab.pdf
AGH
1
1.1
Wprowadzenie
Krótki opis pakietu
MATLAB (MATrix LABoratory) jest językiem wysokiego poziomu, jak i interaktywnym środowiskiem do wykonywania obliczeń naukowych. Posiada on
szerokie spektrum zastosowań w dziedzinie matematyki. Umożliwia wykonywanie obliczeń numerycznych oraz ich wizualizacje zarówno na płaszczyźnie jak i w
przestrzeni trójwymiarowej. Dzięki rozległej ilości funkcji bibliotecznych pozwala
na tworzenie w pełni funkcjonalnych programów.
1.2
Rys historyczny
W latach siedemdziesiątych na zlecenie National Science Foundation powstały biblioteki języka Fortran służące do obliczeń macierzowych: Linpack i Eispack.
Znalazły one zastosowanie w napisanym przez Cleve Moler’a programie, będącym pierwowzorem Matlaba. W 1983 C. Moller oraz S. Bangert i J. Little rozwinęli powyższy projekt zastępując Fortran językiem C oraz dodając grafikę. Stali
sie również założycielami firmy ”The MathWorks Inc.”, która do dziś zajmuje
się rozwojem i sprzedażą pakietu Matlab. W 1985 pojawiła sie pierwsza oficjalna wersja tego programu. Obecna wersja jest znacznie rozszerzona i umożliwia
korzystanie z niej na wielu platformach sprzętowych.
Od 1985 pakiet znacznie się rozrósł (obecna wersja ma numer 7). Dziś dzięki
ponad 500 funkcjom Matlaba można go zastosować między innymi do obliczeń
numerycznych, wyznaczania transformat Fouriera, przeprowadzania operacji na
macierzach, wielomianach i równaniach różniczkowych.
2
2.1
Pierwsze kroki w Matlabie
Help
W celu ułatwienia korzystania z zasobów pakietu Matlab (komend, kartotek ze zbiorami z rozszerzeniem .m) można wykorzystać szeroko rozbudowaną
pomoc. Uzyskujemy do niej dostęp wpisując polecenie:
>> help
Opcjonalnie wypisuje nazwy zbiorów w zadanej kartotece:
>> help kartoteka
Wypisuje pierwsze linie komentarza w zbioreze o nazwie ”zbiór.m”:
>> help zbiór
Wypisuje opcje ułatwiające korzystania z help-a:
>> help help
2.2
2.2.1
Podstawowe operacje
Zmienne
W Matlabie deklaruje się zmienne używając operatora ”=”. W celu sprawdzenia wartości zmiennej wpisujemy jej nazwę (analogicznie jak w LISPie). Aby
sprawdzić listę naszych zadeklarowanych zmiennych wywołujemy polecenie who.
Do zapisu zmiennych do pliku używa się komendy save, a do odczytu zmiennych
z pliku komendy load. Jeżeli nie podstawimy zmiennej pod wyrażenie, wynik
działania zostanie zapisany pod zmienną ans.
Przykład 1
% przez % w Matlabie oznaczamy komentarz
% deklaracja zmiennej
>> m = 4
>> m
m =
4
% wypisanie informacji o zadeklarowanych zmiennych
>> who
Your variables are:
m
% zapisanie zmiennych do pliku
>> save nazwa-pliku
% odczytywanie zmiennych z pliku.
>> load nazwa-pliku
Matlab rozróznia duże i małe litery zatem zmienna ”m” to nie to samo co ”M”.
2.2.2
Operatory
W pakiecie Matlab występują następujące operatory:
2
Operatory
<
>
<=
>=
==
˜=
&
+
∗
.*
/
./
\
.\
ˆ
.ˆ
’
.’
Opis
mniejsze od
większe od
mniejsze bądź równe
większe bądź równe
równość
nierówność
iloczyn logiczny
dodawanie
odejmowanie
mnożenie
mnożenie tablicowe
dzielenie zwykłe prawostronne
dzielenie prawostronne tablicowe
dzielenie zwykłe lewostronne
dzielenie lewostronne tablicowe
potęgowanie
potęgowanie tablicowe
sprzężenie macierzy
transpozycja macierzy
Przykład 2
>> 2^3 + 8
ans =
16
2.2.3
Funkcje matematyczne
Matlab oferuje bardzo dużą ilość funkcji matematycznych. Oto te podstawowe:
exp(x) - exponenta
log(x) - logarytm naturalny
log10(x) - logarytm dziesiętny
abs(x) - wartośc bezwzględna
sqrt(x) - pierwiastek kwadratowy
sin(x) - wartość fukncji sinus
cos(x) - wartość funkcji cosinus
cot(x) - wartość fukncji cotangens
tan(x) - wartość fukncji tangens
asin(x) - wartość funkcji arcus sinus (analogicznie acos(x), acot(x), atan(x))
Przykład 3
>> exp(8)
ans =
2.9810e+003
3
2.2.4
Stałe i symbole
Stałe
pi
+inf
-inf
nan
sign
Opis
liczba π
plus nieskończoność
minus nieskończoność
Not a Number
znak funkcji
Przykład 4
>> cos(pi)
ans =
-1
3
Każda zmienna jest macierzą
Bardzo specyficzną własnością Matlaba jest fakt, iż podstawowym typem
danych jest macierz(stąd nazwa programu). W szczególności zwykła zmienna
jest traktowana jako macierz o wymiarach 1 x 1. Dlatego wszystkie obliczenia
są utożsamiane z działaniami wykonywanymi na macierzach.
3.1
Generowanie macierzy
Tworzenie macierzy w Matlabie może odbywać się na różne sposoby. Najprostszym, aczkolwiek najbardziej pracochłonnym sposobem, tworzenia macierzy jest wpisanie jej wszystkich elementów. Należy pamiętać, że poszczególne
elementy oddziela się spacją, a wiersze średnikami.
Przykład 5
>> M = [exp(2) 2.3 .4;pi/2 7^2 log(5)]
M =
7.3891
2.3000
0.4000
1.5708
49.0000
1.6094
Często do obliczeń potrzebne są macierze o szczególnych właściwościach (zerowe,
jedynkowe, itd.). Program Matlab oferuje gotowe instrukcje do ich tworzenia:
zeros(m, n) - instrukcja tworzenia macirzy wypełnionej zerami o wymiarach m
xn
ones(m, n) - instrukcja tworzenia macierzy wypełnionej jedynkami o wymiarach m x n
eye(m, n) - istrukcja tworzenia macierzy jedynkowej o wymiarach m x n
magic(n) - instrukcja tworzenia kwadratu magicznego o wymiarach n x n
rand(m, n) - instrukcja generowania macierzy liczb losowych o wymiarach m
x n z przedziału (0, 1)
pascal(n) - instrukcja generowania macierzy, której elementy są współczynnikami w trójkącie pascala
hilb(n) - instrukcja generowania macirzy Hilberta
4
Przykład 6
% generowanie kwadratu magicznego o wymiarach 4 x 4
>> magic(4)
ans =
16
2
3
13
5
11
10
8
9
7
6
12
4
14
15
1
Innym ciekawym sposobem tworzenia macierzy jest notacja dwukropkowa.
Aby utworzyć wiersz macierzy składający się z równomierniernie rozmieszczonych elmentów należy wpisać m:krok:n, gdzie m i n to końce przedziału a krok
oznacza różnice wartości kolejnych elementów.
Przykład 7
% generowanie macierzy za pomocą notacji dwukropkowej
>> A = [-1 :1: 3; 10 :-2: 2]
A =
-1
0
1
2
3
10
8
6
4
2
3.2
Działania na macirzach
Program Matlab oferuje pełen zakres obliczeń macierzowych. Wykonując
je należy zwrócić uwagę, by wymiary macierzy dla odpowiednich operacji się
zgadzały. Jeśli się o tym zapomni podczas wykonywania operacji niepoprawnych program wyświetli odpowiedni komunikat o błędzie. Mnożenie, dodawanie
i odejmowanie macierzy wykonujemy z użyciem tradycyjnych operatorów matematycznych.
3.2.1
Dodawanie i odejmowanie
Przy dodawaniu i odejmowaniu należy pamiętać by macierze miały dokładnie
te same wymiary.
Przykład 8
% dzięki średnikowi program nie wypisuje wyniku operacji
>> A = [7 8; 9 10];
>> B = [8 2; 6 4];
>> C = A + B
C =
15
10
15
14
>> C = A - B
C =
-1
6
3
6
5
3.2.2
Mnożenie macierzy
Należy pamiętać, że mnożenie macierzy A*B jest wykonalne tylko wtedy gdy
ilość kolumn macierzy A jest równa ilości wierszy macierzy B.
Przykład 9
>> A = [4 6 12; 6 7 2; 8 4 1];
>> B = [2; 3; 5];
>> C = A * B
C =
86
43
33
3.2.3
Dzielenie macierzy
W dzieleniu macierzy rozróżnia się dzielenie lewostronne C = A\B takie,
że A*C = B oraz dzielenie prawostronne C = A/B takie, że C*A = B. Dla
dzielenia lewostronnego potrzebne jest spełnienie dodatkowego warunku, aby
obydwie macierze miały taką samą ilość wierszy. Z kolei w przypadku dzielenia
prawostronnego wymagana jest zgodność liczby kolumn macierzy A i B.
Przykład 10
>> A = [3 4 1 7; 1 5 9 2];
>> B = [4; 3];
% dzielenie lewostronne macierzy
>> C = A\B
C =
0
0
0.2131
0.5410
>> A = [3 7 4; 4 2 8];
>> B = [1 9 7];
% dzielenie prawostronne macierzy
>> C = A/B
C =
0.7176
0.5954
3.2.4
Mnożenie, dzielenie i potęgowanie tablicowe
Czasami potrzebne jest wykonanie działań w odniesieniu do poszczególnych
elementów w sposób podobny do operowania na tablicy. Stosowane jest to wtedy,
gdy np. chcemy pomnożyć elementy o tych samych indeksach. Wykonując operacje tablicowe należy podczas zapisywania działania dodatkowo dopisać kropkę
obok nazwy pierwszej macierzy np. A.*B
6
Przykład 11
>> A = [1 2 3; 4 5 6; 7 8 9];
>> B = [9 8 7; 6 5 4; 3 2 1];
% mnożenie tablicowe
>> C1 = A.*B
C1 =
9
16
21
24
25
24
21
16
9
% dzielenie tablicowe prawostronne
>> C3 = A./B
C3 =
0.1111
0.2500
0.4286
0.6667
1.0000
1.5000
2.3333
4.0000
9.0000
3.3
Inne operacje
Istnieje jeszcze wiele innch ważnych operacji na macierzach, które umożliwia
Matlab. Zaliczają się do nich:
rank(A) - oblicza rząd macierzy
det(A) - oblicza wyznacznik macierzy
inv(A) - wyznacza macierz odwrotną
diag(A) - zwraca elementy znajdujące się na głównej przekątnej
poly(A) - zwraca postać wielomianu charakterystycznego macierzy
dot(A, B) - oblicza iloczyn skalarny dwóch wektorów A i B
cross(A, B) - oblicza iloczyn wektorowy wektorów A i B
sum(A) - zwraca sumy poszczególnych kolumn macierzy
cumsum(A) - zwraca sumy kumulacyjne dla poszczególnych kolumn macierzy
4
Liczby zespolone
W programie Matlab użytkownik ma możliwość korzystania z liczb zespolnych. Zapisuje się je podobnie jak w matematyce czyli a + b*i gdzie a oznacza
część rzeczywistą, a b część urojoną. Do korzystania z liczb zespolonych wykorzystuje się nastepujące funkcje:
real(z) - zwraca część rzeczywistą liczby z
imag(z) - zwraca część urojoną liczby z
abs(z) - zwraca moduł liczby zespolonej z
conj(z) - zwraca sprzężenie dla liczby zespolonej z
angle(z) - zwraca kąt fazowy dla liczby zespolonej z
Przykład 12
>> z1 = 3 + 4*i;
7
>> z2 = -6 - 4*i;
% wykonanie mnożenia dla liczb z1 i z2
>> w1 = z1*z2
w1 =
-2.0000 -36.0000i
% kąt fazowy liczby w1
>> A = angle(z1)
A =
0.9273
% sprzężenie dla liczby zespolonej z2
5
Wielomiany
Wielomiany to funkcje, które wyjątkowo często pojawiają się podczas rozwiązywania wielu zagadnień matematycznych. Matlab oferuje wiele narzędzi do
podstawowych operacji, jak dodawanie, odejmowanie, mnożenie, dzielenie, potęgowanie czy też różniczkowanie wielomianów. Co więcej umożliwia obliczenie
wartości wielomianu dla konkretnych argumentów, rozkład wielomianu na czynniki oraz obliczenie pierwiastków.
Mówiąc o wielomianach warto zwrócić uwagę na funkcję syms. Służy ona do
deklaracji zmiennych symbolicznych. Inną ciekawą funkcją jest expand(y1) redukująca wyrazy podobne wielomianu i przedstawiająca je w klasycznej postaci.
Przykład 13
% deklaracja zmiennej x
>> syms x
>> y1 = x^4 + 5*x^3 + 3*x^2 + 10*x -5;
>> y2 = x^2 + 2*x -1;
% suma wielomianów
>> w1 = y1 + y2
w1 =
x^4+5*x^3+4*x^2+12*x-6
% iloczyn wielomianów
>> w2 = y1 * y2
w2 =
(x^4+5*x^3+3*x^2+10*x-5)*(x^2+2*x-1)
% iloczyn oraz redukcja wyrazów podobnych
>> expand(w2)
ans =
x^6+7*x^5+12*x^4+11*x^3+12*x^2-20*x+5
% iloraz wielomianów
>> w3 = y1/y2
w3 =
(x^4+5*x^3+3*x^2+10*x-5)/(x^2+2*x-1)
>> expand(w3)
ans =
8
1/(x^2+2*x-1)*x^4+5/(x^2+2*x-1)*x^3+3/(x^2+2*x-1)
*x^2+10/(x^2+2*x-1)*x-5/(x^2+2*x-1)
Jak widać, na powyższym przykładzie, próba podzielenia dwóch wielomianów
zapisanych w postaci symbolicznej nie powiodła się. W takich sytuacjach warto
przejść z Math Symbolic Toolbox do podstawowego Toolboxu Matlaba. Służą
do tego dwie instrukcje poly2sym([c1,c2,...,cn]) umożliwiająca zamianę wielomianu z postaci numerycznej do postaci symbolicznej oraz sym2poly(y1)
zamieniająca wielomian y1 z postaci symbolicznej do numerycznej. Do dzielenia
w postaci numerycznej służy funkcja [q, r] = deconv(v, u), gdzie q oznacza
wynik główny otrzymany z podzielenia w postaci wektorowej, a r oznacza resztę
z dzielenia w postaci wektorowej. U i v zawierają współczynniki rozpatrywanych wielomianów. W kolejnym przykładzie podzielę te same wielomiany, co w
przykładzie 13, funkcją deconv(v, u).
Przykład 14
>> y1 = x^4 + 5*x^3 + 3*x^2 + 10*x -5;
>> y2 = x^2 + 2*x -1;
>> y3=sym2poly(y1)
y3 =
1
5
3
10
-5
>> y4 = sym2poly(y2)
y4 =
1
2
-1
% do dzielenia używamy funkcji deconv(y3, y4)
>> [q,r] = deconv(y3,y4)
q =
1
3
-2
r =
0
0
0
17
-7
Do mnożenia numerycznego wykorzystuje się funkcję conv(u, v), gdzie analogicznie jak w funkcji deconv u i v to wektory współczynników.
Dla wielomianów istotne jest upraszczanie ich postaci i porządkowanie. W
Matlabie mamy wiele służących do tego instrukcji. Ciekawą funkcją jest factor(y), która rozkłada wielomian na czynniki pierwsze. Inną interesującą metodą jest simple(y), która testuje różne metody symplifikacji, a następnie wybiera
tą najlepszą i podstawia ją pod ans.
Przykład 15
>> syms x
>> y1 = x^3 - 3*x^2 + 4;
% rozkład wielomianu na czynniki
>> factor(y1)
ans =
(x+1)*(x-2)^2
>> y2 = y1 * (exp(x) + 1/x)
9
y2 =
(x^3-3*x^2+4)*(exp(x)+1/x)
% testuje wiele metod upraszczania i wybiera tę najbardziej optymalną
>> simple(y2)
simplify:
(x^3-3*x^2+4)*(exp(x)*x+1)/x
radsimp:
(x^3-3*x^2+4)*(exp(x)*x+1)/x
combine(trig):
(x^4*exp(x)+x^3-3*x^3*exp(x)-3*x^2+4*exp(x)*x+4)/x
factor:
(x+1)*(x-2)^2*(exp(x)*x+1)/x
expand:
x^3*exp(x)+x^2-3*x^2*exp(x)-3*x+4*exp(x)+4/x
combine:
(x^3-3*x^2+4)*(exp(x)+1/x)
convert(exp):
(x^3-3*x^2+4)*(exp(x)+1/x)
convert(sincos):
(x^3-3*x^2+4)*(exp(x)+1/x)
convert(tan):
(x^3-3*x^2+4)*(exp(x)+1/x)
collect(x):
x^3*exp(x)+(-3*exp(x)+1)*x^2-3*x+4*exp(x)+4/x
mwcos2sin:
(x^3-3*x^2+4)*(exp(x)+1/x)
ans =
(x^3-3*x^2+4)*(exp(x)+1/x)
Częstym problem jest znalezienie wartości wielomianu w określonym punkcie.
Służy do tego funkcja polyval(y, x), gdzie y jest wektorem współczynników
rozpatrywanego wielomianu zaś x argumentem, dla którego liczona jest wartość
wielomianu.
Przykład 16
>> syms x
>> y = x^2 + 3*x -5;
>> y1 = sym2poly(y);
>> polyval(y1,1)
ans =
-1
10
6
6.1
Granice, pochodne i całki
Granice
Wyznaczanie granic jest istotną umiejętnością podczas procesu badania funkcji. Granice są często wykorzystywane np. w rachunku całkowym. W programie
Matlab wyznacza się je korzystając z funkcji limit. Jej składnia może być następująca:
limit(y, zmienna, a) - instrukcja pozwala wyznaczyć granicę dla wyrażenia
symbolicznego y, względem wskazanej zmiennej, w punkcie x = a
limit(y, a) - instrukcja pozwala liczyć granice dla wyrażenia symbolicznego y
w punkcie x = a
limit(y) - instrukcja pozwala liczyć granice przy ustalonym a = 0
limit(y, zmienna, a, ’left’) - instukcja liczy granicę lewostronną dla wyrażenia
symbolicznego w punkcie x = a
limit(y, zmienna, a, ’right’) - instukcja liczy granicę prawostronną dla wyrażenia symbolicznego w punkcie x = a
Przykład 17
% obliczanie granicy lewostronnej dla wyrażenia 1/x
>> limit(1/x, x, 0,’left’)
ans =
-Inf
% obliczanie granicy dla wyrażenia nie posiadającego granicy w punkcie
>> limit( sin(1/x),x,0)
ans =
-1 .. 1
6.2
Pochodne
W Matlabie można policzyć pochodną dowolnego rzędu. Oto służące do tego
instrukcje:
diff(y, ’x’) - wyznaczenie pochodnej dla wyrażenia symbolicznego y ze względu
na zmienną ’x’
diff(y, n) - wyznaczenia n-tej pochodnej dla wyrażenia y
diff(y, ’x’, n) - wyznaczenie n-tej pochodnej dla wyrażenia symbolicznego y ze
względu na zmienneą ’x’
Przykład 18
>> syms x
>> y = x^4 + 3*x^2 -8;
% obliczam drugą pochodną funkcji y
>> diff(y,’x’,2)
ans =
12*x^2+6
11
Program Matlab umożliwia zarówno całkowanie symboliczne jak i numeryczne.
Korzystając z niego można obliczyć wartości całek oznaczonych, jak i nieoznaczonych. Do całkowania symbolicznego służą funkcje:
int(y) - zwraca całkę nieoznaczoną wyrażenia symbolicznego y
int(y, x) - zwraca całkę nieoznaczoną wyrażenia symbolicznego y ze względu
na zmienną x
int(y, a, b) - zwraca całkę oznaczoną dla y, w granicach od a do b
int(y, x, a, b) - zwraca całkę oznaczoną dla y, w granicach od a do b dla
ustalonej zmiennej x
Przykład 19
>> syms x
>> y = x^2/(x^6 + 4);
>> int(y,x)
ans =
1/6*atan(1/2*x^3)
>> int(y,x,1,2)
ans =
1/6*atan(4)-1/6*atan(1/2)
Do całkowania numerycznego służą funkcje:
quad(funkcja, a, b) - szacuje wartość całki na przedziałale od a do b wykorzystując metodę Simpsona
quad(funkcja, a, b, tol) - szacuje wartość całki na przedziale od a do b wykorzystując metodę Simpsona dla dokładności obliczeń tol domyślnie ustawionej
na 10−6 .
Przykład 20
>> quad(’exp(x.^3)’,0,1,10^-6)
ans =
1.3419
7
Funkcje i skrypty
Dowolną sekwencję instrukcji Matlaba można zapisać w pliku z rozszerzeniem
”m”. Aby uruchomić tak powstały skrypt należy w linii komend wpisać jego
nazwę (bez rozszerzenia). Powoduje to wczytanie pliku i wykonanie zawartych
w nim instrukcji. Oto przykład prostego skryptu:
Przykład 21
% skrypt służy do wypisania wartości sinusa dla różnych kątów
sin0 = sin(0)
sin30 = sin(pi/6)
sin60 = sin(pi/3)
12
sin90 = sin(pi/2)
sin180 = sin(pi)
Zapisałem go w pliku ”skrypt.m”. Aby go teraz uruchomić należy ustawić katalog
bieżący Matlaba na katalog, gdzie znajduje się ten skrypt i wpisać w linii komend
skrypt. Oto wyniki:
Przykład 22
>> skrypt
sin0 =
0
sin30 =
0.5000
sin60 =
0.8660
sin90 =
1
sin180 =
1.2246e-016
Używanie skryptów jest wygodne, ale nie daje możliwości wywołania go z argumentami. Taką możliwość daje natomiast funkcja. Podobnie jak skrypt jest ona
zapisywana w pliku o rozszerzeniu ”m”. Jej pierwsze linie mają postać function[x,y,x,...] = nazwa(a,b,c, ...), gdzie a, b, c to argumenty funkcji a x, y,
z to wartości zwracane przez funkcję. Oto przykład prostej funkcji:
Przykład 23
% funkcja służąca do wyznaczania macierzy diagonalnej
function B = funkcja(A)
% znajdowanie postaci wielomianu charakterystycznego
p = poly(A)
% wyliczenie wartości pierwiastków funkcją roots
r = roots(p)
% sortowanie wyników
r = sort(r)
B = diag(r)
A oto wywołanie funkcji:
Przykład 24
>> a=[2 -1; -1 2];
>> funkcja(a)
p =
1
-4
3
r =
3
1
r =
13
1
3
B =
1
0
ans =
1
0
8
0
3
0
3
Wizualizacja danych
Matlab posiada szerokie spektrum zastosowań w dziedzinie reprezentacji graficznej różnych danych. Umożliwia rysowanie wykresów funkcji w drugim jak i
trzecim wymiarze. Pozwala na konwersje otrzymanych rezultatów do wszystkich
graficznych formatów. Matlab to również esteta, gdyż w prosty sposób ułatwia
realizacje takich czynności jak zmiana kolorów tworzonych wykresów, dodawanie
opisów, legend itd. Ogólnie wszystkie te funkcje można podzielić na 4 grupy:
•
•
•
•
8.1
Funkcje
Funkcje
Funkcje
Funkcje
przeznaczone do tworzenia wykresów dwó- i trójwymiarowych.
prezentujące wykresy ciągłe i dyskretne.
umożliwiające tworzenie grafiki wektorowej i rastrowej.
wysokiego i niskiego poziomu.
Realizacja okien graficznych
Funkcje tworzenia i usuwania okienek:
figure - tworzy nowe okno graficzne
figure(n) - tworzy nowe okno o numerze n lub uaktywnia okno o tym numerze
close - zamyka aktywne okno
close(n) - zamyka okno o numerze n
close all - zamyka wszystkie okna
clf - usuwa zawartość aktywnego okna
Funkcje sposobu wyświetlania okienek:
subplot - umieszczanie wielu obiektów (rysunków) w różnych oknach (funkcja
ta dokonuje podziału okna na mniejsze okienka, w których umieszczamy interesujące nas rysunki, wykresy)
subplot(k, l, j) - dzieli okno na k x l okienek uaktywniając okno o numerze j
(numeracja okien od lewej do prawej i od góry do dołu)
subplot(’position’,[lewy dolny szerokość wysokość]) - tworzy okienko w
obrębie istniejącego już rysunku. Jego pozycja jest liczona względem lewego dolnego rogu rysunku. Podając parametry w których szerokość = wysokość = 1
otrzymamy układ o rozmiarach rysunku
14
8.2
Rysowanie wykresów funkcji
Funkcje służące do rysowania wykresów funkcji:
plot(x, y) - rysuje funkcje o argumentach będącymi elementami składowymi
wektora x i wartościach będącymi elementami wektora y (np. x = 0:.3:10 definiuje wektor, którego składowe są z zakresu od 0 do 10, każdy następny większy
o 0.3).
Przy generowaniu wektorów przydatna jest funkcja:
linespace(x1, x2 ,N) - tworzy ona wektor N-wymiarowy o składowych z przedziału (x1, x2) o rozkładzie równomiernym. Podana bez trzeciego argumentu
tworzy wektor o 100 składowych
plot(y) - rysuje wykres, którego wartości to elementy wektora y, podstawiając
za x = 1:length(y)
plot(x, y, s) - rysuje wykres y(x) z określeniem wyglądu linii s - łańcuch zawierający kody
plot(x1, y1, x2, y2, ...) - rysuje w jednym oknie wiele wykresów y1(x1),
y2(x2), itd.
plot(x1, y1, s1, x2, y2, s2, ...) - rysuje w jednym oknie wiele wykresów z
określeniem dokładnego wyglądu linii każdego z nich
8.3
Określanie wyglądu rysowanej linii
Oto przydatne znaczniki:
”-” - rysuje linie ciągłą(ustawienie domyślne)
”–” - rysuje linie kreskowaną
”:” - rysuje linie kropkowaną
”-.” - rysuje linie na przemian używając kropki i kreski
Ponad to można zmieniać kolory rysowanych wykresów. Z reguły podawany parametr jest początkową literą nazwy koloru w języku angielskim, choć są wyjątki:
”k” - czarny
”m” - karmazynowy
”c” - turkusowy
8.4
Opisywanie wykresów
Służą do tego:
xlabel (tekst) - wyświetla łańcuch znaków opisujących oś odciętych aktywnego
wykresu
ylabel (tekst) - funkcja analogiczna do powyższej
title (tekst) - służy do zatytułowania aktywnego wykresu
text (x, y, tekst) - wyświetla łańcuch w miejscu o współrzędnych (x, y)
legends(o1, o2, ...) - wyświetlanie legendy z opisem o1 odnoszącym sie do
pierwszego wykresu, o2 do drugiego itd.
grid on/off - włączanie lub wyłączanie pomocniczej siatki współrzędnych
15
8.5
Funkcja hold
Wyświetlanie w oknie graficznym wykresu nowej funkcji powoduje zazwyczaj
usunięcie obrazu starego wykresu i pojawienie sie nowego. Aby temu zapobiec
stosuje się funkcje hold on - wtedy nowy wykres zostanie dodany do starego nie
usuwając go przy tym. Aby powrócić do poprzednich ustawień używamy funkcji
hold off. Kiedy zapomnimy jakie są aktualne ustawienia wystarczy użyć funkcji
ishold, która sprawdzi stan przełącznika hold.
8.6
Ustawienia wyglądu osi - funkcja axis
Rodzaje zastosowań:
axis([xmin xmax ymin ymax ]) - ustawienie zakresu osi x oraz y
axis auto - zakres osi jest ustanawiany automatycznie
axis manual - przydatna przy włączonym znaczniku hold, gdyż uruchamia
automatyczne ustawienie zakresu osi w momencie, gdy rysujemy kolejny wykres
w tym samym układzie współrzędnych
axis ij - zmiana układu współrzędnych na macierzowy
axis xy - zmiana układu współrzędnych na kartezjański
axis equal - sprawia, iż jednostka na podziałkach każdej z osi ma ten sam
rozmiar
axis image - zmiana rozmiaru osi na takie same jak rozmiar wykresu
axis square - ustawia jednakowy rozmiar wszystkich osi
axis normal - powrót do standardowych ustawień rozmiaru osi
axis off - ukrycie osi razem z ich opisem
axis on - operacja odwrotna do powyższej
[s1,s2,s3] = axis(’state’) - zwraca aktualne ustawienia układu przy czym s1
- auto lub manual, s2 - on lub off s3 - xy lub ij
v = axis - zwraca wektor wierszowy v = [xmin xmax ymin ymax ]
8.7
Funkcja fplot
Wywołanie funkcji:
fplot(f, [xp, xk]) - jest to funkcja służąca do dokładnego wyrysowania wykresu,
gdzie: f - wzór rysowanej funkcji xp, xk - początek i koniec przedziału rysowania
funkcji
[x, y] = fplot - spowoduje zwrócenie wektora argumentów x oraz wektora
wartości funkcji y
16
Przykład 25
>> fplot(’tan(exp(x)*sin(x)*log(x^2) - x^4)’, [1,3])
Rysunek 1: Wykres funkcji tan(exp(x) ∗ sin(x) ∗ log(x2 ) − x4 przy użyciu funkcji
fplot
8.8
Wykresy w skali logarytmicznej
Przydatne funkcje to:
loglog(x, y, s) - przeskalowanie obu osi na skale logarytmiczna
semilogx(x, y, s) - przeskalowanie tylko osi x
semilogy(x, y, s) - przeskalowanie tylko osi y
logspace(x1, x2, N) - funkcja generująca wektor o N elementach, którego
elementy mają rozkład logarytmiczny równomierny, na przedziale od x1 do x2
(podana bez trzeciego parametru przyjmuje N = 50)
8.9
Rysowanie w układzie biegunowym
Do tego celu służy funkcja polar(theta, r, s) gdzie:
theta - wektor kątów w radianach dla poszczególnych punktów
17
r - wektor odległości poszczególnych punktów od początku układu współrzędnych
s - opcjonalny argument określający wygląd rysowanej lini (podobnie jak w funkcji plot)
8.10
Rysowanie danych zespolonych
Realizujemy je przez funkcje:
plot(z, s) - jeśli z jest macierzą o elementach zespolonych, to zostanie narysowany wykres Im(z) = f(Re(z)) (równoważnym poleceniem będzie
plot(real(z), imag(z), s)
compass(z, s) i compass(x, y, s)- rysuje wykres, na którym elementy macierzy zespolonej z są przedstawione w postaci strzałek o wspólnym początku
i grotach w punktach opisanych przez współrzędne x = real(z), y = imag(z);
x i y są współrzędnymi kartezjańskimi , wykres jest rysowany w biegunowym
układzie współrzędnych
feather(z, s) i feather(x, y, s) - rysuje wykres, na którym elementy macierzy
zespolonej z są przedstawione w postaci strzałek o początkach rozmieszczonych
równomiernie na osi x. Długości strzałek są równe modułom elementów macierzy
z, a kąty nachylenia strzałek ich argumentom.
9
Grafika trójwymiarowa
Informacji na temat korzystania z funkcji 3D w Matlabie można uzyskać
poprzez wpisanie komendy:
>> help graph3d
Grafika przestrzenna jest szeroko rozbudowana, gdyż daje możliwość tworzenia
wykresów trójwymiarowych krzywych przestrzennych, siatek, powierzchni oraz
wykresów konturowych.
9.1
9.1.1
Podstawowe funkcje do tworzenia obrazów trójwymiarowych
Funkcja plot3
Jej wywołanie to:
plot3(x, y, z, s) - funkcja ta jest odpowiednikiem dwuwymiarowej funkcji plot.
Generuje ona trójwymiarową krzywą złożoną z punktów (xi , yi , zi ), których
współrzędne zostały określone w wektorach x, y, z. Długości wektorów muszą
być takie same.
9.1.2
Funkcja meshgrid
Powierzchnia rysowana jest w Matlabie jako wykres funkcji z = f(x, y), przy
czym współrzędne punktów (xi , yi ) określone są za pomocą wektorów X i Y,
gdzie indeksy ij przyjmują wartości i = 1:length(X), j = 1:length(Y).
18
Ponieważ tworzymy wykres trójwymiarowy na dwuwymiarowej płaszczyźnie
ekranu, na początek należy wygenerować specjalną siatkę na płaszczyźnie XY
w tych węzłach, w których szukane są wartości funkcji na osi z. Służy do tego
właśnie funkcja meshgrid:
[x,y] =meshgrid(X,Y) - transformuje obszar opisany przez wektory X i Y (z
przstrzeni 3D) na dwie macierze x oraz y we współrzędnych ekranowych 2D
[x,y] = meshgrid(X) - pełni to samo zadanie co wywołanie meshgrid(X, X)
9.1.3
Funkcje z rodziny funkcji mesh
Zaliczamy do nich:
mesh(x, y, z, c) - rysuje powierzchnie opisaną macierzami x, y, z w postaci
kolorowej siatki o polach wypełnionych kolorem tła. Elementy macierzy c określają kolory linii poszczególnych pól.
mesh(x, y, z) - rysuje powierzchnię, przyjmując c = z
mesh(z, c) - rysuje wykres wartości elementów macierzy z, przyjmując x = 1:n,
y = 1:m, gdzie [m,n] = size(z)
meshc(x, y, z, c) - rysuje siatkę identyczną jak funkcja mesh i umieszcza pod
nią wykres poziomicowy
meshz(x, y, z, c) - działa jak mesh, ale dodatkowo w dół od krawędzi wykresu
rysowane są linie odkreślające płaszczyzny odniesienia
9.1.4
Funkcja surf
Używamy jej w następujący sposób:
surf(x, y, z, c) - rysuje różnokolorową powierzchnię opisaną macierzami x, y,
z
surf(x, y, z) - rysuje powierzchnię, przyjmując c = z
surf(z, c) - rysuje powierzchnię, przyjmując x = 1:n, y = 1:m, gdzie [x, y] =
size(z)
surfc(x, y, z, c) - łączy działanie funkcji surf i contour
surfl(x, y, z, s, k) - rysuje powierzchnię z uwzględnieniem odbić światła, gdzie
s - określa kierunek, z którego pada światło, k - określa współczynnik odbicia i
rozproszenia
Funkcja waterfall(x, y, z, c) działa podobnie jak meshz z tą różnicą, że nie
rysuje linii odpowiadających kolumnom macierzy.
9.2
Funkcje shpere i cylinder
Oto ich składnia:
sphere(n) - tworzy kulę o promieniu 1 oraz środku w początku układu współrzędnych wykorzystując 2(n+1) punktów siatki tworzącej jej powierzchnię. Aby
zmienić położenie środka kuli wywołujemy funkcje surf(x+2, y-1, z+1), która
w tym wypadku utworzy wykres kuli o promieniu 1 ze środkiem w punkcie (2,
-1, 1).
19
Funkcja cylinder jest wykorzystywana do tworzenia wykresów powierzchni
obrotowych. Wywoływana jest z dwoma opcjonalnymi parametrami wejściowymi:
cylinder(r, n) - parametr r jest wektorem definiującym promienie walca w kolejnych punktach wzdłuż osi z, a n jest liczbą punktów siatki na obwodzie walca.
Wartości domyślne dla tych parametrów to r = [1 1] oraz n= 20. Przykładowo komenda cylinder([1 0]) utworzy stożek o wysokości i promieniu podstawy
równym 1.
Przykład 26
>> sphere(100)
Rysunek 2: Oto kula wygenerowana funkcją sphere
References
1.
2.
3.
4.
Wiesława Regel, ”Obliczenia symboliczne i numeryczne w programie MATLAB”
http://pl.wikipedia.org/
www.pg.gda.pl/ kmb/polish/skrypt.pdf
www.mathworks.com/
20

Podobne dokumenty