background image

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”

background image

» 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

background image

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');

background image

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

background image

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:

background image

• 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', ...)

background image

Grafika 2D

N.p. rysujemy dane o 

kursach akcji IBM 

(Uwaga na oś X)

» load ibm.mat
» plot(1:length(ibm), ibm)

background image

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*:')

background image

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)

background image

Grafika 2D

SEMILOGY
log Y
lin X

PLOTYY
Dwie liniowe
osie Y

LOGLOG
Obie osie 
w skali
logarytmicz
-nej

SEMILOGX
log X
lin Y

background image

Grafika 2D

3 wektory tej 

samej 
długości

Jak wyróżnić 
poszczególne 
wykresy ?

background image

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

 

background image

Grafika 2D

Wykres musi 
nieść czytelne 
informacje

background image

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

background image

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 

background image

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

background image

Grafika 2D

» f='sin(2*x)*exp(-x)';xmin=0; xmax=2*pi;
» ezplot(f,[xmin,xmax]);

EZPlot

Wygodne

narzędzie

background image

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’);

background image

Grafika 3D

background image

Grafika 3D

background image

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

background image

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)

background image

Podstawy „Handle Graphics”

Obiekt

Root

Obiekt
Surface

Obiekty
Line

Obiekty
Text

Obiekty
UIControl

Obiekt Axes

Obiekt
UIMenu

Obiekt
Figure

background image

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

background image

Podstawy „Handle Graphics”

» h = findobj('Color', [0 0 1])
» delete(h)

delete(h_object)

Kasowanie

obiektów

background image

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

background image

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

background image

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

background image

Matlab - zastosowania

¨θ

˙θ=Ki

L

di
dt

Ri=˙θ

z praw Newtona i Kirchoffa

s

 Jsbθs=KI  s

 LsRs=Ksθs

po przekształceniu Laplace’a

˙θ

V

=

K

 Jsb LsRK

2

Transmitancja po wyeliminowaniu I(s)

background image

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')

background image

Matlab - zastosowania

Regulator

Silnik

R

V

˙θ

+

-

Wymagania projektowe:

(Dla wymuszenia skokowego 1rad/sec)

•Czas regulacji  <  2 sec
•Przeregulowanie  <  5%
•Uchyb statyczny  < 1%

background image

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')

background image

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')

background image

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')

background image

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')

background image

Dziś   KONIEC