Kier. MTR Programowanie w MATLABie Laboratorium Ćw. 5 Grafika dwu- i trójwymiarowa MATLABie 1. Wprowadzenie W środowisku MATLAB dostępna są bardzo szerokie możliwości wizualizacji danych w postaci różnego rodzaju wykresów dwu- i trójwymiarowych. Dostępne są zarówno funkcje, za pomocą których w prosty sposób można wykonać wykresy. Moduł Handle Graphics, w oparciu o zaimplementowany model obiektowy grafiki, oferuje rozszerzenie możliwości podstawowych funkcji graficznych i uzyskanie różnorodnych efektów. Możliwe jest także interaktywna edycja wykresów za pomocą wbudowanego edytora Plot Tools wywoływanego poleceniem plottools. Posługiwanie się nim jest proste i nie wymaga głębszej znajomości obiektowego modelu grafiki. Wykresy i obiekty graficzne umieszczane są w oddzielnych oknach. Otwarcie okna następuje po użyciu polecenia figure. Można otworzyć wiele takich okien, każde z innym wykresem. Zamknięcie bieżącego okna wykresu dokonuje się poleceniem close gcf, zaś wszystkich otwartych okien za pomocą polecenia close all. Wykresy dwuwymiarowe (2D) Funkcja plot Wykresy dwuwymiarowe w układzie kartezjańskim (x,y), z liniową skalą na obu osiach tworzy się za pomocą funkcji plot. Domyślnie otwiera ona okno wykresu jeśli żadne okno nie zostało dotąd otwarte, dobiera skale osi i kolory linii danych. Najczęsciej stosowane wywołania funkcji mają postać: plot(y) - wykres wartości umieszczonych w wektorze y; wartości na osi x są równe domyślnie kolejnym liczbom naturalnym [1 2 3 ] plot(x, y, 'kolor_typ_linii',) - wykres funkcji y=f(x) o określonym przez ciąg znaków umieszczonym w apostrofie kolorze i typie linii. Gdy x, i y są wektorami, narysowany zostanie pojedynczy wykres; liczby elementów obu wektorów muszą być jednakowe. plot(x1,y1,'kolorlinia',x2,y2,'kolorlinia',... ) umieszczenie na tym samym wykresie większej liczby serii danych (y 1 =f(x 1 ), y 2 =f(x 2 ) ) W tab. 1 przedstawiono opisy symboli stosowane w ciągach 'kolorlinia' służących do określania rodzaju i koloru linii. Tab. 1. Kolory, rodzaje linii i typy punktów danych Symbol Typ i kolor linii Symbol Typ punktu - linia ciągła. -- linia kreskowa o -. linia kreska-kropka x : linia kropkowana * * r czerwony g g zielony v b niebieski ^ w biały > i niewidzialny < 1
y Żółty s k czarny p c błękitny h m purpurowy Moduł Hadle Graphics umożliwia określenie innych własności wykresu, poprzez podanie nazwy własności i jej wartości: plot(,'nazwa_wlasnosci', wartosc,... ) Stosowanie tego rozwiązania, mimo dużych możliwości, wymaga znajomości przynajmniej najczęściej wykorzystywanych własności i wartości jakie one mogą przyjmować. Przykładyczęściej wykorzystywanych własności : 'LineWidth' - grubość linii 'MarkerEdgeColor' kolor punktu danych 'MarkerSize' rozmiar punktu danych Szczegółowy opis własności zaimplemetowanych w Handle Graphics znajduje się w systemie pomocy. Wraz z wprowadzaniem nowych wersji MATLABa modyfikacjom podlega także zestaw własności wykresów, stąd też mogą wystąpić problemy w przypadku korzystania ze starszych wersji, które nie obsługiwały danej własności i w trakcie wykonania programu może wystąpić błąd lub otrzymany efekt będzie różnić się od spodziewanego. Dodawanie opisów i modyfikacja wykresów Najczęściej stosowane funkcje do wprowadzania dodatkowych opisów na wykresach przedstawia tab. 2. Funkcja xlabel('tekst opisu') ylabel('tekst opisu') title('tekst tytułu') text(x, y, 'Tekst') Tab. 2. Funkcje do wprowadzania opisów na wykresach Opis Opis osi x wykresu Opis osi y wykresu Tytuł wykresu Umieszczenie tekstu w rysunku w pozycji określone współrzędnymi (x, y) określonymi zgodnie z wartosciami na osiach grid on off Nakładanie lub wyłączanie linii siatki pomocniczej pokrywającej rysunek w obu osiach legend('opis1', Opis2, ); Dodanie legendy, będącej opisem poszczególny serii danych umieszczonych na wykresie Zmiana zakresu wartości na osiach jest możliwa za pomocą polecenia axis([xmin xmax ymin ymax]) gdzie wektor [xmin xmax ymin ymax] określa wartości na końcach obu osi. Powrót do domyślnego skalowania osi odbywa się po wydaniu polecenia axis('normal') powrót do domyślnego skalowania osi odbywa się po wydaniu polecenia Sposoby wyświetlania wykresów Domyślnie wykres umieszczony w oknie zastępowany jest przez inny po wydaniu odpowiedniego polecenia. Często jednak zachodzi potrzeba zachowania wersji wykresu sprzed modyfikacji. Możliwe jest to za pomocą polecenia 2
hold on Polecenie hold off wyłącza opcję hold on; odtąd każdy nowy rysunek zastąpi poprzedni. Przydatne również jest umieszczanie większej liczby wykresów w jednym oknie graficznym. Podziału okna dokonuje się za pomocą polecenia subplot(hva) lub subplot(h,v,a) gdzie h - liczba podziałów okna w osi poziomej (1-9) v - liczba podziałów okna w osi pionowej (1-9), a - numer aktywnego okna. Przykładowo, przy wyborze h=2 i v=2: okno zostanie podzielone na 4 mniejsze okna (2 2), h=1, v=2 lub h=2, v=1: okno zostanie podzielone na 2 mniejsze okna (1 2 lub 2 1). Poszczególne wykresy tworzy się, opisuje i modyfikucje w sposób opisany poprzednio po podaniu polecenia subplot z odpowiednim numerem wykresu. Zapis wykresu do pliku zewnętrznego Zachowanie rysunku wykresu w pliku zewnętrznym możliwe jest dzięki poleceniu: saveas(gcf, filename, formattype) gdzie gcf zwraca uchwyt do bieżącego okna rysunku, filename - nazwa pliku formattype - rodzaj formatu (p. tab. 3) Format fig m jpg png eps pdf bmp emf pbm pcx pgm ppm tif Tab. 3. Wybrane formaty do zapisu rysunków Opis formatu rysunek MATLABa m-plik wymagający specjalnego otwarcia JPEG image Portable Network Graphics EPS Level 3 Black and White Portable Document Format Windows bitmap Enhanced metafile Portable bitmap Paintbrush 24-bit Portable Graymap Portable Pixmap TIFF image, compressed Opcja Generate Code Niekiedy zachodzi potrzeba wykonania takich samych wykresów różnicących się jedynie danymi do ich wykonania. MATLAB umożliwia za pomocą opcji File Generate Code w oknie graficznym automatycznie wygenerowanie kodu w postaci m-funkcji, która 3
będzie rysować wykres dentyczny lub bardzo zbliżony do tego, na podstawie którego kod został utworzony. Funkcję po zapisaniu można używać w innych programach z dowolnymi danymi. Inne funkcje do rysowania wykresów Funkcja fplot umożliwia rysowanie wykresu bez konieczności podawania wartości współrzędnych poszczególnych punktów. Wymagane jest podanie funkcji anonimowej lub, nazwy m-funkcji. Wywołanie funkcji w postaci fplot(nazwa_funkcji, przedział) wykreśla funkcję o podanej nazwie w podanym przedziale określonym przez argument, gdzie: przedział = [xmin xmax] lub przedział = [xmin xmax ymin ymax] Wywołanie [x, y] = fplot(nazwa_funkcji, przedział,...) Zwraca wektory wartości x i y (odciętych i rzędnych) użytych do rysowania wykresu funkcji. Wybrane funkcje służące do przygotowania dwuwymiarowych wykresów innych typów zestawiono w tab. 4. Funkcja plotyy loglog semilogx, semilogy bar, barh polar stem scatter stairs compass pie Tab. 4. Wybrane typy wykresów dostępnych w MATLABie Opis Wykres z dwiema osiami rzędnych Wykres z osiami w skali logarytmicznej Wykres z jedną osią w skali logarytmicznej, odpowiednio x i y Wykres słupkowy w orientacji odpowiednio pionowej i poziomej Wykres w biegunowym układzie współrzędnych Wykres dla wielkości dyskretnych Wykres punktowy Wykres schodkowy Wykres wektorowy (strzałkowy) wektora o podanych współrzędnych Wykres kołowy (tortowy) Wykresy trójwymiarowe (3D) Dostępne w MATLABie funkcje umożliwiają przygotowanie wykresów trójwymiarowych w postaci linii, brył, konturów i in. z możliwością określenia różnych parametrów i sposobów transformacji obrazu. Do rysowania wykresu złożonego z linii w trzech wymiarach w kartezjańskim układzie współrzędnych funkcja plot3, którą wywołuje się następująco: plot3(x, y, z, 'kolor_typ_linii') rysuje wykres złożony z linii łączących punkty, których współrzędne podano w wektorach x, y i z. Wywołanie plot3(x1,y1,z1,'kolorlinia',x2,y2,z2,'kolorlinia',... ) umożliwia umieszczenie na jednym wykresie większej liczby serii danych. 4
Atrybuty linii za pomocą kolorlinia określa się tak samo, jak w przypadku funkcji plot. Przygotowanie wykresu powierzchni reprezentującej funkcję dwóch zmiennych z = f(x, y) wymaga utworzenia macierzy wartości zmiennych niezależnych, dla których obliczone zostaną wartości funkcji. Służy do tego funkcja meshgrid. Jej wywołanie ma postać: [X, Y] = meshgrid(x, y); gdzie x, y wektory wartości zmiennych niezależnych X, Y macierze ze współrzędnymi węzłów siatki określonymi na podstawie wartości wpółrzędnych podanych w wektorach x i y. Po obliczeniu wartości funkcji z = f(x, y) w punktach określonych przez macierze X, Y możliwe jest jej narysowanie. Polecenia x=-2:0.25:2; y=-2:0.25:2; [X,Y]=meshgrid(x,y); Z=sin(2*X)+Y.^2; mesh(x,y,z); Rysują wykres funkcji z = sin(2x) + y 2 w przedziale x, y (-2; 2) w postaci siatki. Użycie funkcji surf(x, Y, Z) wyświetli wykres w postaci kolorowanej powierzchni. Na rys. 1a przedstawiono wykres, będący wynikiem wykonania powyższych poleceń. Zastosowanie funcji surf(x, Y, Z) zamiast mesh(x, Y, Z) umożliwia zastąpienie na wykresie siatki przestrzennej kolorowaną płaszczyzną (rys. 1b). a) 5
b) Rys. 1. Wykres funkcji z = sin(2x) + y 2 uzyskany za pomocą m-funkcji: a) mesh, b) surf 2. Ćwiczenie laboratoryjne Uruchomic i przeanalizować działanie funkcji plotyytest, fplottest, wykresy3d. 3. Zadanie laboratoryjne 1. Napisać program rysujący wykres tłumionej sinusoidy o równaniu y = e -ax sin bx, x (0; 10). Na wykresie powinny znajdować się także linie będące obwiednią sinusoidy, tytuł opis osi, siatka, legenda i in. (por. rys. 2). Wykres zapisać w formacie jpg. Rys. 2. Przykładowy wykres do zad. 1 6
2. Napisać program rysujący wykres paraboli y = ax 2 +bx+c z zaznaczeniem jej wierzchołka i rzeczywistych miejsc zerowych (jeśli istnieją) wraz z opisem (rys. 3). 180 Wykres paraboli o zadanych a,b,c 160 140 120 100 Y 80 60 40 20 0 X1 X2-20 -10-8 -6-4 -2 0 2 4 Xw,Yw 6 8 10 X Rys. 3. Przykładowy wykres do zad. 2 3. Napisać program rysujący w jedym jednym oknie wykresy przebiegu napięcia U i prądu w obwodzie, którego schemat przedstawionio na rys. 4. Chwilowa wartość napięcia: u = U m sin( t+ u ), i prądu: R U t m U m L i sin( t u ) e sin( u ), Z Z gdzie: t = 0-5 s czas, U m = 325 V amplituda napięcia, = 314 rad/s - pulsacja, u = /8 - kąt fazowy napięcia, R = 1 k - rezystancja obwodu, L = 1 mh indukcyjność obwodu, 2 2 L Z R X - impedancja, arctg - kąt impedancji. R R + j L U W Rys. 4. Schemat obwodu do zad. 3 7