Katedra Elektrotechniki Teoretycznej i Informatyki

Transkrypt

Katedra Elektrotechniki Teoretycznej i Informatyki
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 2D
1
1
0.1
0.8
0.6
0.6
0.5
0.05
0.4
0.4
0.2
0.2
0
0
0
-0.2
0
-0.2
-0.4
-0.4
-0.5
-0.05
-0.6
-0.6
-0.8
-1
1
0.8
-0.8
0
1
2
3
4
5
6
7
-1
8
x=0:0.05:8;
y1=sin(x.^2);
y2=sin(x);
plot(x,y1, x,y2);
0
1
2
3
4
5
-0.1
7
6
-1
0
1
2
3
4
5
6
7
8
9
10
% Tworzenie wykresu z dwiema % % Wykres schodkowy funkcji sin
osiami y z użyciem funkcji plot
x=0:0.25:10;
t = 0:pi/20:2*pi;
stairs(x,sin(x));
y1 = sin(t);
y2 = 0.5*sin(t-1.5);
plotyy(t,y1,t,y2,'plot')
50
10
1.5
0.35
0.3
1
40
10
0.25
0.2
0.5
30
10
0.15
0
0.1
20
10
0.05
-0.5
0
10
10
-0.05
-1
-0.1
0
10
-1
0
10
1
10
2
10
10
-1.5
-2.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5
% Wykres błędu
x=-2:0.1:2;
y=erf(x);
e = rand(size(x))/10;
errorbar(x,y,e);
% Wykres logarytmiczny
x = logspace(-1,2);
loglog(x,exp(x),'-s');
grid on
90
10
10
-0.15
0
0.5
1
1.5
2
2.5
3
3.5
4
% Stem plot
x = 0:0.1:4;
y = sin(x.^2).*exp(-x);
stem(x,y)
0.5
120
60
11%
0.375
22%
8
10
0.25
150
30
0.125
6
10
180
0
4
33%
10
210
2
10
240
0
10
330
0
1
2
3
4
5
6
7
8
9
10
300
28%
6%
270
1
% Wykres półlogarytmiczny(y-log)
x = 0:.1:10;
semilogy(x,10.^x)
% Wykres biegunowy
t=0:.01:2*pi;
polar(t,abs(sin(2*t).*cos(2*t)));
x = [1 3 0.5 2.5 2];
explode = [0 1 0 0 0];
pie(x,explode)
% Wykres półlogarytmiczny(x-log)
x = 0:.1:10;
semilogx(10.^x,x)
25
1
5
0.9
20
0.8
4
0.7
15
0.6
3
0.5
10
0.4
2
0.3
5
0.2
1
0.1
0
0
-3
-2
-1
0
1
2
% Wykres słupkowy
dzwonowej
x = -2.9:0.2:2.9;
bar(x,exp(-x.*x));
1
3
2
3
4
5
0
funkcji Y = round(rand(5,3)*10);
bar(Y,'stack')
10
10
18
9
9
16
8
8
14
7
7
12
6
6
10
5
5
8
4
4
6
3
3
4
2
2
2
1
0
1
2
3
4
5
6
7
8
9
10
Y = round(rand(19,1)*10);
barh(Y)
10
15
25
1
0
1
2
3
4
0
5
Y = round(rand(5,3)*10);
bar(Y,1.5)
1
2
3
4
5
Y = round(rand(5,3)*10);
bar(Y,'group')
90
12
20
Y = round(rand(5,3)*10);
barh(Y,'stack')
20
0
5
2
6
120
60
1.5
4
10
150
1
30
2
8
0.5
6
0
180
0
-0.5
4
-1
210
330
2
-1.5
0
1
1.5
2
2.5
3
Y = [ 1, 5, 3; 3, 2, 7;
2, 6, 1];
area(Y);
grid on
3.5
4
-2
240
0
2
4
6
8
10
12
14
16
18
1, 5, 3;... theta = (-90:10:90)*pi/180;
r = 2*ones(size(theta));
[u,v] = pol2cart(theta,r);
feather(u,v);
90
1
60
3.1227
0.8
2.0818
150
22%
270
theta=2*pi*rand(1,50;
rose(theta)
4.1635
120
300
20
0.6
30
0.4
11%
1.0409
0.2
28%
180
33%
0
0
-0.2
6%
-0.4
210
330
-0.6
-0.8
240
300
270
x = [1 3 0.5 2.5 2];
explode=[0 1 0 0 0];
pie3(x,explode);
Z = eig(randn(20,20));
compass(Z)
-1
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
% plot a function
fplot('tanh',[-2 2])
2
Funkcja
Zastosowanie
Składnia
Opis
Przykłady
hold
Zatrzymuje
bierzący wykres
w okienku
hold on
hold off
hold
subplot
Tworzy i
kontroluje
wykresy o wielu
osiach
subplot(m,n,p)
plot
Liniowy wykres
2-D
plot(Y)
plot(X1,Y1,...)
plot(X1,Y1,LineSpec,...)
grid
Rysuje linie
siatki dla
wykresów 2-D I
3-D
grid on
grid off
grid
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.
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(X1,Y1,...) 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(X1,Y1,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.
income = [3.2 4.1 5.0 5.6];
outgo = [2.5 4.0 3.35 4.9];
subplot(2,1,1); plot(income)
subplot(2,1,2); plot(outgo)
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
Wyświetla
legendę osi
title
Dodaje opis do
bierzącej osi
xlabel,
ylabel,
zlabel
Opis osi x, y ,z
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 = -1 umieszcza legendę poza obszarem
ograniczonym przez osie, po prawej stronie
pos = 0 umieszcza legendę w obszarze
ograniczonym przez osie zasłaniając
jak
najmniej punktów wykresu
pos = 1 umieszcza legendę w górnym-prawym
rogu obszaru wyznaczonego przez osie (wartość
domyślna).
pos = 2 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.
title('string')
Każdy obiekt Axes może posiadać jeden opis (tytuł).
title(fname)
Opis jest zlokalizowany pośrodku, powyżej osi.
title(...,'PropertyName',PropertyValu title('string') wyświetla string pośrodku, powyżej
e,...)
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.
legend('string1','string2',...)
legend('off')
legend('string1','string2',...,pos)
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 2-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
x = -pi:pi/20:pi;
plot(x,cos(x),'-r',x,sin(x),'-.b')
h=legend('cos','sin',0);
f = 70;
c = (f--32)/1.8;
title(['Temperature is ',num2str(c),'C'])
n = 3;
title(['Case number #',int2str(n)],...
'Color','y')
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
[x,y] = meshgrid([-1.75:.2:3.25]);
z = x.*exp(-x.^2-y.^2);
surf(x,y,z);
xlim([-1.75 3.25]);
ylim([-1.75 3.25]);
xlim('mode') zwraca bieżący tryb: automatyczny lub
ręczny
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
load spine
rzeczywistych w zakresie pomiędzy 0.0 a 1.0. Każdy image (X)
rząd odpowiada wektorowi RGB definiującym jeden colormap bone
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.
colormap(map) ustawia macierz map jako mapę
kolorów. Jeśli jakaś wartość macierzy map jest poza
zakresem [0 1], MATLAB zwraca błąd: Colormap
must have values in [0,1].
colormap('default') ustawia domyślna mapę kolorów
cmap = colormap; zwraca bieżącą mapę kolorów.
Wartości sa w zakresie [0 1].
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([-1.75:.2:3.25]);
z = x.*exp(-x.^2-y.^2);
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(2)
view(3)
Pozycja obserwatora (viewpoint) określa orientację
osi. Użytkownik może zdefiniować pozycję
obserwatora przez podanie współrzędnych w
przestrzeni 2-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(2) ustawia domyślne współrzędne obserwatora
dla wykresu 2-D, az = 0, el = 90.
[x,y] = meshgrid([-1.75:.2:3.25]);
z = x.*exp(-x.^2-y.^2);
surf(x,y,z);
az = 0;
el = 90;
view(az, el);
view(3) ustawia domyślne współrzędne obserwatora
dla wykresu 3-D, az = --37.5, el = 30
7
clf
Czyści bierzące
okienko wykresu
clf
clf reset
clf usuwa wszystkie nieukryte obiekty graficzne z
bieżącego okienka
clc
Czyści okienko
komend
Tworzy
podstawowy
obiekt graficzny
Figure (okienko
umożliwiające
wyświetlanie
innych obiektów
graficznych)
clc
clc czyści okienko komend
figurefigure('PropertyName',Propert
yValue,...)figure(h)h = figure(...)
figure tworzy obiekt graficzny Figure. Obiekt ten
stanowi odrębne okienko na ekranie umożliwiające
wyświetlanie grafiki
figure
scrsz = get(0,'ScreenSize');
figure('Position',[1 scrsz(4)/2 scrsz(3)/2
scrsz(4)/2])
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.
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 2-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 1 zbliżają obraz o
określoną wartość, wartości mniejsze od 1 i większe
od 0 oddalają ze współczynnikiem 1/factor.
9
close
Usuwa określone
okienko wykresu
close
close(h)
close all
drawnow
Wykonuje
wszystkie
polecenia
rysowania
oczekujące w
kolejce
drawnow
hidden
Usuwa ukryte
linie z obiektów
siatkowych
hidden on
hidden off
hidden
shading
Ustawia metodę
cieniowania
shading flat
shading faceted
shading interp
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
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 = -pi:pi/20:pi;
plot(x,cos(x)); drawnow
title('A Short Title');grid on
[x,y] = meshgrid([-1.75:.2:3.25]);
z = x.*exp(-x.^2-y.^2);
surf(x,y,z);
shading interp
10
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 surf(peaks(30))
bieżącym okienku przyporządkowując każdemu
colormap cool
kolorowi wartość liczbową z zakresu wartości
colorbar
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.
11
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.
12
griddata
Generowanie
siatki
ZI = griddata(x,y,z,XI,YI)
[XI,YI,ZI] = griddata(x,y,z,xi,yi)
[...] = griddata(...,method)
meshgrid
Generuje
[X,Y] = meshgrid(x,y)
macierze X i Y
[X,Y] = meshgrid(x)
do wykresów
[X,Y,Z] = meshgrid(x,y,z)
trójwymiarowych
ZI = griddata(X,Y,Z,XI,YI) tworzy powierzchnię
X1,Y1 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',0)
x = rand(100,1)*4-2; y = rand(100,1)*4-2;
z = x.*exp(-x.^2-y.^2);
% x, y, and z are now vectors containing
% nonuniformly sampled data. Define a
% regular grid, and grid the data to it:
ti = -2:.25:2;
[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
[X,Y] = meshgrid(x,y) transformuje obszar
[X,Y] = meshgrid(1:3,10:14)
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.
13
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')
1
40
0.5
30
% Three-dimensional bar chart
% style grouped
Y = cool(7);
bar3(Y,'stacked')
0.6
0.4
0.2
0
20
0
-0.2
10
-0.4
-0.5
0
1
-1
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
0.5
2
-1
0
-1
-0.5
-1
-0.5
0
0
-0.5
%plots velocity vectors as arrows
with
%components (px,py)
[x,y] = meshgrid(-2:.2:2,-1:.15:1);
z = x .* exp(-x.^2 - y.^2);
[px,py] = gradient(z,.2,.15);
contour(x,y,z), hold on
quiver(x,y,px,py);
hold off, axis image
1
1
0.5
0
0.5
-2
-1
% Linear 3-D plot
t = 0:pi/50:10*pi;
plot3(sin(t), cos(t), t)
grid on
axis square
1
% Three-dimensional velocity plot
[X,Y]=meshgrid(-2:0.25:2,...
-1:0.2:1 );
Z = X.* exp(-X.^2 - Y.^2);
[U,V,W] = surfnorm(X,Y,Z);
quiver3(X,Y,Z,U,V,W,0.5);
1.5
0.5
1
0
0.5
0
1
-0.5
1
0.5
2
2
0
-0.5
-1
-1
1
0
0
-0.5
% Volumetric slice plot
% Visualize the function
% v = x*exp(-x.2-y2-z2)
[x,y,z] = meshgrid(-2:.2:2, 2:.25:2, -2:.16:2);
v = x.*exp(-x.^2-y.^2-z.^2);
xslice = [-1.2 .8 2];
yslice = 2;
zslice = [-2 0];
slice(x,y,z,v,xslice,yslice,zslice);
colormap jet; rotate3d on
0.5
1
0
-1
-1
-2
% Plot three-dimensional discrete
% sequence data
[X,Y]=meshgrid(-2:0.5:2,...
-1:0.4:1);
Z = X.* exp(-X.^2 - Y.^2);
stem3(X,Y,Z+1,'fill')
-2
% Waterfall plot
[X,Y] = meshgrid(-2:0.1:2,...
-1:0.1:1);
Z = X.* exp(-X.^2 - Y.^2);
waterfall(X,Y,Z)
3
25
2.5
0.4
2
20
1.5
0.2
0.1
0
-0.1
1
15
0
0.2
0.
3
-0.1
-0.3
-0.2
-0.4
2
0.2
0
-0.1
-1
0
-0.2
10
0.1
-0.5
-0.2
-0.3
-0
.4
0.5
0.1
5
1
-1.5
-2
-2
2
1
0
0
-1
-1.5
-1
-0.5
0
0.5
1
1.5
2
2
4
6
8
10
12
14
16
18
20
-1
-2
-2
14
% Two-dimensional contour plot
[X,Y] = meshgrid(-2:.2:2,-2:.2:3);
Z = X.*exp(-X.^2-Y.^2);
[C,h] = contour(X,Y,Z);
clabel(C,h);
colormap cool;
% Two-dimensional contour plot
[X,Y] = meshgrid(-2:.2:2,-2:.2:3);
Z = X.*exp(-X.^2-Y.^2);
[C,h] = contourf(Z,10);
colormap autumn
% Three-dimensional contour plot
[X,Y] = meshgrid([-2:.25:2]);
Z = X.*exp(-X.^2-Y.^2);
contour3(X,Y,Z,30);
colormap jet
grid off
% Display a surface and
% contour plot
[X,Y] = meshgrid([-2:.15:2]);
Z = X.*exp(-X.^2-Y.^2);
surfc(X,Y,Z);
% Three-dimensional shaded
surface
% from z components in matrix Z
[X,Y] = meshgrid([-2:.15:2]);
Z = X.*exp(-X.^2-Y.^2);
surf(X,Y,Z);
% Three-dimensional shaded
surface
% from z components in matrix Z
[X,Y] = meshgrid([-2:.15:2]);
Z = X.*exp(-X.^2-Y.^2);
surfl(X,Y,Z);
shading interp; colormap(gray);
% Combination mesh/contourplot
[X,Y] = meshgrid([-2:.15:2]);
Z = X.*exp(-X.^2-Y.^2);
meshc(X,Y,Z);
% 3-D mesh with reference plane
[X,Y] = meshgrid([-2:.15:2]);
Z = X.*exp(-X.^2-Y.^2);
mesh(X,Y,Z);
% 3-D mesh with reference plane
[X,Y] = meshgrid([-2:.15:2]);
Z = X.*exp(-X.^2-Y.^2);
meshz(X,Y,Z);
% Triangular mesh plot
[X,Y] = meshgrid([-2:.15:2]);
Z = X.*exp(-X.^2-Y.^2);
tri = delaunay(X,Y);
trimesh(tri,X,Y,Z)
% Triangular surface plot
[X,Y] = meshgrid([-2:.15:2]);
Z = X.*exp(-X.^2-Y.^2);
tri = delaunay(X,Y);
trisurf(tri,X,Y,Z)
% Ribbon plot
[x,y] = meshgrid(-3:.5:3,-3:.1:3);
z = peaks(x,y);
ribbon(y,z);
colormap hsv
15
INTERFEJS GRAFICZNY – FUNKCJE KOMUNIKACYJNE
Menu
menu polecenie o składni:
choice = menu(header, item1, item2, ... )
generuje menu wyboru o tytule określonym przez argument header i zawierające przyciski z
nazwami zawartymi w argumentach: item1, item2,... 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=1;
while (k<3)
k = menu('Select action', 'Plot Data1','Plot Data2','END');
switch k
case 1
plot(sin(0:0.1:2*pi))
case 2
plot(cos(0:0.1:2*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
16
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=str2num(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 x1<x2<…<xn z danego
przedziału przyjmuje z góry dane wartości y1,y2,..,yn . 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.
17
Jeśli mamy ciąg n różnych danych xk i dla każdego xk przyporządkowaną wartość yk,
wówczas szukamy funkcji f takiej, aby:
Parę xk,yk 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 2-D. W Matlabie
deklarowana jest za pomocą funkcji.
yi = interp1(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. 1. Funkcja y = f(x) wraz z aproksymowanymi punktami xi i yi
18
Rys. 2. Porównanie metod interpolacji 2D
% skrypt porównujący poszczególne metody interpolacji funkcji y=sin(x)
x = 0:10;
y = sin(x);
xi = 0:.25:10;
% interpolacja dla metody nearest
yi = interp1(x,y,xi,'nearest');
subplot(2,2,1);
plot(x,y,'o',xi,yi);
title('nearest point');
% interpolacja dla metody linear
yi = interp1(x,y,xi,'linear');
subplot(2,2,2);
plot(x,y,'o',xi,yi);
title('linear');
% interpolacja dla metody spline
yi = interp1(x,y,xi,'spline');
19
subplot(2,2,3);
plot(x,y,'o',xi,yi);
title('cubic spine');
% interpolacja dla metody cubic
yi = interp1(x,y,xi,'cubic');
subplot(2,2,4);
plot(x,y,'o',xi,yi);
title('cubic');
Interpolacja dwuwymiarowa
Używana jest najczęściej do przetwarzania obrazu i wizualizacji danych.
ZI = interp2(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
20
Rys. 4. Porównanie metod interpolacji 3D
% Porównanie metod interpolacji 3D
[X,Y] = meshgrid(-3:1:3);
Z = peaks(X,Y);
[XI,YI] = meshgrid(-3:.1:3);
% dla metody nearest
ZI = interp2(X,Y,Z,XI,YI,'nearest');
subplot(1,2,1);
mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15)
hold off
axis([-3 3 -3 3 -5 20]);
subplot(1,2,2);
contour(XI,YI,ZI);
colorbar;
title('nearest');
pause
% dla metody linear
ZI = interp2(X,Y,Z,XI,YI,'linear');
subplot(1,2,1);
mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15)
hold off
axis([-3 3 -3 3 -5 20]);
subplot(1,2,2);
contour(XI,YI,ZI);
21
colorbar;
title('linear');
pause
% dla metody spline
ZI = interp2(X,Y,Z,XI,YI,'spline');
subplot(1,2,1);
mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15)
hold off
axis([-3 3 -3 3 -5 20]);
subplot(1,2,2);
contour(XI,YI,ZI);
colorbar;
title('spline');
pause
% dla metody cubic
ZI = interp2(X,Y,Z,XI,YI,'cubic');
subplot(1,2,1);
mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15)
hold off
axis([-3 3 -3 3 -5 20]);
subplot(1,2,2);
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
22
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 30 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 2D
% listing programu pokazujący decymacje sygnału dyskretnego
t = 0:.00025:1;
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = decimate(x,4);
subplot(2,1,1);
stem(x(1:120)), axis([0 120 -2 2]);
title('Original Signal');
subplot(2,1,2);
stem(y(1:30));
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+1 współczynników
odpowiadających potęgom zmiennej x wielomianu w porządku malejącym zgodnie z:
wielomian(x) = c1xn + c2xn-1 + ... cm
W celu określenia pierwiastków wielomianu można użyć polecenia roots:
23
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:
uD = [-4.686 -4.694 -4.704 -4.708 -4.712 -4.715]
iD= [-1.187e-2 -1.582e-2 -2.376e-2 -2.773e-2 -3.170e-2 -3.568e-2]
Narysuj charakterystykę prądu iD w funkcji napięcia uD i określ wartość rezystancji
dynamicznej rD, jeżeli:
rD = ΔuD / ΔiD
iD = m ∙ uD + I0
% Diada
ud = [-4.686 -4.694 -4.704 -4.708 -4.712 -4.715];
id= [-1.187e-2 -1.582e-2 -2.376e-2 -2.773e-2 -3.170e-2 -3.568e-2];
% okreslenie wspolczynnikow; na podstawie wzoru na prad zaleznosc jest
% liniowa -> wielomian 1-ego stopnia
% i_wiel = m * ud + io
wsp_wiel=polyfit(ud,id,1);
m = wsp_wiel(1);
io = wsp_wiel(2);
% okreslenie wektora ud o zwiekszonej ilosci punktow (101pkt)
ud_wiel = [ud(1):(ud(end)-ud(1))/100: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 = 1/m;
% wykreślenie charakterystyki
figure(1);
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');
24
Program ćwiczenia
1. Wykreśl funkcję f(x,y) = sin(x) * cos(y) w przedziale <0:10> co 0.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.
2. 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 10 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:
3x1 x 2 x3 0
5 x1
3x2
2 x3
3
7 x1 2 x 2 2 x3 5
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={'a11: ', 'a12: ', 'a13: ','a21:', 'a22: ','a23:', 'a31: ',...
'a32:', 'a33: ', 'b11: ', 'b21: ','b31: '};
lineNo=1;
titleWin='Parametry wejsciowe';
def={'3','1','-1','5','3','-2','7','2','2','0','-3','5'};
answer=inputdlg(prompt,titleWin,lineNo,def);
% odzyskiwanie wartosci
[temp]= str2num(char(answer));
%wczytywanie wartosci do macierzy A i B
A=[temp(1:3)';temp(4:6)';temp(7:9)'];
B=temp(10:12);
% rozwiazanie ukladu rownan
X=A^-1*B;
%button = questdlg('pytanie','tytul okna','przycisk 1','przycisk 2',
%'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 1-szy', 'wiersz 2-gi', 'wiersz 3-ci','Location',
...
'NorthOutside');
title('wartosci elementow macierzy A');
figure;
25
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
26

Podobne dokumenty