Katedra Elektrotechniki Teoretycznej i Informatyki Przedmiot: Zintegrowane Pakiety Obliczeniowe W Zastosowaniach Inżynierskich Numer ćwiczenia: 3,4 Temat: Wizualizacja rozkładów jedno i wielowymiarowych, graficzny interfejs, interpolacja i decymacja, dopasowanie krzywej Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z podstawowymi funkcjami wykreślającymi wykresy oraz tworzącymi okna komunikacyjne (dialog box). Podstawy teoretyczne MATLAB GRAPHIC - WYKRESY D..8.8.6.4.5.5.6.4.. -. -. -.4 -.6 -.5 -.5 -.4 -.6 -.8 -.8-3 4 5 6 7 8 x=:.5:8; y=sin(x.^); y=sin(x); plot(x,y, x,y); 5 4 3 - % Wykres logarytmiczny x = logspace(-,); loglog(x,exp(x),'-s'); grid on - 3 4 5 6 7 -. % Tworzenie wykresu z dwiema % osiami y z użyciem funkcji plot t = :pi/:*pi; y = sin(t); y =.5*sin(t-.5); plotyy(t,y,t,y,'plot').5.5 -.5 - -.5 -.5 - -.5 - -.5.5.5.5 % Wykres błędu x=-:.:; y=erf(x); e = rand(size(x))/; errorbar(x,y,e); - 3 4 5 6 7 8 9 % Wykres schodkowy funkcji sin x=:.5:; stairs(x,sin(x));.35.3.5..5..5 -.5 -. -.5.5.5.5 3 3.5 4 % Stem plot x = :.:4; y = sin(x.^).*exp(-x); stem(x,y) 8 5 9.5.375.5 6 3 % % 6.5 8 4 33% 33 8% 3 4 5 6 7 8 9 4 7 3 6%
% Wykres półlogarytmiczny(y-log) x = :.:; semilogy(x,.^x) % Wykres półlogarytmiczny(x-log) x = :.:; semilogx(.^x,x) % Wykres biegunowy t=:.:*pi; polar(t,abs(sin(*t).*cos(*t))); x = [ 3.5.5 ]; explode = [ ]; pie(x,explode).9.8.7.6.5.4.3.. -3 - - 3 % Wykres słupkowy funkcji dzwonowej x = -.9:.:.9; bar(x,exp(-x.*x)); 8 6 4 8 6 4 3 4 5 6 7 8 9 Y = round(rand(9,)*); barh(y) 5 5 5 3 4 5 Y = round(rand(5,3)*); bar(y,'stack') 9 8 7 6 5 4 3 3 4 5 Y = round(rand(5,3)*); bar(y,.5) 5 4 3 5 5 5 Y = round(rand(5,3)*); barh(y,'stack') 9 8 7 6 5 4 3 3 4 5 Y = round(rand(5,3)*); bar(y,'group') 9 6 6.5 4 8.5 5 3 6 8 4 -.5-33 -.5.5.5 3 3.5 4-4 6 8 4 6 8 4 7 3 Y = [, 5, 3; 3,, 7;, 5, 3;..., 6, ]; area(y); grid on theta = (-9::9)*pi/8; r = *ones(size(theta)); [u,v] = polcart(theta,r); feather(u,v); theta=*pi*rand(,5; rose(theta) 9 4.635 6 3.7.8 % 5.88 3 %.49 8% 8.6.4. 33% 6% -. -.4 33 -.6 -.8 4 7 3 - - -.5 - -.5.5.5 x = [ 3.5.5 ]; explode=[ ]; pie3(x,explode); Z = eig(randn(,)); compass(z) % plot a function fplot('tanh',[- ])
Funkcja Zastosowanie Składnia Opis hold subplot Zatrzymuje bierzący wykres w okienku Tworzy i kontroluje wykresy o wielu osiach hold on hold off hold subplot(m,n,p) Funkcja hold określa czy nowo rysowany wykres zostanie dodany do bieżącego wykresu, czy go zastąpi. hold on zatrzymuje bieżący wykres i pewne właściwości osi tak że następne polecenia rysowania dodają kolejne wykresy do bieżącego. Subplot dzieli bieżące okienko wykresu na kwadratowe obszary, które są numerowane rzędami. Każdy obszar zawiera osie. subplot(m,n,p) tworzy osie w p-tym obszarze okienka podzielonego na m-na-n kwadratowych obszarów. Nowe osie stają się osiami bieżącymi. Przykłady income = [3. 4. 5. 5.6]; outgo = [.5 4. 3.35 4.9]; subplot(,,); plot(income) subplot(,,); plot(outgo) plot grid Liniowy wykres -D Rysuje linie siatki dla wykresów -D I 3-D plot(y) plot(x,y,...) plot(x,y,linespec,...) grid on grid off grid plot(y) wykreśla kolejne wartości w kolumnach Y. Jeśli Y jest macierzą zespoloną plot(y) is równoważne do plot(real(y),imag(y)). We wszystkich innych przypadkach użycia plot, część urojona jest ignorowana. plot(x,y,...) wykreśla wszystkie linie zdefiniowane parami (Xn, Yn). Jeśli tylko Xn lub Yn jest macierzą, wektor jest rysowany w odniesieniu do rzędów lub kolumn macierzy, w zależności od tego który wymiar macierzy zgadza się z wymiarem wektora. plot(x,y,linespec,...) wykreśla wszystkie linie zdefiniowane przez trójki Xn,Yn,LineSpec triples, gdzie LineSpec jest specyfikacją linii określającą jej typ, marker, kolor itp. Funkcja grid włącza i wyłącza linie siatki dla bieżących osi. grid on dodaje siatką dla bieżących osi. grid off usuwa siatkę dla bieżących osi. grid przełącza stan widoczności siatki. plot(x,y,'c+') %rysuje wykres w kolorze cyan z % markerem + w każdym punkcie Xn,Yn plot(x,y,'r-',x,y,'go') %rysuje wykres czerwoną ciągłą linią %łączącą punkty i zielonymi kółkami %oznaczającymi lokalizację punktów %danych 3
legend title Wyświetla legendę osi Dodaje opis do bierzącej osi legend('string','string',...) legend('off') legend('string','string',...,pos) title('string') title(fname) title(...,'propertyname',propertyvalu e,...) legend umieszcza legendę na wykresie. Legenda pokazuje, dla każdej linii na wykresie, typ linii, markera i jej kolor obok opisu wprowadzonego przez użytkownika. W przypadku wykreślania wypełnionych przestrzeni, legenda zawiera kolor ścianki. Po wyświetleniu legendy użytkownik może przesuwać ją po wykresie przy użyciu myszki. pos = - umieszcza legendę poza obszarem ograniczonym przez osie, po prawej stronie pos = umieszcza legendę w obszarze ograniczonym przez osie zasłaniając jak najmniej punktów wykresu pos = umieszcza legendę w górnym-prawym rogu obszaru wyznaczonego przez osie (wartość domyślna). pos = umieszcza legendę w górnym-lewym rogu obszaru wyznaczonego przez osie. pos = umieszcza legendę w dolnym-lewym rogu obszaru wyznaczonego przez osie. pos = 4 umieszcza legendę w dolnym-prawym rogu obszaru wyznaczonego przez osie. pos = [XlowerLeft YlowerLeft] Jawne określenie współrzędnych dla dolnej lewej pozycji legendy w znormalizowanych współrzędnych. Każdy obiekt Axes może posiadać jeden opis (tytuł). Opis jest zlokalizowany pośrodku, powyżej osi. title('string') wyświetla string pośrodku, powyżej bieżącej osi. title(fname) wywołuje funkcję zwracającą łańcuch tekstowy który jest wyświetlany pośrodku powyżej bieżącej osi. x = -pi:pi/:pi; plot(x,cos(x),'-r',x,sin(x),'-.b') h=legend('cos','sin',); f = 7; c = (f--3)/.8; title(['temperature is ',numstr(c),'c']) n = 3; title(['case number #',intstr(n)],... 'Color','y') xlabel, ylabel, zlabel Opis osi x, y,z xlabel('string') xlabel(fname) xlabel(...,'propertyname',propertyv alue,...) ylabel(...) zlabel(...) Każdy obiekt Axes może posiadać jeden opis dla osi x, y, z. Opis pojawia się poniżej odpowiedniej osi w przypadku wykresu -D i obok lub poniżej w przypadku wykresu 3-D. xlabel('string') opisuje oś x dla bieżących osi. xlabel(fname) wywołuje funkcję zwracającą łańcuch tekstowy który jest wyświetlany pośrodku powyżej osi x dla bieżącego układu osi. xlabel(...,'propertname',propertyvalue,...) określa wartości (PropertyValue) dla danej własności xlabel( X [mm]) 4
xlim, ylim, zlim Ustawia limit wartości dla osi x, y, z xlim xlim([xmin xmax]) xlim('mode') xlim('auto') xlim('manual') xlim(axes_handle,...) same for ylim, and zlim (PropertName) dla obiektu graficznego Text utworzonego przez xlabel. ylabel(...) and zlabel(...) opisuje osie x i y w bieżącym układzie osi xlim bez argumentów zwraca indywidualne zakresy dla bieżących osi. xlim([xmin xmax]) ustawia zakres wartości od xmin do xmax dla bieżącej osi xlim('mode') zwraca bieżący tryb: automatyczny lub ręczny [x,y] = meshgrid([-.75:.:3.5]); z = x.*exp(-x.^-y.^); surf(x,y,z); xlim([-.75 3.5]); ylim([-.75 3.5]); xlim('auto') ustawia tryb ograniczania wartości na automatyczny xlim('manual') ustawia tryb ograniczania wartości na ręczny 5
colormap Ustawia bierzącą mapę kolorów Colormap(map) Colormap('default') cmap = colormap Mapa kolorów jest m-na-3 macierzą liczb rzeczywistych w zakresie pomiędzy. a.. Każdy rząd odpowiada wektorowi RGB definiującym jeden kolor. k-ty rząd definiuje k-ty kolor mapy kolorów, gdzie map(k,:) = [r(k) g(k) b(k)]) określa intensywność kolorów: czerwonego, zielonego i niebieskiego. load spine image (X) colormap bone colormap(map) ustawia macierz map jako mapę kolorów. Jeśli jakaś wartość macierzy map jest poza zakresem [ ], MATLAB zwraca błąd: Colormap must have values in [,]. colormap('default') ustawia domyślna mapę kolorów cmap = colormap; zwraca bieżącą mapę kolorów. Wartości sa w zakresie [ ]. Dostępne mapy kolorów: autumn -Odcienie od czerwonego do żółtego bone -Skala szarości z odcieniem niebieskiego contrast -Skala szarości z polepszeniem kontrastu obrazu cool -Odcienie od cyan do magenta copper -Odcienie miedziane flag -Naprzemiennie czerwony, biały, niebieski i czarny gray -Liniowa skala szarości hot -Czarno czerwono żółto biała mapa kolorów hsv -Hue-saturation-value (HSV) jet -Odmiana HSV lines -Line color colormap prism -Kolory pryzmatowe (rozszczepienie światła) spring -Odcienie od magenta do żółtego summer -Odcienie od zielonego do żółtego winter -Odcienie niebieskiego i zielonego 6
rotate3d Obracanie osi przy użyciu myszy rotate3d rotate3d on rotate3d off rotate3d on umożliwia interaktywne obracanie osi w bieżącym okienku przy użyciu myszy. rotate3d off uniemożliwia interaktywne obracanie osi w bieżącym okienku przy użyciu myszy. [x,y] = meshgrid([-.75:.:3.5]); z = x.*exp(-x.^-y.^); surf(x,y,z); rotate3d on rotate3d przełącza interaktywne obracanie osi w bieżącym okienku przy użyciu myszy. view Specyfikacja położenia obserwatora view(az,el) view([az,el]) view([x,y,z]) view() view(3) Pozycja obserwatora (viewpoint) określa orientację osi. Użytkownik może zdefiniować pozycję obserwatora przez podanie współrzędnych w przestrzeni -D lub poprzez podanie azymutu i wysokości patrzenia. view(az,el) i view([az,el]) ustawiają kąt patrzenia dla wykresu 3-D. Azymut az, jest poziomą rotacją wokół osi z mierzoną w stopniach od ujemnej osi y. Wartości dodatnie liczone są zgodnie z obrotem wskazówek zegara. el jest pionową wysokością liczoną w stopniach. Wartości dodatnie odpowiadają poruszaniu się powyżej obiektu, ujemne poniżej obiektu. view([x,y,z]) ustawia pozycję obserwatora o współrzędnych x, y, i z. view() ustawia domyślne współrzędne obserwatora dla wykresu -D, az =, el = 9. [x,y] = meshgrid([-.75:.:3.5]); z = x.*exp(-x.^-y.^); surf(x,y,z); az = ; el = 9; view(az, el); view(3) ustawia domyślne współrzędne obserwatora dla wykresu 3-D, az = --37.5, el = 3 7
clf Czyści bierzące okienko wykresu clf clf reset clf usuwa wszystkie nieukryte obiekty graficzne z bieżącego okienka clc figure Czyści okienko komend Tworzy podstawowy obiekt graficzny Figure (okienko umożliwiające wyświetlanie innych obiektów graficznych) clc figurefigure('propertyname',propert yvalue,...)figure(h)h = figure(...) clc czyści okienko komend figure tworzy obiekt graficzny Figure. Obiekt ten stanowi odrębne okienko na ekranie umożliwiające wyświetlanie grafiki figure Tworzy okienko o domyślnych parametrach. figure('propertyname',propertyvalue,...) tworzy nowy obiekt Figure przy użyciu określonych przez użytkownika własnościach. MATLAB używa wartości domyślnej dla każdej własności nie zmodyfikowanej przez użytkownika. scrsz = get(,'screensize'); figure('position',[ scrsz(4)/ scrsz(3)/ scrsz(4)/]) figure(h) robi dwie rzeczy w zależności czy okienko o uchwycie h istnieje czy nie. Jeżeli h jest uchwytem do istniejącego okienka, figure(h) ustawia okienko h na okienko aktywne, przesuwa je na wierzch. Aktywne okienko jest używane jako aktualne wyjście graficzne. Jeżeli h nie jest uchwytem istniejącego okienka, ale jest liczbą całkowitą, figure(h) tworzy okienko i przyporządkowuje mu uchwyt h. figure(h) gdzie h nie jest uchwytem okienka lub nie jest liczbą całkowitą jest błędne. h = figure(...) zwraca uchwyt do obiektu Figure. 8
zoom Powiększanie i pomniejszanie wykresu -D zoom on zoom off zoom out zoom reset zoom zoom xon zoom yon zoom(factor) zoom on włącza interaktywne zoomowanie. Umożliwia to zbliżanie i oddalanie obrazu poprzez naciśnięcie przycisku myszki w obszarze wykresu. Złomowanie zmienia wartości graniczne osi. Dla myszki jednoprzyciskowej zbliżanie uzyskuje się poprzez naciśnięcie przycisku, oddalanie poprzez naciśnięcie Shift i przycisku myszki. Dla myszki dwu i trójprzyciskowej zbliżanie poprzez naciśnięcie lewego przycisku, oddalanie poprzez naciśnięcie prawego przycisku. Wciśnięcie przycisku i przesuwanie myszy powoduje rysowanie prostokąta, którego zawartość jest powiększana w momencie zwolnienia przycisku myszy. Podwójne kliknięcie ponad osiami powoduje powrót do powiększenia początkowego. zoom off wyłącza interaktywny zooming. zoom out ustawia powiększenie wykresu do wartości początkowej zoom reset ustawia aktualne powiększenie jako domyślne. zoom przełącza stan powiększania interaktywnego. zoom xon i zoom yon ustawia odpowiednio zoom on dla osi x i y. zoom(factor) zbliża lub oddala z określonym współczynnikiem bez wpływu na aktualny tryb zoomowania. Wartości większe od zbliżają obraz o określoną wartość, wartości mniejsze od i większe od oddalają ze współczynnikiem /factor. 9
close drawnow Usuwa określone okienko wykresu Wykonuje wszystkie polecenia rysowania oczekujące w kolejce close close(h) close all drawnow close Kasuje bieżące okienko lub określone okienka. Opcjonalnie zwraca status wykonanej operacji kasowania. close kasuje bieżące okienko (równoważne do close(gcf)). close(h) Kasuje okienko o uchwycie h. Jeżeli h jest wektorem lub macierzą, kasuje wszystkie obiekty określone przez h. close all kasuje wszystkie obiekty graficzne, których uchwyty nie są ukryte. drawnow czyści kolejkę oczekujących poleceń rysowania i odświeża okienko x = -pi:pi/:pi; plot(x,cos(x)); drawnow title('a Short Title');grid on hidden shading Usuwa ukryte linie z obiektów siatkowych Ustawia metodę cieniowania hidden on hidden off hidden shading flat shading faceted shading interp Hidden rysuje jedynie linie które są widoczne dla obserwatora (niezasłonięte przez inne obiekty, płaszczyzny lub linie) hidden on włącza usuwanie niewidocznych linii dla bieżącego wykresu. Linie znajdujące się z tyłu obiektu nie są rysowane. Jest to ustawienie domyślne. hidden off wyłącza usuwanie niewidocznych linii dla bieżącego wykresu. hidden przełącza opcję usuwania linii Funkcja shading kontroluje sposób cieniowania dla obiektów Surface i Patch (powierzchnie i łaty). shading flat każda linia siatki obiektu i jego ścianki posiadają stały jednorodny kolor określony przez kolor ostatniego pojedynczego punktu ścianki posiadającej najmniejszy indeks. shading faceted cieniowanie jednorodne z nałożonymi czarnymi liniami siatki. Jest to ustawienie domyślne. shading interp określa kolor każdej linii I ścianki poprzez interpolację kolorów z bieżącej mapy kolorów wzdłuż linii lub ścianki [x,y] = meshgrid([-.75:.:3.5]); z = x.*exp(-x.^-y.^); surf(x,y,z); shading interp
colorbar Wyświetla barwną skalę wartości. Colorbar colorbar('vert') colorbar('horiz') colorbar(h) h = colorbar(...) Funkcja colorbar wyświetla bieżącą mapę kolorów w bieżącym okienku przyporządkowując każdemu kolorowi wartość liczbową z zakresu wartości występujących na osiach. colorbar odświeża pasek kolorów lub dodaje nowy pionowy w przypadku gdy aktywne okienko nie posiadało paska kolorów colorbar('vert') Dodaje pionową skalę kolorów do obiektu Axes colorbar('horiz') Dodaje poziomą skalę kolorów do obiektu Axes colorbar(h) umieszcza skalę kolorów przu obiekcie zdefiniowanym uchwytem h. Pasek kolorów jest poziomy jeśli szerokość osi jest większa niż ich wysokość. h = colorbar(...) zwraca uchwyt do paska kolorów. surf(peaks(3)) colormap cool colorbar
axis Wygląd i skala osi axis([xmin xmax ymin ymax]) axis([xmin xmax ymin ymax zmin zmax]) v = axis axis auto axis manual axis tight axis fill axis ij axis xy axis equal axis image axis square axis vis3d axis normal axis off axis on Osiami można manipulować zwykle poprzez użycie opcji Axes properties. (zobacz Algorithm section.) axis([xmin xmax ymin ymax]) ustawia limity dla osi x, y dla bieżącego obiektu Axes. axis([xmin xmax ymin ymax zmin zmax]) ustawia limity dla osi x, y, z dla bieżącego obiektu Axes. v = axis zwraca wektor zawierający współczynniki skalowania dla osi x, y, z. axis auto ustawia automatycznie limity wartości na osiach. axis manual and axis(axis) zatrzymuje skalowanie na bierzących limitach wartości. Jeśli zostanie użyta funkcja hold on, kolejne wykresy będą używały tych samych zakresów wartości na osiach. axis tight ustawia proporcje rozmiaru osi tak, że jednostka danych na osiach jest taka sama we wszystkich kierunkach. axis fill ustawia limity osi w odniesieniu do zakresu danych axis ij umieszcza początek układu współrzędnych w lewym górnym rogu. axis xy rysuje wykres w domyślnym układzie kartezjańskim z początkiem układu w dolnym lewym rogu axis equal ustawia proporcje rozmiaru osi tak że jednostki danych są takie same we wszystkich kierunkach. Proporcje rozmiaru osi są ustawiane automatycznie w odniesieniu do zakresu danych w kierunkach x, y, z axis image tak samo jak axis equal za wyjątkiem tego ze obszar rysowania ściśle przylega do rysowanych danych. axis square tworzy bieżący obiekt Axes kwadratowym (lub sześciennym w przypadku wykresów 3-D). MATLAB reguluje osie x, y, z tak że mają one jednakową długość axis vis3d blokuje współczynnik proporcji osi w celu umożliwienia obracania 3-D axis normal automatycznie reguluje współczynnik proporcji osi tak aby wykres wypełnił okienko rysowania. axis off wyłącza wszystkie osie, znaczniki, etykiety axis on włącza wszystkie osie, znaczniki, etykiety.
griddata Generowanie siatki ZI = griddata(x,y,z,xi,yi) [XI,YI,ZI] = griddata(x,y,z,xi,yi) [...] = griddata(...,method) ZI = griddata(x,y,z,xi,yi) tworzy powierzchnię X,Y na podstawie najczęściej niejednorodnie rozłożonych danych (X,Y,Z), gdzie Z = F(X,Y). griddata interpoluje tę powierzchnię w punktach określonych przez (XI,YI) w celu obliczenia ZI. Powierzchnia zawsze przechodzi przez punkty danych. XI i YI są przeważnie jednorodna siatką (stworzoną przez meshgrid). [XI,YI,ZI] = griddata(x,y,z,xi,yi) zwraca XI i YI stworzone tą drogą (wynik [XI,YI] = meshgrid(xi,yi)). [...] = griddata(...,'method') gdzie 'method' może być: 'linear' liniowa interpolacja (domyslna). 'cubic' - cubic interpolation. 'nearest' - interpolacja najbliższych sąsiadów. 'v4' - MATLAB 4 griddata method. rand('seed',) x = rand(,)*4-; y = rand(,)*4-; z = x.*exp(-x.^-y.^); % x, y, and z are now vectors containing % nonuniformly sampled data. Define a % regular grid, and grid the data to it: ti = -:.5:; [XI,YI]=meshgrid(ti,ti); ZI=griddata(x,y,z,XI,YI); %Plot the gridded data along with the %nonuniform data points used to generate %it: mesh(xi,yi,zi), hold on plot3(x,y,z,'o'); hold off meshgrid Generuje macierze X i Y do wykresów trójwymiarowych [X,Y] = meshgrid(x,y) [X,Y] = meshgrid(x) [X,Y,Z] = meshgrid(x,y,z) [X,Y] = meshgrid(x,y) transformuje obszar określony przez wektory x i y w tablice X i Y, które mogą być użyte do opisu funkcji dwóch zmiennych w przypadku wykresów siatkowych I powierzchniowych 3-D. Rządy tablicy wyjściowej X są kopiowane z wektora T x; kolumny Y są kopiowane z wektora y. [X,Y] = meshgrid(x) to samo co [X,Y] = meshgrid(x,x). [X,Y,Z] = meshgrid(x,y,z) generuje trójwymiarowe tablice używane do opisania funkcji trzech zmiennych. [X,Y] = meshgrid(:3,:4) 3
MATLAB Graphic - Wykresy 3D % Three-dimensional bar chart % style detached Y = cool(7); bar3(y,'detached') % Three-dimensional bar chart % style grouped Y = cool(7); bar3(y,'grouped') % Three-dimensional bar chart % style grouped Y = cool(7); bar3(y,'stacked').5 -.5 4 3.6.4. -. -.4 - - -.5 - -.5.5.5.5 -.5 - - -.5.5 - -.5 -.5 - %plots velocity vectors as arrows with %components (px,py) [x,y] = meshgrid(-:.:,-:.5:); z = x.* exp(-x.^ - y.^); [px,py] = gradient(z,.,.5); contour(x,y,z), hold on quiver(x,y,px,py); hold off, axis image % Linear 3-D plot t = :pi/5:*pi; plot3(sin(t), cos(t), t) grid on axis square % Three-dimensional velocity plot [X,Y]=meshgrid(-:.5:,... -:.: ); Z = X.* exp(-x.^ - Y.^); [U,V,W] = surfnorm(x,y,z); quiver3(x,y,z,u,v,w,.5);.5.5.5 -.5.5 -.5 - - -.5 -.5 - - - % Volumetric slice plot % Visualize the function % v = x*exp(-x. -y -z ) [x,y,z] = meshgrid(-:.:, - :.5:, -:.6:); v = x.*exp(-x.^-y.^-z.^); xslice = [-..8 ]; yslice = ; zslice = [- ]; slice(x,y,z,v,xslice,yslice,zslice); colormap jet; rotate3d on % Plot three-dimensional discrete % sequence data [X,Y]=meshgrid(-:.5:,... -:.4:); Z = X.* exp(-x.^ - Y.^); stem3(x,y,z+,'fill') % Waterfall plot [X,Y] = meshgrid(-:.:,... -:.:); Z = X.* exp(-x.^ - Y.^); waterfall(x,y,z) 3 5.5.4.5.5 -. -.3 -...3. 5. -.4 -. -.5 - -.5 -. -.3 -. -. - - -.5 - -.5.5.5... 5 4 6 8 4 6 8 -.4 - - - - 4
% Two-dimensional contour plot [X,Y] = meshgrid(-:.:,-:.:3); Z = X.*exp(-X.^-Y.^); [C,h] = contour(x,y,z); clabel(c,h); colormap cool; % Two-dimensional contour plot [X,Y] = meshgrid(-:.:,-:.:3); Z = X.*exp(-X.^-Y.^); [C,h] = contourf(z,); colormap autumn % Three-dimensional contour plot [X,Y] = meshgrid([-:.5:]); Z = X.*exp(-X.^-Y.^); contour3(x,y,z,3); colormap jet grid off % Display a surface and % contour plot [X,Y] = meshgrid([-:.5:]); Z = X.*exp(-X.^-Y.^); surfc(x,y,z); % Three-dimensional shaded surface % from z components in matrix Z [X,Y] = meshgrid([-:.5:]); Z = X.*exp(-X.^-Y.^); surf(x,y,z); % Three-dimensional shaded surface % from z components in matrix Z [X,Y] = meshgrid([-:.5:]); Z = X.*exp(-X.^-Y.^); surfl(x,y,z); shading interp; colormap(gray); % Combination mesh/contourplot [X,Y] = meshgrid([-:.5:]); Z = X.*exp(-X.^-Y.^); meshc(x,y,z); % 3-D mesh with reference plane [X,Y] = meshgrid([-:.5:]); Z = X.*exp(-X.^-Y.^); mesh(x,y,z); % 3-D mesh with reference plane [X,Y] = meshgrid([-:.5:]); Z = X.*exp(-X.^-Y.^); meshz(x,y,z); % Triangular mesh plot [X,Y] = meshgrid([-:.5:]); Z = X.*exp(-X.^-Y.^); tri = delaunay(x,y); trimesh(tri,x,y,z) % Triangular surface plot [X,Y] = meshgrid([-:.5:]); Z = X.*exp(-X.^-Y.^); tri = delaunay(x,y); trisurf(tri,x,y,z) % Ribbon plot [x,y] = meshgrid(-3:.5:3,-3:.:3); z = peaks(x,y); ribbon(y,z); colormap hsv 5
INTERFEJS GRAFICZNY FUNKCJE KOMUNIKACYJNE Menu menu polecenie o składni: choice = menu(header, item, item,... ) generuje menu wyboru o tytule określonym przez argument header i zawierające przyciski z nazwami zawartymi w argumentach: item, item,... itemn. Parametr wyjściowy jest wielkością skalarną odpowiadającą wybranemu przyciskowi. Nie ma ograniczeń na liczbę przycisków. Przykładowo wprowadzając polecenie: k = menu('choose a color','red','blue','green') otrzymujemy następujące okno: i możemy dokonać wyboru opcji poprzez kliknięcie odpowiedniego przycisku. Przykład 4. k=; while (k<3) k = menu('select action', 'Plot Data','Plot Data','END'); switch k case plot(sin(:.:*pi)) case plot(cos(:.:*pi)) end end Input dialog box. INPUTDLG Input dialog box. Answer = inputdlg(prompt) funkcja generuje okno dialogowe umożliwiające wprowadzenie ciągu alfanumerycznego. Parametr wejściowy prompt jest typu cell array i zawiera tekst wypisywany w polu dialogowym. Pole dialogowe może być wykorzystane do wprowadzenia zmiennej tekstowej lub numerycznej 6
Przykład pola dialogowego do definiowania zmiennej tekstowej: prompt={'enter the colormap name:'}; answer=char(inputdlg(prompt)); Przykład pola dialogowego do definiowania zmiennej numerycznej: prompt={'enter the velocity:'}; vel=strnum(char(inputdlg(prompt))); Question dialog box ButtonName=QUESTDLG(Question) polecenie generuje okno dialogowe często stosowane w programach. W oknie tym znajdują się trzy przyciski z napisami Yes, No i Cancel. Funkcja po kliknięciu zwraca string odpowiadający wybranemu przyciskowi. Przykład 5. ButtonName=questdlg('Do you like to change the parameters?'); switch ButtonName, case 'Yes', disp('action for Yes'); case 'No', disp('action for No'); end Po wykonaniu poleceń generowane jest okno: i klikając myszą możemy dokonać wyboru odpowiedniej opcji. INTERPOLACJA I DECYMACJA Interpolacja jeden z rodzajów aproksymacji funkcyjnej, polegający na wyznaczaniu w określonym przedziale funkcji y = f(x), która dla danych liczb x <x < <x n z danego przedziału przyjmuje z góry dane wartości y,y,..,y n. Dla jednoznaczności rozwiązania tego problemu żąda się dodatkowo, by funkcja f(x) była wielomianem możliwie niskiego stopnia. Interpolacja jest często stosowana w naukach doświadczalnych, gdzie dysponuje się zazwyczaj skończoną liczbą danych do określenia zależności między wielkościami. 7
Jeśli mamy ciąg n różnych danych x k i dla każdego x k przyporządkowaną wartość y k, wówczas szukamy funkcji f takiej, aby: Parę x k,y k nazywamy punktem pomiarowym a funkcję f interpolacją punktów pomiarowych. Interpolacja w Matlabie odbywa się za pomocą wielomianów lub za pomocą szybkiej transformaty Fouriera. Możemy wyróżnić interpolacje jednowymiarową dla funkcji postaci y=f(x) i dwuwymiarową dla funkcji postaci z=f(x,y). Interpolacja jednowymiarowa Używana często do analizy danych i do dopasowywania wykresów -D. W Matlabie deklarowana jest za pomocą funkcji. yi = interp(x,y,xi,method) Funkcja ta zwraca wektor yi odpowiadający elementom xi, który powstał w efekcie interpolowania wektora x względem y daną metodą. przy czym: x - wektor wartości x danych pomiarowych y - wektor wartości y=f(x) danych pomiarowych xi - zwiększona ilość wartości x ( wielkość wektora x < wartości wektora xi) yi - wartości interpolowane y dla punktów xi daną metodą method - metoda interpolacji method = 'nearest' metoda przybliżania wartości punktów przy pomocy wartości najbliższego punktu method = 'linear' - metoda przybliżania wartości punktów przy pomocy linii utworzonej pomiędzy dwoma poszczególnymi punktami method = 'spline' - metoda przybliżania wartości punktów przy pomocy wielomianu 3-go stopnia pomiędzy punktami method = 'pchip' or 'cubic' - metoda przybliżania wartości punktów przy pomocy wielomianu 3-go stopnia Hermita Rys.. Funkcja y = f(x) wraz z aproksymowanymi punktami xi i yi 8
Rys.. Porównanie metod interpolacji D % skrypt porównujący poszczególne metody interpolacji funkcji y=sin(x) x = :; y = sin(x); xi = :.5:; % interpolacja dla metody nearest yi = interp(x,y,xi,'nearest'); subplot(,,); plot(x,y,'o',xi,yi); title('nearest point'); % interpolacja dla metody linear yi = interp(x,y,xi,'linear'); subplot(,,); plot(x,y,'o',xi,yi); title('linear'); % interpolacja dla metody spline yi = interp(x,y,xi,'spline'); 9
subplot(,,3); plot(x,y,'o',xi,yi); title('cubic spine'); % interpolacja dla metody cubic yi = interp(x,y,xi,'cubic'); subplot(,,4); plot(x,y,'o',xi,yi); title('cubic'); Interpolacja dwuwymiarowa Używana jest najczęściej do przetwarzania obrazu i wizualizacji danych. ZI = interp(x,y,z,xi,yi,method) Funkcja ta zawraca wartości interpolowane ZI dla zwiększonej ilości punktów XI iyi funkcji dwuwymiarowej Z=F(X,Y). Funkcja ta zwraca macierz ZI odpowiadający elementom XI i YI, który powstał w efekcie interpolowania wektora X i Y względem Z daną metodą. Przy czym: X- tablica wartości x dla wykresów 3D Y- tablica wartości y dla wykresów 3D XI - nowe tablica wartości x przy czym (rozmiar X jest mniejszy od XI) YI - nowe tablica wartości y przy czym (rozmiar Y jest mniejszy od YI) Z tablica wartości Z=F(X,Y) ZI tablica wartości interpolowanych method - metoda interpolacji method = 'nearest' metoda przybliżania wartości punktów przy pomocy wartości najbliższego punktu method = 'linear' - metoda przybliżania wartości punktów przy pomocy linii utworzonej pomiędzy dwoma poszczególnymi punktami method = 'spline' - metoda przybliżania wartości punktów przy pomocy wielomianu 3-go stopnia pomiędzy punktami method = 'pchip' or 'cubic' - metoda przybliżania wartości punktów przy pomocy wielomianu 3-go stopnia Hermita Rys. 3. Funkcja Z = F(X,Y) wraz z aproksymowanymi punktami XI,YI i ZI
Rys. 4. Porównanie metod interpolacji 3D % Porównanie metod interpolacji 3D [X,Y] = meshgrid(-3::3); Z = peaks(x,y); [XI,YI] = meshgrid(-3:.:3); % dla metody nearest ZI = interp(x,y,z,xi,yi,'nearest'); subplot(,,); mesh(x,y,z), hold, mesh(xi,yi,zi+5) hold off axis([-3 3-3 3-5 ]); subplot(,,); contour(xi,yi,zi); colorbar; title('nearest'); pause % dla metody linear ZI = interp(x,y,z,xi,yi,'linear'); subplot(,,); mesh(x,y,z), hold, mesh(xi,yi,zi+5) hold off axis([-3 3-3 3-5 ]); subplot(,,); contour(xi,yi,zi);
colorbar; title('linear'); pause % dla metody spline ZI = interp(x,y,z,xi,yi,'spline'); subplot(,,); mesh(x,y,z), hold, mesh(xi,yi,zi+5) hold off axis([-3 3-3 3-5 ]); subplot(,,); contour(xi,yi,zi); colorbar; title('spline'); pause % dla metody cubic ZI = interp(x,y,z,xi,yi,'cubic'); subplot(,,); mesh(x,y,z), hold, mesh(xi,yi,zi+5) hold off axis([-3 3-3 3-5 ]); subplot(,,); contour(xi,yi,zi); colorbar; title('cubic'); Interpolacja odbywać może się za pomocą szybkiego przekształcenia Fouriera przy pomocy funckci interpft(x,n) Jest to: - interpolacja przy pomocy transformaty Fouriera - y=f(x) musi być funkcją periodyczną - dane przekształcane są przy pomocy transformaty Fouriera - następnie następuje przekształcenie odwrotne z n ( większą ilością punktów) ilością punktów Decymacja w środowisku Matlab polega na zmniejszeniu ilości punktów x i odpowiadającym im wartościom y funkcji y=f(x).operacja decymacji polega na tym, że dane funkcji filtrowane są za pomocą filtru dolnoprzepustowego, i następnie ponownie próbkowany z mniejszą ilością danych. Operacja decymacji odbywa się funkcją y = decimate(x,r) zmniejszenie ilości punktów x o dzielnik r, przy pomocy filtru dolnoprzepustowego stopnia ósmego Chebyshev Type I
y = decimate(x,r,n) zmniejszenie ilości punktów x o dzielnik r, przy pomocy filtru dolnoprzepustowego stopnia n-tego Chebyshev Type I y = decimate(x,r,'fir') - zmniejszenie ilości punktów x o dzielnik r, przy pomocy filtru dolnoprzepustowego 3 punktowego typu FIR y = decimate(x,r,n,'fir') - zmniejszenie ilości punktów x o dzielnik r, przy pomocy filtru dolnoprzepustowego n punktowego typu FIR Rys. 5. Decymacja sygnału dyskretnego D % listing programu pokazujący decymacje sygnału dyskretnego t = :.5:; x = sin(*pi*3*t) + sin(*pi*6*t); y = decimate(x,4); subplot(,,); stem(x(:)), axis([ - ]); title('original Signal'); subplot(,,); stem(y(:3)); title('decimated Signal'); Dopasowanie krzywej - w środowisku Matlab mozliwe jest przeprowadzenie w prosty sposób dopasowania wielomianu dowolnego stopnia do danych podanych w postaci zestawu punktów. wielomian=polyfit(x,y,n) - umożliwia obliczenie współczynników wielomianu o stopniu n, który jest najlepiej "dopasowany" do zadanego zestawu danych (x,y) x i y - współrzędne punktów dyskretnych n - stopień wielomianu wielomian - zawiera współczynniki wielomianu dopasowującego wartości y do x z wykorzystaniem metody najmniejszych kwadratów. Zawiera m=n+ współczynników odpowiadających potęgom zmiennej x wielomianu w porządku malejącym zgodnie z: wielomian(x) = c x n + c x n- +... c m W celu określenia pierwiastków wielomianu można użyć polecenia roots: 3
r = roots(wielomian); gdzie: r - wektor kolumnowy zawierający pierwiastki wielomianu wielomian - zawiera współczynniki wielomianu w porządku malejącym W celu wykonania operacji "odwrotnej", czyli określenia współczynników wielomianu na podstawie pierwiastków można użyć polecenia poly: wielomian = poly(r) Określenia wartości wielomianu o współczynnikach wielomian dla zadanego wektora x można użyć funkcji polyval: y = polyval(wielomian, x); Przykład Dioda Zenera posiada charakterystykę określoną przez punkty: u D = [-4.686-4.694-4.74-4.78-4.7-4.75] i D = [-.87e- -.58e- -.376e- -.773e- -3.7e- -3.568e-] Narysuj charakterystykę prądu i D w funkcji napięcia u D i określ wartość rezystancji dynamicznej r D, jeżeli: r D = Δu D / Δi D i D = m u D + I % Diada ud = [-4.686-4.694-4.74-4.78-4.7-4.75]; id= [-.87e- -.58e- -.376e- -.773e- -3.7e- -3.568e-]; % okreslenie wspolczynnikow; na podstawie wzoru na prad zaleznosc jest % liniowa -> wielomian -ego stopnia % i_wiel = m * ud + io wsp_wiel=polyfit(ud,id,); m = wsp_wiel(); io = wsp_wiel(); % okreslenie wektora ud o zwiekszonej ilosci punktow (pkt) ud_wiel = [ud():(ud(end)-ud())/:ud(end)]; id_wiel = m * ud_wiel + io; % obliczenie rezystancji dynamicznej; rezygnacje można obliczyć jako wartość kąta nachylenia stycznej w danym punkcie charakterystyki do osi OX. Odpowiada to w tym przypadku odwrotności współczynnika kierunkowego. rd = /m; % wykreślenie charakterystyki figure(); plot(ud,id,'bo',ud_wiel,id_wiel,'k-') xlabel('\it U\rm_D'); ylabel('\it I\rm_D'); title('\it I\rm_D vs \it U\rm_D'); 4
Program ćwiczenia. Wykreśl funkcję f(x,y) = sin(x) * cos(y) w przedziale <:> co.5, używając dwóch funkcji graficznych, pcolor i surf. Dodaj opis osi, wprowadź legendę oraz skalę barw. Wykorzystaj mapy kolorów jet, hot, oraz gray.. Opisz osie i tytuł wykresów 3. Wykreśl wykres nie- i interpolowany na jednym wykresie. Przy czym wykres nieinterpolowany wykreślić należy w postaci znaczników gwiazdek ( * ) koloru czarnego a wykres interpolowany w postaci linii ciągłej koloru czerwonego. 4. Wstaw legendę i opis osi. 5. Wykonaj operację decymacji sygnału y=sin(x)*cos(x) do punktów i wykreśl wykres sygnału oryginalnego i decymowanego na jednym wykresie w kolorem czerwonym i linią przerywaną dla sygnału oryginalnego i żółtym linią ciągła dla sygnału decymowanego, wstaw opis osi i legendę. 6. Wykorzystując powyższe funkcje komunikacyjne napisz skrypt do obliczania układu równań postaci: 3x x x 5x 7x 3x x 3 x 3 x 3 5 3 z możliwością wprowadzania wartości macierzy współczynników A oraz macierzy wynikowej B. Wprowadź możliwość wyboru sposobu prezentacji wyników (wykreślanie za pomocą funkcji bar lub wyświetlanie w Workspace). % definicja inputdlg prompt={'a: ', 'a: ', 'a3: ','a:', 'a: ','a3:', 'a3: ',... 'a3:', 'a33: ', 'b: ', 'b: ','b3: '}; lineno=; titlewin='parametry wejsciowe'; def={'3','','-','5','3','-','7','','','','-3','5'}; answer=inputdlg(prompt,titlewin,lineno,def); % odzyskiwanie wartosci [temp]= strnum(char(answer)); %wczytywanie wartosci do macierzy A i B A=[temp(:3)';temp(4:6)';temp(7:9)']; B=temp(:); % rozwiazanie ukladu rownan X=A^-*B; %button = questdlg('pytanie','tytul okna','przycisk ','przycisk ', %'domyslny przycisk') Type = questdlg('co zrobic z wynikami?',... 'Pytanie?',... 'Wykresl','Pokaz wyniki','wykresl'); % okreslenie reakcji na wybrany przycisk switch Type case 'Wykresl', figure; bar(x,'k'); title('wartosci elementow macierzy X'); figure; bar(a); legend('wiersz -szy', 'wiersz -gi', 'wiersz 3-ci','Location',... 'NorthOutside'); title('wartosci elementow macierzy A'); figure; 5
bar(b); title('wartosci elementow macierzy B'); case 'Pokaz wyniki', clc disp('rozwiazanie dla macierzy A postaci :'); A disp('i macierzy B postaci :'); B disp('jest dane :'); X end 6