1 Wykład 3 Dr Aneta Polewko-Klimhttps://play.google.com
2 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
3 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
4 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
5 Funkcja - definicja W przypadku gdy mamy małą ilość instrukcji i gdy chcemy umieścić funkcję w skrypcie możemy wykorzystać: nazwa …, zmienna_n) (instrukcja)
6 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
7 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
8 29. Funkcje ze zmienną liczbą parametrów wejściowych i wyjściowych - definicjafunction varargout =nazwa funkcji (varargin) function [ ] =nazwa funkcji (varargin) function varargout =nazwa funkcji ()
9 Test kompetencji: przedstaw możliwe rezultaty wykonania programufunction []=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
10 Funkcje ze zmienną liczbą parametrów wejściowych i wyjściowychKonwertowanie obrazu RGB na obraz binarny
11 30. Funkcje ze zmienną liczbą parametrów wejściowych i wyjściowych
12 31. Użyteczne funkcje - obsługa myszki.Funkcja Opis [x,y]=ginput(n) [x,y,przycisk]=ginput(n) [x,y]=ginput [x,y,przycisk]=ginput 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. gtext(napis) Funkcja pozwala umieścić podany napis w wybranym przez użytkownika miejscu.
13 32. Dla zaawansowanych: pętle równoległe parfor, praca na kilku procesorach matlabpoolFunkcja włączenia matlabpool open ilość procesorów np.matlabpool open 8
14 Dla zaawansowanych: pętle równoległe parfor, praca na kilku rdzeniach matlabpool
15 33. Kompilacja. Praktyczny program to taki który piszesz z wizją końca:
16 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.
17 Uwagi dotyczące budowania programu1. 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
18 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ą Dzięki wykorzystaniu kompilatora uzyskujemy przyspieszenie pracy aplikacji, ukrycie kodu przed innymi użytkownikami oraz możliwość budowy niezależnych aplikacji.
19 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ę Dzięki wykorzystaniu kompilatora uzyskujemy przyspieszenie pracy aplikacji, ukrycie kodu przed innymi użytkownikami oraz możliwość budowy niezależnych aplikacji.
20 Jeśli chcesz wiedzieć więcej zajrzyj na:
21 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.
22 34. GUIDE - uruchomienie Wybieramy Wariant 1 Uruchamiamy wpisującw oknie „Command Window” komende >> guide 2. Wariant 2: z menu file Matlaba wybieramy opcję new GUI otworzy się okno graficznego projektowania obiektów GUI. Wybieramy
23 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
24 Przykład – tworzymy wykres
25 UWAGA Każdy obiekt wprowadzony w GUIDE ma własnego „Property Inspector”, w którym można ustawić podstawowe informacje. W centrum (część zakratkowana) znajduje się obszar wyświetlany po uruchomienu aplikacji. Możliwości uruchomienia „Property Inspector”: 1. klikając dwukrotnie w dowolnym miejscu; 2. Kliknięcie prawym przyciskiem myszy i z rozwijanego menu wybranie opcji „Property Inspector” 3. Z menu „View” wybranie opcji „Property Inspector”
26 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
27 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”)
28 Start programu - 3 sposobyWciskamy „ctrl+t” Z menu Tools->run Wciskamy zieloną strzałeczkę w prawym górnym rogu Czy chcemy zapisać zmiany? Bez zapisania zmian nie da się uruchomić GUI.
29 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.
30 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’);
31
32 GUIDE - utrwalenie