Transcript MATwyk3

Wykład 3
Dr Aneta Polewko-Klim
https://play.google.com
28. Funkcje.
Występują dwa rodzaje funkcji:
a) funkcje wbudowane jak np. sqrt
b) funkcje przechowywane w m-plikach (właśnie te m-pliki
funkcyjne możemy tworzyć samodzielnie.
Jak to zrobić?
- pierwszy wiersz m-pliku musi zawierać definicję nowej
funkcji: słowo kluczowe function
- nazwę funkcji – musi być taka sama jak nazwa pliku
(bez rozszerzenia) listę argumentów wyjściowych
Definicja funkcji
function [wart_fun1, wart_fun2, ...]=nazwa_funkcji(parametr1,
parametr2, ...)
% ewentualny opis funkcji w formie komentarza
wart_fun1=wynik1;
wart_fun2=wynik2;
...
end
function [y]=radst(x)
%przelicza radiany na stopnie x – ilość radianów
y=(x.*180)/pi;
Ważne !!!: zmienne utworzone podczas działania funkcji są usuwane z chwilą zakończenia
wykonywania funkcji i nie są widoczne poza nią, podobnie zmienne utworzone poza
funkcją nie są widoczne w jej wnętrzu. Funkcja operuje więc na zmiennych lokalnych.
Aby zmienna z przestrzeni roboczej Matlaba była widoczna w ciele funkcji należy
zadeklarować ją jako globalną i deklarację tą powtórzyć w ciele funkcji
global A B C
Szczegóły
1. Jeśli funkcja posiada kilka argumentów wyjściowych, oddzielamy je
przecinkiem, a wszystkie umieszczamy w nawiasach kwadratowych
np:
function [a, b, c] = normest(w, n, p, r)
2. Jeśli funkcja ma tylko jeden argument wyjściowy, nawiasy możemy
pominąć:
function r = roots(c)
3. Jeżeli nie zwraca argumentów wyjściowych, może być zapisana w
postaci:
function nazwa_funkcji(arg_wej)
4. Nazwy funkcji muszą się rozpoczynać literą, a pozostała część może
być kombinacją liter, cyfr i znaku podkreślenia. Jeżeli nazwa pliku
różni się od nazwy funkcji, to zwycięża nazwa pliku, dlatego powinno
się stosować identyczne nazwy funkcji i pliku.
5. Kolejne linie po słowie function zaczynające się od % stanowią
help
Funkcja - definicja
W przypadku gdy mamy małą ilość instrukcji i
gdy chcemy umieścić funkcję w skrypcie
możemy wykorzystać:
nazwa funkcji=@(zmienna_1, …, zmienna_n) (instrukcja)
Przydatne funkcje
- funkcje Matlab przydatne podczas budowania funkcji
użytkownika.
- nargin - ustala liczbę wywołanych argumentów
wejściowych
- nargout - ustala liczbę wywołanych argumentów
wyjściowych
Przykład
Napisać funkcję, która wywołana z jednym parametrem
oblicza a^2 , natomiast przy dwóch argumentach a i b
obliczy a^2+b^2.
function W=licze(a,b)
if nargin<1
error('Mała liczba argumentów')
elseif nargin==1
W=a.^2;
elseif nargin==2
W=a.^2+b.^2;
else
error('Za dużo argumentów')
end
29. Funkcje ze zmienną liczbą parametrów
wejściowych i wyjściowych - definicja
function varargout =nazwa funkcji (varargin)
function [ ] =nazwa funkcji (varargin)
function varargout =nazwa funkcji ()
Test kompetencji: przedstaw możliwe
rezultaty wykonania programu
function []=ryswykres(varargin)
x=1:10
switch nargin
case 1
plot(x,varargin{1}.*x)
case 2
plot(x,varargin{2}.*x.^2+varargin{1}.*x)
otherwise
error('Brak mozliwości')
end
Funkcje ze zmienną liczbą parametrów
wejściowych i wyjściowych
Konwertowanie obrazu RGB na obraz binarny
www.mathworks.com
http://www.youtube.com/watch?v=Od-cgGRlvi4
30. Funkcje ze zmienną liczbą parametrów
wejściowych i wyjściowych
31. Użyteczne funkcje - obsługa myszki.
Funkcja
[x,y]=ginput(n)
[x,y,przycisk]=ginput(n)
[x,y]=ginput
[x,y,przycisk]=ginput
gtext(napis)
Opis
Funkcja pobiera współrzędne n
punktów wskazanych przez
użytkownika kursorem i
zaznaczonych przez wciśnięcie
klawisza lub przycisku myszki.
Zwracane są współrzędne x i y
punktu oraz kod klawisza lub
przycisku myszki. Działanie
funkcji kończymy klawiszem
Enter.
Funkcja pozwala umieścić podany
napis w wybranym przez
użytkownika miejscu.
32. Dla zaawansowanych: pętle równoległe
parfor, praca na kilku procesorach matlabpool
Funkcja włączenia
matlabpool open ilość procesorów
np.matlabpool open 8
http://www.youtube.com/watch?v=TXMhpKLi9hA
Dla zaawansowanych: pętle równoległe
parfor, praca na kilku rdzeniach matlabpool
33. Kompilacja. Praktyczny program to
taki który piszesz z wizją końca:
Kompilacja
1. Kompilator Matlab zamienia funkcję zapisaną w
pliku typu M-file na wersję wykonywalną, bibliotekę
MEX, plik lub kod programu w C czy C++.
2. Rodzaj generowanych plików: kod w języku C do
budowania plików typu MEX, kod w języku C lub C++,
biblioteki dynamiczne i statyczne oraz wykonywalną
aplikację
3. Należy posiadać zainstalowany toolbox compiler.
4. Plik wykonywalny exe będzie działać na komputerze
na którym jest zainstalowana taka sama wersja matlaba.
Uwagi dotyczące budowania programu
1. Nie można używać skryptów;
2. Program musi bazować/wykorzystywać wyłącznie
funkcje;
3. Gui wykonane za pomocą guide;
4. Wszystkie m-pliki z funkcjami należy podać przy
kompilacji;
5. Wymagane aby zmienne w funkcjach były globalne.
6. Kompilacji nie podlegają funkcje korzystające z
poleceń input , eval jeśli te działają na zmiennych z
workspace oraz operujące na zmiennych globalnych
Funkcja do kompilacji
mcc [-opcja] funkcja [funkcja2 .] [mex1 . mexN]
[mlib1 . mlibN]
funkcja - nazwa funkcji poddawana kompilacji,
mex - nazwa pliku typu MEX
mlib - nazwa biblioteki
opcje (wybrane):
-c
generuje kod C
-p
generuje kod C++ oraz działającą aplikację
-x
generuje plik typu MEX
-m
generuje wykonywalną aplikacją
Przykłady opcji
>> mcc -m funkcja % generuje wykonywalną
aplikację na podstawie pliku funkcja.m
>> mcc -m funkcja1 funkcja2 % generuje
wykonywalne aplikacje na podstawie plików
funkcja1.m oraz funkcja2.m
>> mcc -T compile:exe funkcja % generuje
wykonywalną aplikację
Jeśli chcesz wiedzieć więcej
zajrzyj na:
34. GUI
GUI (Graphical User Interface) system, który
umożliwia użytkownikowi automatyczne wydawanie
wielu poleceń (np. poprzez naciśnięcie określonego
klawisza). Projektowanie GUI to pierwszym kroki
do kreowania wolno stojących aplikacji.
W Matlabie do projektowania GUI służy program
GUIDE (Graphical User Interface Development
Enviroment) – tworzymy interfejs dla użytkownika.
34. GUIDE - uruchomienie
1. Wariant 1 Uruchamiamy wpisując
w oknie „Command Window”
komende >> guide
Wybieramy
2. Wariant 2:
• z menu file Matlaba wybieramy
opcję new GUI
• otworzy się okno graficznego
projektowania obiektów GUI.
Menu obiektów używanych w GUI.
- Push Button – przycisk (dzwonkowy)
- Slider – suwak
- Radio Button – wybór jednej z opcji w grupie
- Checkbox - włącznik
- Edit Text – tekst edytowalny (w trakcie działania GUI)
- Static Text – tekst (nie zmieniany w trakcie działania GUI)
- Popup Menu – lista rozwijana
- Listbox
- Toggle Button – przełącznik (posiada dwa stany: aktywny
lub nie aktywny)
- Axes – pole wykresu
- Panel – ramka
- Button Group - może sterować obiektami znajdującymi się
w jego wnętrzu
- ActiveX Control – inne funkcje. np. zegar Windows
Przykład – tworzymy wykres
W centrum (część zakratkowana) znajduje się obszar
wyświetlany po uruchomienu aplikacji.
Możliwości uruchomienia
„Property Inspector”:
UWAGA
1. klikając dwukrotnie w dowolnym
miejscu;
Każdy
obiekt wprowadzony w GUIDE ma własnego
„Property Inspector”, w którym można ustawić
2. Kliknięcie prawym przyciskiem
podstawowe informacje.
myszy i z rozwijanego menu wybranie opcji
„Property Inspector”
3. Z menu „View” wybranie opcji „Property Inspector”
Najistotniejsze pola
String wpisujemy „rysuj” dzięki temu po
włączeniu GUI nasz przycisk będzie miał tą
właśnie nazwę.
Tag – wpisujemy „rysuj” w wygenerowanej
funkcji pojawi się np. rysuj_Callback
Property inspector - wykresu.
Opcję Units
przestawiamy na
centymetry, a następnie
wielkość wykresu np.
na 10x6 cm, pozycje
x=1, y=3
Naciskamy „+” przy
zakładce „Position” i
wybieramy zmieniamy
„width” na 15, a
„height” na 10.
(Zatwierdzamy
przyciskiem „Enter”)
Start programu - 3 sposoby
1. Wciskamy „ctrl+t”
2. Z menu Tools->run
3. Wciskamy zieloną strzałeczkę w prawym górnym rogu
Czy chcemy zapisać zmiany?
Bez zapisania zmian nie da się uruchomić GUI.
Po zapisaniu wygeneruje się nam automatycznie m-file, o tej
samej nazwie co plik fig. Wspólnie tworzą one informacje dla
Matlaba jak ma wyglądać GUI.
function rysuj_Callback(hObject, eventdata, handles)
x1=0:0.2:6.2;
y1=sin(x1);
y2=cos(x1)
plot(x1,y1,’r’,x1,y1,’rx’);
plot(x1,y2,’b’,x1,y2,’bo’);
http://www.youtube.com/watch?v=D_hmws6dwgg
GUIDE - utrwalenie