Komp przetw danych Wprowadzenie do MATLABa 2


Wprowadzenie do MATLABa 19
Instrukcje sterujÄ…ce
MATLAB jest wyposażony w instrukcje sterujące o składni zapożyczonej z ję-
zyka C.
Lista instrukcji MATLABa jest krótka:
 instrukcja warunkowa if
 instrukcja wyboru switch
 instrukcje iteracyjne: for, while
 instrukcje przerwania: break i return
if wyrażenie1
polecenia
elseif wyrażenie2
polecenia
else
polecenia
end
Wyrażenia logiczne mają najczęściej postać:
wyrażenie operator_logiczny wyrażenie
Jako operatory logiczne stosowane sÄ…: < <= > >= == ~=
Wynik wyrażeń używanych w instrukcji warunkowej, tj. pisanych po if oraz
elseif, musi być liczbą (zero lub `" 0). Wyrażenia te są zazwyczaj relacją lub
wyrażeniem logicznym. W MATLABie wynikiem relacji bądz wyrażenia logicz-
nego może też być wektor lub macierz. W celu zredukowania takiego wyniku do
wartości skalarnej stosuje się funkcje logiczne:
all wszystkie elementy wektora niezerowe
any jakikolwiek element wektora jest niezerowy
isfinite element argumentu jest określony
isinf element argumentu jest równy +Inf lub  Inf
isnan element argumentu jest nieokreślony (NaN)
isempty argument jest macierzÄ… pustÄ…
i inne
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
20 Wprowadzenie do MATLABa
switch wyrażenie
case wartość1
polecenia
case wartość2
polecenia
...
otherwise
polecenia
end
Wynik wyrażenia zapisanego po switch może być wartością skalarną lub łańcu-
chem. Po case umieszcza się wyrażenie, pojedynczą stałą lub listę stałych wybo-
ru.
for zmienna-iterowana = macierz-wartości
polecenia
end
Macierz wartości stosowane w instrukcji for jest najczęściej zapisywana w po-
staci wyrażenia: wartość_początkowa : krok : wartość_końcowa
Pętle for mogą być wzajemnie zagnieżdżane. Opuszczenia pętli for przed za-
kończeniem jej wykonywania można dokonać za pomocą break. W przypadku
pętli zagnieżdżonych break powoduje przejście do pętli nadrzędnej.
while wyrażenie
polecenia
end
Używając operatora równości = = w instrukcjach iteracyjnych i warunkowych na-
leży zachować szczególna ostrożność pamiętając, że nie wszystkie liczby rzeczy-
wiste są w zapisie zmiennoprzecinkowym reprezentowane dokładnie.
przykład: nie kończąca się pętla: s=0;
while s~=100,
s=s+0.01;
end
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 21
Skrypty i funkcje
MATLAB oferuje dwa narzędzia: skrypty i funkcje. Zapewniają one wygodną i
interaktywną współpracę programu z użytkownikiem.
Pliki zawierające polecenia MATLABa nazywa się m-plikami. M-pliki mogą być
skryptami lub funkcjami.
Większe lub częściej wykorzystywane sekwencje poleceń najlepiej jest umieścić
w tzw. pliku skryptowym. Pliki skryptowe zawierają ciągi poleceń MATLABa prze-
znaczonych do wykonania przez interpreter. Operują one na zmiennych dostępnych w
przestrzeni roboczej.
Dla wszystkich skryptów przyjęto standardowe rozszerzenie .m. Skrypt nie musi
spełniać żadnych dodatkowych wymogów poza poprawnością składniową i seman-
tyczną znajdujących się w nim poleceń.
W m-plikach skryptowych używa się poleceń, które umożliwiają interaktywną
współpracę programu z użytkownikiem:
input wczytanie wartości z wyświetleniem tekstu zachęty
keyboard przerywa wykonywanie skryptu i przekazuje kontrolę użytkownikowi
menu generowanie okna menu
pause wstrzymanie wykonywania skryptu i oczekiwanie na dowolny klawisz
Wadą m-pliku skryptowego jest możliwość powstania konfliktów nazw zmien-
nych w przestrzeni roboczej. M-pliki skryptowe należy traktować jako etap wstępny w
przygotowaniu m-pliku funkcyjnego.
przykłady: skryptsinus.m obliczający w 101 punktach wartość funkcji x=sin2t+sint
i rysujÄ…cy jej wykres na przedziale <0,2Ä„>
% skrypt
t=[0:0.01:2*pi];
A=[1 1];
x=A*[sin(2*t); sin(t)];
plot(t,x)
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
22 Wprowadzenie do MATLABa
skrypt cosinus.m  algorytm obliczania wartości funkcji cos(x) z żądaną
dokładnością e jako obciętej sumy szeregu nieskończonego:
x2 x4 x6
cos(x) = 1 - + - +
1i2 1i2i3i4 1i2i3i4i5i6
% obliczanie cosinusa
% w przestrzeni powinny być: x i e
y=1; k=0; s=1; x2=x*x;
while abs(y)>e
k=k+2;
y=-y*x2/(k*(k-1));
s=s+y;
end
wywołanie: >> x=0.5; e=0.001; cosinus; s
plik szereg.m
t=0:0.1:2*pi;
plot(t,cos(t))
title( Funkcja cos jako suma szeregu )
pause
e=0.0001; n=10; % n-max liczba wykonywanych zmian
x=input( Podaj argument funkcji x:  );
cosinus;
x1=num2str(x); m1=int2str(k/2); e1=sprintf( %1.1e ,e);
s1=sprintf( %1.9f ,s); s2=sprintf( %1.9f ,cos(x));
disp([ Wynik funkcji standardowej: cos( ,x1, )=  ,s2])
disp([ Wynik sumowania szeregu: cos( ,x1, )=  ,s1])
wybor=menu( Wybierz piosenke: , ...
 Prawy do lewego , ...
 We will rock U , ...
 Mydelko Fa , ...
 Spadowa z imprezy );
polecenie=[ play (rightleft.mp3) ; ...
 play (rock.mp3)  ; ...
 play (fa.mp3)  ; ...
 return  ];
eval(polecenie(wybor,:));
W języku MATLABa komentarze poprzedza się znakiem %. Powoduje on, że
teksty występujące po nim w wierszu nie są analizowane. Komentarze pełnią istotna
rolę dokumentacyjną w przypadku funkcji i skryptów  pierwszy blok komentarzy jest
wysyłany na ekran jako pomoc związana z danym skryptem.
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 23
przykład: skryptsincos.m
% przykładowy skrypt: sincos
% generuje wektor liczb rzeczywistych t
% i oblicza dla kolejnych wartości z tego wektora
% wartości funkcji x=sin(t)+cos(t)
% tego komentarza nie zobaczysz w helpie
t=[1:0.05;4*pi];
x=sin(t)+cos(t);
%koniec
polecenie: >> help sincos.m
Funkcje są m-plikami, które przyjmują argumenty wejściowe oraz zwracają ar-
gumenty wyjściowe., operują one na zmiennych lokalnych, niedostępnych w prze-
strzeni roboczej MATLABa.
DefinicjÄ™ funkcji umieszcza siÄ™ w skrypcie o nazwie identycznej z nazwÄ… defi-
niowanej funkcji i z rozszerzeniem .m. M-funkcja posiada następującą strukturę:
function wartości-funkcji=nazwa-funkcji(parametry)
linia pomocy H1
tekst pomocy
ciało funkcji
Parametry i ciało funkcji są opcjonalne.
przykład: function [x,y,z]=funkcja(a,b,c,d)
% funkcja coÅ› liczÄ…ca: [x,y,z]=funkcja(a,b,c,d)
% obszerny komentarz
for i=1:5,
...
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
24 Wprowadzenie do MATLABa
Zasady poprawnego programowania w MATLABie
f& MATLAB jest językiem macierzowym, co oznacza że został zoptymalizowany pod
kątem operacji na macierzach. Język MATLABa umożliwia efektywną realizację
operacji macierzowych i tablicowych. Dobry program w języku MATLAB można
poznać po dużej ilości operacji wektorowych oraz prawie zupełnym braku instruk-
cji for.
przykład: for i=1:size(A(:); C(i)=A(i)*B(i); end
znacznie szybciej: C=A.*B
przykład: porównanie efektywności pętli i obliczeń macierzowych
obliczanie wartości funkcji cos w punktach z przedziału <-10,10> co 0.001:
1. w pętli ze zwiększaniem macierzy wyników w każdym przebiegu
2. jw. z wcześniejszą rezerwacją macierzy
3. macierzowo
% test prędkości obliczeń
clear
t=-10:0.001:10;
[n,m]=size(t);
y(1,m)=0;
clear y;
% w pętli z powiększaniem wektora wyników
i=0;
t0=clock;
for x=t,
i=i+1; y(i)=cos(x);
end
t1=etime(clock,t0);
% z utworzonym najsampierw wektorem wyników
i=0;
clear y;
y(1,m)=0;
t0=clock;
for x=t,
i=i+1; y(i)=cos(x);
end
t2=etime(clock,t0);
% macierzowo
clear y;
t0=clock;
y=cos(t);
t3=etime(clock,t0);
[t1 t2 t3]
wyniki: 280 9.72 0.06 <- 486
40.04 0.99 0.05 <- Pentium 266
21.18 0.39 0.016 <- 2x Celeron 400
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 25
f& Jeśli znany jest rozmiar macierzy wygenerowanej jako wynik, zaleca się wcze-
śniejsze zarezerwowanie pamięci dla niej przez utworzenie tej macierzy przed wy-
konaniem operacji np. poleceniem zeros czy ones.
W ten sposób MATLAB nie potrzebuje zwiększać rozmiaru macierzy wynikowej
po obliczeniu wartości kolejnego elementu,
f& MATLAB umożliwia prace w dwóch trybach: interaktywnym (interpreter)
wsadowym
Długie lub często wykonywane sekwencje poleceń można zapisać w tzw. m-
pliku, czyli skrypcie. Jest to niesformatowany plik tekstowy zawierajÄ…cy instrukcje
do wykonania. Jego wywołanie polega na wpisaniu nazwy pliku w linii poleceń.
Wśród m-plików wyróżnia się m-pliki funkcyjne (które zawierają funkcje).
pliki funkcyjne operujÄ… na zmiennych lokalnych, zaÅ› skryptowe  na globalnych.
f& Lepiej jest pisać m-pliki funkcyjne niż skryptowe, gdyż te pierwsze operują na
zmiennych lokalnych (nie przechowywanych w przestrzeni roboczej MATLABa),
co chroni przed błędami spowodowanymi wprowadzaniem tych samych nazw dla
różnych zmiennych.
f& Własne m-pliki należy tak pisać, aby działały zarówno dla wielkości skalarnych,
jak i macierzowych.
f& We własnych m-plikach należy stosować komentarze.
przykład m-pliku:
% przykład m-pliku
% wykreslenie linii prostej i paraboli
echo off % wylaczenie echa
clc % kasowanie ekranu
% dane dla linii prostej
xpr=[-1 1]; ypr=2*xpr;
% dane dla paraboli
xpar=[-1:0.1:1]; ypar=xpar.*xpar-1;
%wykres prostej i paraboli
plot(xpr,ypr,xpar,ypar)
%wlaczenie siatki
grid on
echo on % wlaczenie echa
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
26 Wprowadzenie do MATLABa
Grafika obiektowa
Poznane do tej pory funkcje pozwalają na tworzenie różnego rodzaju wykresów.
Są to tak zwane funkcje wysokiego poziomu. Większość z nich tworzy gotowy rysu-
nek ustalając automatycznie wiele parametrów takich jak kolor, rozmieszczenie ele-
mentów itp. Wszystkie te funkcje składają tworzone przez siebie rysunki z kilku
podstawowych elementów: linii, wielokątów, układów współrzędnych.
Grafika w MATLABie jest obiektowo zorientowana i umożliwia modyfikowanie
elementów już wykonanego rysunku.
Każdy fragment rysunku stanowi pewien obiekt graficzny. Obiekt ma przypisany
swój unikalny identyfikator (handle), który jest po prostu liczbą rzeczywistą.
Każdy obiekt zawiera strukturę danych  rekord, w którym przechowywane są
jego parametry i związane z nim dane. Rekord ten ma pola, w których można umieścić
identyfikatory innych obiektów  przodków i potomków danego obiektu. Obiekt ma
zawsze jednego przodka i może mieć dowolną liczbę potomków.
root
figure figure
Uicontrol Uimenu
axes
image patch surface text line light
Korzeń  root odpowiada całemu ekranowi. Korzeń jest tylko jeden, nie ma
przodka (pole zawierające listę przodków jest zawsze puste), a jego identyfikatorem
jest liczba 0.
Potomkami korzenia sÄ… okna graficzne  rysunki figures. Przodkiem dla
obiektu Figure jest Root.
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 27
Rysunki mają z kolei potomków w postaci układów współrzędnych axes, a tak-
że uicontrol (elementy interfejsu graficznego użytkownika  przyciski, okienka
dialogowe, suwaki& ) oraz uimenu (klasyczne menu, potomkami uimenu mogą być
dalsze obiekty uimenu, których funkcje tworzą menu rozwijalne).
Potomkami układów współrzędnych Axes mogą być: linielines
powierzchniesurfaces
tekstytext
obrazyimages
wycinkipatches
oświetlenie light
" tworzenie obiektów
Poleceniem utworzenia obiektu graficznego może być każde polecenie MA-
TLABa, które otwiera okno graficzne bądz wykonuje dowolny fragment rysunku.
Wymienione nazwy klas obiektów są identyczne z nazwami poleceń utworzenia dane-
go obiektu. Rezultatem takiego polecenia, oprócz utworzenia nowego obiektu graficz-
nego, jest przypisanie mu identyfikatora.
Każdy obiekt jest identyfikowany przez liczbę (handle). Jest ona przypisywana
do obiektu w momencie jego utworzenia. Wtedy też identyfikator tego obiektu można
przypisać dowolnej zmiennej.
zmienna = polecenie-utworzenia-obiektu-graficznego
funkcje:
id=figure  tworzy nowy rysunek  okno graficzne i zwraca jego
identyfikator, okno, którego wnętrze zajmuje nowo
utworzony rysunek staje się oknem aktywnym, na które
będą działały wszystkie następne operacje, jeżeli w ich
argumentach nie zostanie podany identyfikator innego okna
id1=figure(id2)  jeżeli istnieje rysunek o identyfikatorze równym
argumentowi, to stanie siÄ™ on aktywnym rysunkiem,
else zostanie utworzony
id=axes( position ,[lewy,dolny,szerokość,wysokość])
 position określa pozycję w rysunku
axes(id)
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
28 Wprowadzenie do MATLABa
id=line(x,y)
id=line(x,y,z)
id=line(x,y,nazwa-własności1,wartość1,& )
id=line(x,y,z,nazwa-własności1,wartość1,& )
 tworzy obiekt typu line i umieszcza go w aktywnym układzie współrzędnych,
linia składa się z odcinków o końcach w punktach określonych przez elementy
wektorów x, y i z,
jeżeli x, y i z są macierzami o identycznych wymiarach, to każdej kolumnie
będzie odpowiadać jedna łamana,
funkcja zwraca wektor kolumnowy zawierajÄ…cy identyfikatory utworzonych linii,
id=text(x,y,tekst)
id=text(x,y,z,tekst)
id=text(x,y,tekst,nazwa-własności1,wartość1,& )
id=text(x,y,z,tekst,nazwa-własności1,wartość1,& )
id=patch(x,y,c)
id=tekst(x,y,z,c)
id=line(x,y,c,nazwa-własności1,wartość1,& )
id=line(x,y,z,c,nazwa-własności1,wartość1,& )
 tworzy obiekty typu patch  wypełnione wielokąty,
wektory x, y i z określają współrzędne wierzchołków wielokąta,
a c określa jego kolor,
id=surface(x,y,c) id=surface(z,c)
id=surface(x,y,z,c) id=surface(z)
id=surface(x,y,z,c,nazwa-własności1,wartość1,& )
 tworzy obiekty typu surface  powierzchniÄ™,
wektory x, y i z określają położenie wierzchołków czworokątów, z jakich składa
siÄ™ tworzona powierzchnia,
a c określa jego kolory poszczególnych czworokątów,
id=image(c)
id=image(x,y,c)
 tworzy obiekty typu image  obraz opisany macierzÄ… c,
każdemu elementowi macierzy odpowiada jeden punkt rastra
" określanie obiektów
id=gco
id=gco(idf)
 Get Current Object uzyskuje identyfikator aktywnego obiektu
na rysunku o podanym identyfikatorze,
obiekt aktywny to obiekt, w obrębie którego ostatnio kliknięto,
jeśli od czasu utworzenia nie klikano w obrębie rysunku,
to wartością funkcji jest wektor pusty,
id=gcf  podaje identyfikator aktywnego rysunku,
id=gca  podaje identyfikator aktywnego układu współrzędnych,
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 29
id=findobj(nazwa-własności1,wartość1,& )
 znajduje obiekty o podanych własnościach,
id=findobj(lista-id,nazwa-własności1,wartość1,& )
 szuka tylko w obrębie obiektów z listy identyfikatorów
i ich potomków,
id=findobj(lista-id)
 podaje wektor zawierający identyfikatory obiektu i jego potomków,
id=findobj()
 podaje wektor zawierający identyfikator korzenia i jego potomków,
czyli wszystkich istniejących obiektów.
" usuwanie obiektów
Każdy, oprócz korzenia, obiekt graficzny może zostać usunięty. Do usuwania
obiektów (wraz z ich potomkami) służą funkcje delete oraz close. delete służy
do usuwania obiektów dowolnego typu, close jest przeznaczona przede wszystkim
do usuwania rysunków (zamykania okien), ale pozwala także usuwać obiekty innych
typów.
delete(id)
close
close(id)
Parametry id mogą być wektorami.
clf  czyści aktywny rysunek usuwając wszystkie leżące na nim,
czyli będące jego potomkami, obiekty graficzne,
clf reset  dodatkowo przywraca domyślne wartości wszystkim,
oprócz położenia, własnościom rysunku,
cla  jw. w odniesieniu do układu współrzędnych,
cla reset
" odczytywanie i zmiana własności obiektów
Do odczytywania i zmiany własności obiektów służą funkcje get i set.
get(handle)  odczytanie wszystkich własności
get(handle, nazwa-pola )  jednej
get(0)
get(0, Screansize )
get(0, Units )
get(0, un )
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
30 Wprowadzenie do MATLABa
set(handle, nazwa-pola ,wartość)
set(obiekt1, Color , g )
set(obiekt2, Color , g , LineWidth ,2)
set(obiekt3, LineStyle , - , LineWidth ,2.0)
Jedyna wartość, której nie można zmienić to Parent.
Wszystkim własnościom danego obiektu można przywrócić domyślne wartości
używając funkcji reset. Ma ona tylko jeden argument  identyfikator obiektu.
" własności wspólne dla wszystkich typów obiektów:
Type  zawiera łańcuch będący nazwą typu obiektu,
 wartość ustalana w momencie tworzenia obiektu,
 możliwy tylko odczyt,
 wartości: root, figure, axes, line, patch, surface, text, image,
uicontrol, uimenu
ButtonDownFcn  może zawierać dowolny ciąg znaków stanowiący
sekwencję poleceń systemu MATLAB,
 polecenia zawarte we własności zostaną wykonane,
jeśli użytkownik kliknie w czasie,
gdy kursor jest nad danym obiektem,
 polecenia zostaną wykonane szybciej, jeśli własność
będzie zawierała nazwę pliku (skryptu)
Clipping  decyduje o tym, czy części obiektu znajdujące się poza
obiektem-przodkiem będą wyświetlane, czy nie,
on  wystające części będą obcinane
off  będą wyświetlane
Interruptible  określa, czy wykonanie poleceń zawartych we własności
ButtonDownFcn może zostać przerwane na rzecz
wykonania poleceń innego obiektu,
yes
no  domyślnie
Parent  identyfikator przodka
UserData  dowolna macierz
Visible  określa, czy dany obiekt jest widoczny,
tzn. czy ma być rysowany,
on  domyślnie
off
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 31
" własności różnych obiektów:
Root
CurrentFigure  identyfikator aktywnego rysunku
Diary  czy prowadzić dziennik
(zapisywać wszystkie polecenia do pliku)
on / off
polecenie:diary
DiaryFile  nazwa pliku dziennika
Echo  czy wykonywane polecenia zawarte w plikach
mają być wyświetlane na ekranie
on / off
polecenie:echo
Format  sposób wyświetlania liczb
short, long, shortE, longE, hex, bank, +, rat
polecenie:format
FormatSpacing  format wyświetlania macierzy:
compact  wiersze jeden po drugim
loose  puste wiersze między wierszami
polecenie:format
PointerWindow  identyfikator okna, w obrębie którego znajduje się kursor,
możliwy tylko odczyt
PointerLocation  dwuelementowy wektor, którego elementami są
aktualne współrzędne ekranowe kursora myszki
(w jednostkach określonych przez własność Units)
ScreenDepth  na ilu bitach kolor punktu
ScreenSize  wektor czteroelementowy  wymiary ekranu w
jednostkach określonych przez Units:
wsp. x lewej krawędzi ekranu,
wsp. y dolnej krawędzi,
szerokość, wysokość
Units  jednostki: inches, centimeters
normalized (ułamki wymiarów ekranu)
points (1/72 cala),
pixels (domyślnie)
Figure
Color  kolor tła
wektor RGB, można podać nazwę koloru
ColorMap  macierz mapy kolorów
(surface, image, patch)
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
32 Wprowadzenie do MATLABa
CurrentAxes  identyfikator aktywnego układu współrzędnych
CurrentCharacter  symbol ostatnio naciśniętego klawisza
za panowania danego okna
CurrentMenu  identyfikator elementu menu należącego do tego
rysunku, który został uaktywniony jako ostatni
CurrentObject  identyfikator obiektu w obrębie którego znajduje
siÄ™ CurrentPoint
CurrentPoint  współrzędne aktualnego punktu rysunku
(aktywny = z ostatniego kliknięcia)
własność można wykorzystać do znalezienia punktu,
w którym ostatnio kliknięto myszką
InvertHardCopy  on  wydruk na białym tle, lub off
KeyPressFcn  akcja do wykonania, jeśli użytkownik naciśnie
klawisz w momencie, gdy aktywnym oknem
będzie okno danego rysunku
MenuBar  sposób wyświetlania menu
MinColorMap  liczba kolorów palety (domyślnie 64)
Name  nazwa rysunku w pasku tytułowym
NumberTitle  czy w nazwie ma się pojawić nr rysunku (on/off)
PaperUnits  jednostki papieru: normalized, points
inches, centimeters,
PaperOrientation  ułożenie wydruku rysunku na kartce: portait,
landscape
PaperSize  szerokość i wysokość papieru
PaperType  format papieru
Pointer  kształt kursora myszki po wjechaniu na teren okna:
crosshair, arrow (domyślnie), topl, topr, botl, botr,
circle, cross, fleur
Position  pozycja i wymiary danego okna
Resize  czy można zmieniać wymiary okna myszką
(on/off)
Units  jednostki
WindowButtonDownFcn  akcje do wykonania:
WindowButtonMotionFcn gdy naciśnięto / zwolniono przycisk myszki
WindowButtonUpFcn nad rysunkiem
lub co jakiÅ› czas w trakcie ruchu myszki
nad rysunkiem
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 33
Axes
AxesRatio  proporcje osi układu współrzędnych
Box  czy osie na czterech (on), czy dwóch krawędziach (off)
FontName  czcionki tytułów, opisów osi, itp.
FontSize
FontAngle  normal, oblique, italic
FontStrikeThrough  on/off
FontUnderline  on/off
FontWeight  light, nomral, demi, bold
GridLineStyle  - -- : -.
LineWidth  grubość osi
Nextplot  gdzie umieścić następny wykres utworzony przy
użyciu funkcji graficznych wysokiego poziomu:
new  w nowym układzie
add  na tle obecnego wykresu
replace  w miejsce tegoż
Position  położenie i wymiary układu współrzędnych
wewnÄ…trz rysunku
Units  jednostki
TickLength  długość kresek na osiach
TickDir  in  wenÄ…trz, out  na zewnÄ…trz
Title
View  dwuelementowy wektor,
kąt pod jakim obserwator widzi układ współrzędnych
funkcja:view
Xcolor,Ycolor,ZColor  kolory osi
XDir,YDir,ZDir  zwroty osi: normal/reverse
XGrid,YGrid,ZGrid  linie siatki: on/off
XLim,YLim,ZLim  granice przedziałów przedstawianych na osiach
XScale,YScale,ZScale  skale osi: linear/log
Line
Color
LineStyle  - -- : -.
+ o * x
LineWidth
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
34 Wprowadzenie do MATLABa
przykład:
t=2/3:1/6:.7*pi;
y=sin(t);
[a,b,c]=cylinder(y) % dane do narysowania bryły
subplot(1,2,1)
h1=surf(a,b,c)
title( zwykly flakon )
set(h1, facecolor , y ) % żółty
subplot(1,2,2)
h2=surf(a,b,c)
set(h2, facelighting , phong , backfacelight , lit ) % odblaski
set(h2, facecolor , y )
light( position ,[-2,-3,.6]) % obiekt: zródło światła
title( flakon odbijajacy swiatlo )
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 35
Graficzny system komunikacji z użytkownikiem
Zaprojektowanie graficznego systemu komunikacji z użytkownikiem GUI nie
jest trudne. Wymaga poznania kilku obiektów GUI oraz najważniejszych reguł pro-
gramowania obiektowego.
Elementy komunikacyjne dostępne w MATLABie:
f& przycisk button
f& wyłącznik check box
f& przełącznik radio button
f& lista rozwijalna pop-up menu
f& pole edycyjne editable text
f& suwak scroll bar
f& ramka frame
f& pole tekstowe static text
Odrębnymi prawami rządzą się elementy systemu zwane menu.
" tworzenie obiektów
Lista funkcji służących do posługiwania się graficznym systemem komunikacji z
użytkownikiem jest bardzo skromna  ogranicza się do dwóch funkcji, ale wystarcza
całkowicie do tworzenia elementów i łączenia ich z odpowiednimi procedurami.
Do modyfikacji parametrów utworzonych już elementów służą funkcje set i get.
id=uicontrol(nazwa-własnośći1,wartość1,& )
id=uicontrol(idf,nazwa-własnośći1,wartość1,& )
 służy do tworzenia przycisków, przełączników, wyłączników, suwaków,
pól edycyjnych, ramek i pól tekstowych,
 pierwszym elementem może być identyfikator rysunku (okna), wewnątrz
którego ma się pojawić obiekt, jeżeli nie jest podany, obiekt zostanie
utworzony w aktywnym rysunku,
 wszystkie elementy, które można utworzyć, mają taką samą listę
własności, jednak ich znaczenie może być różne.
 przykład: uicontrol( style , pushbutton ,...
 position ,[10 10 100 20],...
 string , Czyść ,...
 callback , cla )
tworzy w lewym dolnym rogu aktywnego okna przycisk
z napisem Czyść, którego naciśnięcie powoduje
wyczyszczenie aktywnego wykresu
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
36 Wprowadzenie do MATLABa
id=uimenu(nazwa-własnośći1,wartość1,& )
id=uimenu(idf,nazwa-własnośći1,wartość1,& )
 służy do tworzenia elementów menu głównego oraz elementów
podmenu, każde wywołanie funkcji powoduje utworzenie pojedynczego
wiersza podmenu lub jednej opcji menu
 pierwszym elementem może być identyfikator rysunku (okna)
lub innego elementu menu bÄ…dz podmenu,
jeżeli parametrem tym będzie identyfikator rysunku,
to tworzony element zostanie włączony do menu głównego tego rysunku,
jeżeli pierwszym parametrem będzie identyfikator istniejącego elementu
menu to element tworzony zostanie umieszczony w podmenu zwiÄ…zanym
z elementem, którego identyfikator został podany jako pierwszy parametr,
pominięcie pierwszego elementu (identyfikatora idf) spowoduje
umieszczenie tworzonego elementu w głównym menu aktywnego rysunku,
 przykład:
idm1=uimenu( Label , E&xtra ); % opcja w menu głównym
uimenu(idm1, Label , &1 ,... % pierwsza opcja menu rozwijanego
 Callback , subplot(1,1,1) )
idm2=uimenu(idm1, Label , &2 ); % druga opcja rozwijanego
idm3=uimenu(idm1, Label , &4 ); % trzecia opcja rozwijanego
uimenu(idm2, Label , &1/2 , Callback , subplot(2,1,1) );
uimenu(idm2, Label , &2/2 , Callback , subplot(2,1,2) );
uimenu(idm3, Label , &1/4 , Callback , subplot(2,2,1) );
uimenu(idm3, Label , &2/4 , Callback , subplot(2,2,2) );
uimenu(idm3, Label , &3/4 , Callback , subplot(2,2,3) );
uimenu(idm3, Label , &4/4 , Callback , subplot(2,2,4) );
uimenu(idm1, Label , &Czyść , Callback , cla , separator , on );
tworzy w aktywnym oknie dodatkową opcję menu pozwalającą podzielić
okno na 2 lub 4 układy współrzędnych oraz czyścić aktywny układ
menu(tytuł,opcja1,opcja2,opcja3,& )
 pozwala na błyskawiczne tworzenie samodzielnych menu,
 wywołanie funkcji powoduje utworzenie nowego rysunku, na którym
jeden pod drugim umieszczone sÄ… przyciski z nazwami kolejnych opcji,
naciśnięcie dowolnego przycisku powoduje zamkniecie okna
i zakończenie działania funkcji,
 funkcja zwraca numer wybranej funkcji,
 argumentami funkcji są łańcuchy znaków zawierające tytuł menu
oraz nazwy kolejnych opcji.
" własności elementów niezależnych:
Style  określa typ elementu,
 wartości: pushbutton  przycisk
radiobutton  przełącznik
checkbox  wyłącznik
edit  pole edycyjne
text  pole tekstowe
slider  suwak
frame  ramka
popupmenu  lista rozwijana
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 37
Callback  określa akcję podejmowaną po uaktywnieniu elementu,
 wartością własności może być ciąg znaków zawierający
dowolne polecenie systemu MATLAB; ciąg poleceń,
nazwÄ™ funkcji, zmiennej lub skryptu,
 kiedy element jest uaktywniany, MATLAB traktuje ten
ciÄ…g tekstowy jako argument funkcji eval,
 ponieważ wykonanie tych poleceń odbywa się w przestrzeni
roboczej, więc mnogą się one odnosić do zmiennych
zdefiniowanych w tej przestrzeni,
 akcja jest wykonywana najszybciej, jeśli łańcuch zawiera
tylko nazwę skryptu zamiast sekwencji poleceń,
 akcja jest wykonywana w przypadku:
- naciśnięcia przycisku
- zmiany stanu przełącznika lub wyłącznika
- wybraniu pozycji z rozwijalnej listy
- zakończenia edycji tekstu
Position
Units
String  zawiera łańcuch będący etykietą elementu,
 dla pól edycyjnych zawiera edytowany tekst
 w liście rozwijalnej zawiera elementy listy
(jeden ciąg znaków, przedzielone | ),
Value  zawiera liczbę określającą aktualny stan elementu,
 modyfikowana automatycznie,
ale można tez zmienić przez set,
 przyciski mają wartość Value równą własności Min,
w chwili naciśnięcia Max,
po zakończeniu wykonywania poleceń w Callback  Min,
 przełączniki i wyłączniki mają wartość równą własności Min
w stanie wyłączonym i Max w stanie włączonym,
 własność Value suwaków przyjmuje wartość z przedziału
określonego przez Min i Max
 własność Value listy rozwijanej zawiera nr wybranej pozycji
Min,Max  domyślnie: 0 i 1
BackgroundColor,ForegroundColor
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
38 Wprowadzenie do MATLABa
" własności elementów menu:
Label  etykieta
Callback
Checked  decyduje o pojawieniu siÄ™ ptaszka na lewo od nazwy: on/off
Enable  decyduje o dostępności danego elementu w menu
Separator  on/off
BackgroundColor,ForegroundColor
Position  pozycja elementu wewnÄ…trz menu
przykłady:
%Usuń wszystkie rysunki
close all;
%Narysuj jakiÅ› wykres 3D
[x,y]=meshgrid(-2:0.2:2);
z=exp(-x.^2-y.^2);
id=surf(x,y,z);
%Opisz osie
xlabel('x');
ylabel('y');
zlabel( z );
%Na wszelki wypadek - widoczek trójwymiarowy
view(3);
%Suwak poziomy
uicontrol(gcf,...
'style','slider',...
'units','normalized',...
'position',[0.09 0.97 0.90 0.03],...
'max',180,'min',-180,...
'value',-get(gca,'view')*[1 0]',...
'callback',...
'set(gca,''view'',get(gca,''view'').*[0 1]-[get(gco,''value'') 0])');
%% funkcja callback powoduje zmianÄ™ azymutu punktu obserwacji
%% na wartość wybraną suwakiem
%Suwak pionowy
uicontrol('style','slider',...
'units','normalized',...
'position',[0 0.02 0.02 0.9],...
'max',90,'min',-90,...
'value',-get(gca,'view')*[1 0]',...
'callback',...
'set(gca,''view'',get(gca,''view'').*[1 0]-[0 get(gco,''value'')])');
%% funkcja callback powoduje zmianÄ™ elewacji punktu obserwacji
%% na wartość wybraną suwakiem
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska
Wprowadzenie do MATLABa 39
%Przycisk zmniejszania
uicontrol(gcf,...
'style','push',...
'units','normalized',...
'string','-',...
'position',[0.03 0.97 0.03 0.03],...
'callback',...
['set(gca,''xlim'',get(gca,''xlim'')*2,',...
'''ylim'',get(gca,''ylim'')*2,',...
'''zlim'',get(gca,''zlim'')*2)']);
%% funkcja callback powoduje dwukrotne zmniejszenie zakresów
%% na osiach x,y i z
%Przycisk powiększania
uicontrol(gcf,...
'style','push',...
'units','normalized',...
'string','+',...
'position',[0 0.94 0.02 0.03],...
'callback',...
['set(gca,''xlim'',get(gca,''xlim'')/2,',...
'''ylim'',get(gca,''ylim'')/2,',...
'''zlim'',get(gca,''zlim'')/2)']);
%% funkcja callback powoduje dwukrotne zwiększenie zakresów
%% na osiach x,y i z
#
© Opracowanie : Piotr Ciskowski # Politechnika WrocÅ‚awska


Wyszukiwarka

Podobne podstrony:
Komp przetw danych Wprowadzenie do MATLABa 1
Wprowadzenie do Matlaba Mirosław Kwiesielewicz
Wprowadzenie do Matlaba w przykładach
Wprowadzenie do baz danych
wprowadzenie do baz danych
Zarz¦ůdzanie systemami BHP, upowaznienie do przetwarzania danych osobowychdoc
Zestaw 1 Wprowadzenie do relacyjnych baz danych
S Wprowadzenie do środowiska matlab
BD Wykˆad 1 Wprowadzenie do baz danych

więcej podobnych podstron