Funkcje I/O - Praca Interaktywna
• input
- polecenie wypisuje komunikat i czeka na dane z klawiatury
» n=input('Proszę wpisac liczbę naturalną: ')
Proszę wpisac liczbę naturalną: 23
n =
23
» name=input(’Wpisz swoje imię: ', 's')
Wpisz swoje imię : Zyzio
name =
Zyzio
• Matlab dokonuje podstawienia dopiero po naciśnięciu “Enter”
» k=menu('Choose a color','r','b','g')
k = 2
Funkcje I/O - Praca Interaktywna
• Komenda
menu
tworzy menu (graficzne lub tekstowe) czeka na
wybór dokonany przez użytkownika
Naciśnij b
Funkcje I/O - Praca Interaktywna
• k = 2 (niebieski) z poprzedniego
slajdu
• Informacje tą użyto do określenia
koloru linii na wykresie
» color=['r' 'b' 'g'];
» x=[0:10];y=2*x;
» plot(x,y,color(k));
» title('Plot color from Menu');
Funkcje I/O - Obsługa Plików (w.p.)
• Czytanie i zapisywanie plików
• Inne formaty:
– csvread
- ASCII separowane przecinkami
– dlmread
- ASCII (nieformatowany)
– textread
- tekst foramatowany
load fname
load fname x y z
load fname -ascii
load fname -mat
load fname*
save fname
save fname x y z
save fname data*
save fname -ascii
save fname -v4
Można używać (*) do
czytania wielu plików
jednocześnie
»help iofun
Funkcje I/O - Obsługa Plików (n.p.)
This is a magic matrix
17
23
4
10
11
24
5
6
12
18
1
7
13
19
25
8
14
20
21
2
15
16
22
3
9
Plik tekstowy ASCII: magic5.txt
» fid=fopen('magic5.txt', 'rt');
» title = fgetl(fid);
» [data,count]=fscanf(fid, '%i');
» data = reshape(data, 5, 5);
» fclose(fid);
»help fprintf
Odczytywanie danych
z pliku tekstowego:
» fid = fopen('magic5.txt', 'wt');
» fprintf(fid, '%s\n', 'This is a magic matrix');
» fprintf(fid, '%i\t%i\t%i\t%i\t%i\n', magic(5));
» fclose(fid);
Zapis danych do pliku tekstowego:
• Określ dane_y i / lub dane_x (ydata, xdata)
• Określ kolor linii, rodzaj linii i symbol znacznika
(jeśli nie - użyte będą wartości domyślne)
• Składnia:
– Rysowanie pojedyńczej linii:
– Rysowanie wielu linii na jednym wykresie:
Grafika 2D
plot(xdata, ydata, 'color_linestyle_marker')
plot(x1, y1, 'clm1', x2, y2, 'clm2', ...)
Grafika 2D
N.p. rysujemy dane o
kursach akcji IBM
(Uwaga na oś X)
» load ibm.mat
» plot(1:length(ibm), ibm)
Grafika 2D
>> hold on
“zamraża”
bieżący rysunek
>> hold off
“uwalnia”
bieżący rysunek
>> hold
zmienia aktualny
stan
»
new = ibm + rand(length(ibm),1)*10;
» hold on
»
plot(1:length(ibm), new, 'r*:')
Grafika 2D
subplot
pozwala na wykreślenie kilku wykresów w jednym oknie
»subplot(2,2,1);
»
…
»
subplot(2,2,2)
» ...
»subplot(2,2,3)
»
...
»subplot(2,2,4)
» ...
subplot(#rzędów, #kolumn, indeks)
Grafika 2D
SEMILOGY
log Y
lin X
PLOTYY
Dwie liniowe
osie Y
LOGLOG
Obie osie
w skali
logarytmicz
-nej
SEMILOGX
log X
lin Y
Grafika 2D
3 wektory tej
samej
długości
Jak wyróżnić
poszczególne
wykresy ?
Grafika 2D
• Opis wykresu generuje komenda:
» legend('First', 'Second', 'Third' );
• Opis można przesunąć przeciągając w nowe miejsce lewym
przyciskiem myszki
• Opis kasuje komenda:
» legend off
Grafika 2D
Wykres musi
nieść czytelne
informacje
Grafika 2D
• Ustalanie minimów i maksimów
» axis([ xmin xmax ymin ymax]);
• Przywracanie ustawień domyśnych
» axis('auto')
lub
» axis auto
• Ustawianie równej skali na obu osiach
» axis equal
• Zablokowanie zmian proporcji osi podczas zmiany położenia kamery
obserwatora
» axis vis3d
Formatowanie osi
Grafika 2D
• gtext
służy do dołączania tekstu do wykresów
• Wywołuje ona znacznik i czeka na kliknięcie myszką. W miejscu
kliknięcia umieszczany jest wprowadzony tekst
» gtext('These are straight lines');
Dopisywanie
tekstu
Grafika 2D
• Aby pobrać współrzędne punktów, w których kliknięto na wykresie
myszką stosuje się komendę
ginput
Liczba punktów do odczytu
Wektor współrzędnych Y
Wektor współrzędnych X
» [xp, yp] = ginput(3);
Pobieranie
danych z
wykresu
Grafika 2D
» f='sin(2*x)*exp(-x)';xmin=0; xmax=2*pi;
» ezplot(f,[xmin,xmax]);
EZPlot
Wygodne
narzędzie
Grafika 3D
»
t = 0.001:0.001:0.03;
»
s = 90:0.2:100;
»
[gt, gs] = meshgrid(t,s);
»
r = 0.1;
»
k = 95;
»
[call, put] = blsprice(gs,k,r,gt,0.3);
»
surf(t,s,call)
»
xlabel('Time to Maturity')
»
ylabel('Spot Price’);
Grafika 3D
Grafika 3D
Grafika - Przenoszenie wykresów do innych aplikacji
• Drukowanie do pliku:
– Okno dialogowe drukowania: (File / Print...)
>> printdlg
– Wiersz poleceń:
(Parametry są opcjonalne)
• Kopiowanie do schowka:
– Opcje:
(File / Preferences)
– Kopiowanie: (Edit / Copy Figure)
print -devicetype -options filename
Podstawy „Handle Graphics”
• Grafika w MATLAB-ie jest zorientowana obiektowo
• Każdy obiekt graficzny posiada unikalny
uchwyt
(identyfikator)
i zbiór
własności
określających jego cechy.
• Obiekty zorganizowane są w
hierarchicznej strukturze.
Uicontrol
Image
Line
Patch
Surface
Text
Light
Axes
Uimenu
Figure
Root (Screen)
Podstawy „Handle Graphics”
Obiekt
Root
Obiekt
Surface
Obiekty
Line
Obiekty
Text
Obiekty
UIControl
Obiekt Axes
Obiekt
UIMenu
Obiekt
Figure
Podstawy „Handle Graphics”
1. W chwili tworzenia obiektu
2. Funkcje specjalizowane
0
- uchwyt obiektu root
gcf - pobiera uchwyt bieżącego okna graficznego
gca - pobiera uchwyt aktualnego układu osi współrzędnych
gco - pobiera uchwyt aktualnego obiektu
3. FINDOBJ
h_obj = findobj(h_parent, 'Property', 'Value', ...)
h_line = plot(x_data, y_data, ...)
Co to jest “aktualny obiekt”?
• Ostatni stworzony obiekt
LUB
• Obiekt ostatnio kliknięty myszką
Domyślnie = 0 (root)
Pobieranie
uchwytów
Podstawy „Handle Graphics”
» h = findobj('Color', [0 0 1])
» delete(h)
delete(h_object)
Kasowanie
obiektów
Podstawy „Handle Graphics”
• Odczytywanie bieżących własności:
• Odczytywanie listy możliwych nastaw:
• Modyfikowanie własności obiektów:
get(h_object)
set(h_object)
set(h_object, 'PropertyName',
'New_Value', ...)
Modyfikowanie
własności obiektów
Podstawy „Handle Graphics”
Lista własności:
Ukazuje własności
wybranego obiektu
»propedit
Wyszukiwarka
obiektów:
Hierarchiczna lista
wszystkich obiektów
graficznych
Okna zmiany wartości
dla poszczególnych
własności.
Edytor
własności
Matlab - zastosowania
•Moment bezwładności wirnika:
(J) = 0.01 kg.m^2/s^2
•Współczynnik tarcia lepkiego:
(b) = 0.1 Nms
•Wsp. określający zależność siły prze-
ciwelektromotorycznej od prędkości
kątowej (K=Ke=Kt) = 0.01 Nm/Amp
•Rezystancja (R) = 1 ohm
•Indukcyjność (L) = 0.5 H
•Napięcie zasilania (V) -
Wejście
•Kąt obrotu wału (theta) -
Wyjście
•Zakłada się, że wirnik i wał są
elementami sztywnymi
Matlab - zastosowania
J ¨θ
b ˙θ=Ki
L
di
dt
Ri=V −K ˙θ
z praw Newtona i Kirchoffa
s
Jsbθs=KI s
LsRI s=V −Ksθs
po przekształceniu Laplace’a
˙θ
V
=
K
Jsb LsRK
2
Transmitancja po wyeliminowaniu I(s)
Matlab - zastosowania
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K;
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];
step(num,den,0:0.1:3)
title(’Odpowiedź skokowa układu otwartego')
Matlab - zastosowania
Regulator
Silnik
R
V
˙θ
+
-
Wymagania projektowe:
(Dla wymuszenia skokowego 1rad/sec)
•Czas regulacji < 2 sec
•Przeregulowanie < 5%
•Uchyb statyczny < 1%
Matlab - zastosowania
Kp=100;
numa=Kp*num;
dena=den;
[numac,denac]=cloop(numa,dena);
t=0:0.01:5;
step(numac,denac,t)
title(‘Odpowiedź skokowa układu z regulatorem P')
Matlab - zastosowania
Kp=100;
Ki=1;
Kd=1;
numc=[Kd, Kp, Ki];
denc=[1 0];
numa=conv(num,numc);
dena=conv(den,denc);
[numac,denac]=cloop(numa,dena);
step(numac,denac)
title(‘Sterowanie PID dla małych Ki i Kd')
Matlab - zastosowania
Kp=100;
Ki=200;
Kd=1;
numc=[Kd, Kp, Ki];
denc=[1 0];
numa=conv(num,numc);
dena=conv(den,denc);
[numac,denac]=cloop(numa,dena);
step(numac,denac)
title(‘Sterowanie PID dla dużego Ki i małego Kd')
Matlab - zastosowania
Kp=100;
Ki=200;
Kd=10;
numc=[Kd, Kp, Ki];
denc=[1 0];
numa=conv(num,numc);
dena=conv(den,denc);
[numac,denac]=cloop(numa,dena);
step(numac,denac)
title('Sterowanie PID')
Dziś KONIEC