Matlab Interfejs komponentowy GUI Podsumowanie

Transkrypt

Matlab Interfejs komponentowy GUI Podsumowanie
MOiPP
Wykład 8
Matlab
Interfejs komponentowy GUI
Podsumowanie
1
Ważne elementy z wykładu 7
- długość krzywej
- sprzężenia zwrotne
2
Wpisujemy w Command Window:
>>guide
Możliwości wyboru:
• Blank GUI - pusty formularz,
• GUI with UIcontrols - formularz z podstawowymi
elementami sterującymi,
• GUI with Axes and Menu - formularz zawierający
wykres i listę rozwijaną,
• Modal Question Dialog - modalne okno
dialogowe.
Okno pustego formularza
Mamy do wyboru następujące komponenty:
•
•
•
•
•
•
•
•
•
•
•
•
•
Przycisk (Push Button)
Suwak (Slider)
Przycisk radiowy (Radio Button)
Pole wyboru (Checkbox)
Pole tekstowe (Edit Text)
Etykieta (Static Text)
Lista rozwijana (Popup Menu)
Lista wyboru (Listbox)
Przełącznik (Toggle Button)
Wykres
Panel
Grupa przycisków (Button group)
Komponent ActiveX
7
Każdy komponent (obiekt)
wprowadzony w okienku
aplikacji ma Property Inspector
(po dwukliknięciu danego
elementu lub wybierany z
menu kontekstowego), w
którym można ustawić
podstawowe informacje o
danym komponencie.
Ważniejsze właściwości komponentów
• String - napisy na przyciskach i etykietach,
tekst w komponencie Edit.
• Tag - nazwa komponentu, pod którą jest on
identyfikowany w kodzie.
• Units – jednostki miary
• Position - naciskamy „+” : x, y, width, height
• Fontsize – rozmiar czcionki
Funkcjonalność komponentu
Po zapisie aplikacji mamy dwa pliki:
nazwa.fig
nazwa.m
Aby zdefiniować działanie aplikacji należy w mpliku zdefiniować funkcję Callback dla danego
komponentu
Jeżeli mamy komponent typu Pushbutton posiadający Tag o
wartości rysuj, po zapisaniu pliku fig przenosimy się do
funkcji rysuj_Callback w m-pliku aplikacji.
Funkcja ta będzie wykonywana po kliknięciu przycisku
uruchomionej aplikacji.
lub
Jeżeli nawet nie umieścimy w formularzu komponentu wykresu Axes
…
function rysuj_Callback (hObject, eventdata, handles)
% hObject handle to rysuj (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
fplot('sin(x)',[0 2*pi])
i uruchomimy aplikację
przyciskiem Run, to po
kliknięciu przycisku
zostanie wykonana
funkcja Callback i pojawi
się wykres na tle okna
(płótno – canvas)
Matlab posiada specjalną strukturę o nazwie handles, w której
mogą być przechowywane wartości parametrów obiektów – dla
komunikacji pomiędzy różnymi funkcjami Callback.
Jeśli działanie jednego komponentu ma wpływać na parametry
innego komponentu, przykładowo:
- przesuwany suwak Slider ma zmieniać dane wykresu,
- kliknięcie przycisku ma zmieniać wartość tekstu w
komponencie Edit Text,
itp.
musimy wykorzystać dostęp do danych w strukturze handles i
mieć możliwość ich modyfikacji
Każdy obiekt- element struktury handles - identyfikujemy
przez zapis:
handles.tag_obiektu
Stosuje się dwie metody (funkcje):
set(obiekt, właściwość, wartość)
która służy do nadawania wartości właściwościom
obiektów umieszczonych w strukturze handles,
oraz
get(obiekt, właściwość)
która służy do pobierania wartości właściwości
obiektów umieszczonych w strukturze handles.
Przykładowo:
Zadanie: W odpowiedzi na kliknięcie przycisku
chcemy przepisać tekst z komponentu o tagu edit1
do komponentu o tagu edit2.
Wewnątrz funkcji Callback dla przycisku piszemy kod:
x=get(handles.edit1,'String'); %pobranie do zmiennej
set(handles.edit2,'String', x); % nadanie
set
lub bez użycia zmiennej:
set(handles.edit2,'String', get(handles.edit1,'String');
Konwersja typów
Napisy na przyciskach i etykietach, tekst wpisywany do
komponentów edit itp. to dane typu tekstowego (char).
Jeśli mamy zamiar wykonywać operacje arytmetyczne musimy dane
typu tekstowego konwertować na liczby.
Służy do tego funkcja str2double:
liczba= str2double(tekst)
Po wykonaniu działań obliczeniowych, aby wyświetlić wynik jako
teskt, konieczna jest konwersja odwrotna.
Służy do tego funkcja num2str:
tekst= num2str(liczba)
Przykładowo – sumowanie dwóch liczb
function pushbutton1_Callback(hObject, eventdata, handles)
s1=get(handles.edit1,'String')
s2=get(handles.edit2,'String')
l1=str2double(s1);
l2=str2double(s2);
suma=l1+l2;
set(handles.edit3,'String',num2str(suma));
lub przy pomocy jednej instrukcji:
function pushbutton1_Callback(hObject, eventdata, handles)
set(handles.edit3,'String',…
num2str(…
str2double(get(handles.edit1,'String'))…
+str2double(get(handles.edit2,'String'))));
… trzy kropki to kontynuacja instrukcji w nowym wierszu
17
Usuwanie tekstu w komponencie:
set(handles.edit1,'String','')
Uwaga: dwa apostrofy!
Łączenie (konkatenacja) tekstów:
tekst= strcat(teskt1, teskt2)
18
Dwa komponenty axes:
function pushbutton1_Callback(hObject, eventdata, handles)
x=-4:0.1:4;
y=x.^2;
plot(handles.axes1,x,y)
function pushbutton2_Callback(hObject, eventdata, handles)
fplot(handles.axes2,'sin(x)', [0 get(handles.slider1,'Value'));
19
Zastosowanie funkcji OpeningFcn (wykonanie na starcie aplikacji)
function test_OpeningFcn(hObject, eventdata, handles, varargin)
clc
%figura konturowa
x=[0 0 1 1 3 3 0; 0 5 5 1 1 0 0; 1 1 1 1 1 1 1]
fill(x(1,:),x(2,:),'c')
%axis([-1 6 -1 6])
axis equal
syms px py sx sy kat
Prz=[1 0 px;0 1 py;0 0 1];
Ska=[sx 0 0;0 sy 0; 0 0 1];
Obr=[cos(kat) sin(kat) 0; -sin(kat) cos(kat) 0; 0 0 1];
r=Prz*Ska*Obr
handles.R=r; %umieszczenie w handles
handles.X=x; %umieszczenie w handles
guidata(hObject, handles); %odświeżenie handles
20
Teraz callback dla przycisku
function pushbutton1_Callback(hObject, eventdata, handles)
x=handles.R*handles.X; %odwołanie do handles
px=rand*5-2.5,
py=rand*5-2.5,
sx=rand,
sy=sx,
kat=(rand-0.5)*2*pi,
x=subs(x)
hold on
fill(x(1,:),x(2,:),'r')
21
Podsumowanie wiedzy
22
1.
2.
3.
4.
Edycja m-plików i ich uruchamianie
Inicjacja zmiennych – nadawanie im wartości
Proste obliczenia z wykorzystaniem funkcji matematycznych
Zmienne zespolone
Macierze
1. Tworzenie macierzy jedno- i dwuwymiarowych
2. Operacje macierzowe
• macierz odwrotna
• mnożenie macierzy (macierzowe i elementowe)
• podnoszenie macierzy do potęgi (macierzowe i
elementowe)
• wyznacznik macierzy
• tanspozycja macierzy
3. Wykorzystanie macierzy
• rozwiązywanie układu równań liniowych
• rozwiązywanie równania n-tego stopnia (roots)
• wektoryzacja danych dla wykresów
23
Wykresy funkcji
• wykresy 2D – funkcje plot i fplot
• wykres funkcji symbolicznej – ezplot
• zarządzanie zakresami zmiennej niezależnej i
zależnej (axis)
Proste obliczenia kinematyczne ruchu jednostajnego
i jednostajnie przyspieszonego,
• wektoryzacja czasu,
• wykresy drogi, prędkości, przyspieszenia.
Aproksymacja – przybliżanie danych dyskretnych
parabolą n-tego stopnia
Interpolacja i ekstrapolacja
24
Instrukcje strukturalne w Matlabie
• Instrukcja warunkowa – cel i struktura, badanie kilku
warunków, koniunkcja i alternatywa warunków
• Instrukcje iteracyjne – pętle
• sterowanie przebiegiem pętli liczonej for
• pętle zagnieżdżane (np. dla tablic dwuwymiarowych)
• zastosowania pętli w algorytmach wyszukiwania,
sumowania i zliczania elementów (z warunkami)
• pętla warunkowa while
Funkcje własne
• tworzenie i wykorzystanie funkcji anonimowej
• tworzenie i wykorzystanie funkcji utworzonej w
osobnym pliku - umiejętność określania argumentów
wejściowych i wyjściowych
25
Obliczenia symboliczne
• Inicjacja zmiennych symbolicznych (syms)
• Rozwiązywanie równań nieliniowych (solve)
• Podstawienie danych liczbowych do wyrażeń
symbolicznych (subs)
• Wykresy funkcji symbolicznych (ezplot)
• Symboliczne obliczenia pochodnych (pierwszego i
drugiego stopnia, pochodne cząstkowe)
• Całkowanie symboliczne (całki oznaczone i
nieoznaczone)
• Równania różniczkowe (dsolve) w warunkami
początkowymi
26
Wykorzystanie operacji symbolicznych
Badanie funkcji f– wykres, miejsca zerowe, minima,
maksima, punkty przegięcia
• miejsce zerowe (solve(f))
• ekstremum – pochodna 1 rzędu ma miejsce zerowe
• minimum –pochodna 2 rzędu dodatnia
• maksimum –pochodna 2 rzędu ujemna
• punkt przegięcia –pochodna 2 rzędu ma miejsca
zerowe
Wykorzystanie równań różniczkowych w zadaniach
kinematycznych
27
clc, clear
syms x
f=x^3-5*x^2+5*x+1
zera=solve(f); zera=double(zera)
subplot(3,1,1),ezplot(f,[-1,4])
df=diff(f)
extrema=solve(df);
extrema=double(extrema)
subplot(3,1,2),ezplot(df,[-1,4])
d2f=diff(df)
pp=solve(d2f);%punkt przegięcia
pp=subs(pp)
subplot(3,1,3),ezplot(d2f,[-1,4])
disp('Badamy wartość d2f w punktach ext')
disp('Jak dodatnie to minimum, ujemne to maximum')
for k=1:length(extrema)
x=extrema(k)
if subs(d2f)<0 disp('Max')
else disp('Min')
end
end
28
WYNIKI
x3-5 x2+5 x+1
5
0
-5
-1
-0.5
0
0.5
1
1.5
x
2
2.5
3
3.5
4
zera =
3.4812
-0.1701
1.6889
pp
2
x=1.6667
3 x -10 x+5
15
10
5
0
-5
-1
x=2.7208 minimum
-0.5
0
0.5
1
1.5
x
2
2.5
3
3.5
4
x=0.6126 maksimum
6 x-10
10
0
-10
-1
Wniosek:
-0.5
0
0.5
1
1.5
x
2
2.5
3
3.5
4
pp różne od zera(3)
pp jest tam, gdzie d2f=0
29
Tworzenie prostej aplikacji GUI
• komponenty i ich właściwości – inspektor,
• rola funkcji callback w m-pliku,
• pobieranie i nadawanie wartości właściwościom
komponentów w kodzie m-pliku – funkcje set i get
• konwersja typów – funkcje num2str i str2double - obliczenia
Proste zadania na bazie wykładów, przykładowo:
• transformacja figury geometrycznej (przesunięcie, skala,
obrót),
• obliczenie długości krzywej dla podanej funkcji,
• zadanie ze sprzężeniem zwrotnym
itp
30

Podobne dokumenty