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