MateriaÅ‚y do Laboratorium Informatyki Rok akademicki: 2009/10 Semestr: letni MATLAB cz. 3 Funkcje Funkcje w Å›rodowisku MATLAB a to m-pliki które mogÄ… pobierać i zwracać argumenty z i do skryptu w którym zostaÅ‚y wykonane. Funkcje operujÄ… na zmiennych w swojej wÅ‚asnej przestrzeni (workspace), a wiÄ™c zmienne stworzone wewnÄ…trz funkcji nie należą do przestrzeni zmiennych dostÄ™pnych z wiersza poleceÅ„ MATLAB a. OczywiÅ›cie istnieje możliwość przekazywania parametrów do funkcji i zwracania ich z funkcji. PrzykÅ‚ad: function y = average(x) % Funkcja obliczajaca wartosc srednia elementow wektor y=sum(x)/length(x); % miejsce obliczenia Å›redniej Powyższa funkcja musi być zapisana w oddzielnym m-pliku, zaÅ› nazwa tego pliku powinna być identyczna z nazwÄ… funkcji. W tym przypadku wiÄ™c, plik powinien nosić nazwÄ™ average.m. Tak napisana funkcja może być użyta w nastÄ™pujÄ…cy sposób z wiersza poleceÅ„ MATLAB a (lub skryptu) >> A = [1 2 3 4]; >> z = average(A) z = 2.5000 Przyjrzyjmy siÄ™ teraz dokÅ‚adniej konstrukcji funkcji. Pierwsza linijka to definicja funkcji okreÅ›lajÄ…ca jej interfejs, czyli sposób jej użycia: function y = average(x) argument przekazywany do funkcji nazwa funkcji (używana do wywoÅ‚anie funkcji) argument zwracany przez funkcjÄ™ sÅ‚owo kluczowe oznaczajÄ…ce definicjÄ™ funkcji. Funkcja może oczywiÅ›cie pobierać i zwracać wiÄ™cej argumentów, np. function [x,y,z] = inna_funkcja(a,b,c) JeÅ›li funkcja nie zwraca argumentów może wyglÄ…dać nastÄ™pujÄ…co: function nazwa_funkzji(a,b,c) OpracowaÅ‚: dr inż. Witold NocoÅ„ MateriaÅ‚y do Laboratorium Informatyki Rok akademicki: 2009/10 Semestr: letni Nazwa funkcji podlega takim samym ograniczeniom jak nazwa zmiennej, dlatego MATLAB pod uwagÄ™ bierze tylko 31 pierwszych znaków, nazwa nie może zaczynać siÄ™ od cyfry, oraz może skÅ‚adać siÄ™ wyłącznie z liter, cyfr i znaku podkreÅ›lenia. Nazwa pliku w którym zapisana jest funkcja powinna odpowiadać nazwie funkcji. Przed nazwaniem funkcji dobrze jest sprawdzić, czy nie istnieje już funkcji a takiej nazwie (poprzez wpisanie help nazwa_funkcji) Tekst umieszczony bezpoÅ›rednio po definicji funkcji a rozpoczynajÄ…cy siÄ™ od znaku komentarza (%) bÄ™dzie wyÅ›wietlony po wpisaniu w wierszu poleceÅ„ polecenia: help nazwa_fukcji czyli w naszym przypadku: help average Kolejne komentarze umieszczane w funkcji (np. % miejsce obliczenia Å›redniej) nie bÄ™dÄ… już wyÅ›wietlane. Po komentarzu pomocy, umieszczane jest ciaÅ‚o funkcji. W naszym przypadku jest to: y=sum(x)/lenght(x); % miejsce obliczenia Å›redniej Ostatnia linijka w omawianej funkcji dokonuje obliczenia wartoÅ›ci zwracanej przez funkcjÄ™ (zmienna y). Miejsce przypisania wartoÅ›ci do zmiennej zwracanej nie musi być oczywiÅ›cie ostatnim wierszem funkcji. Zmienne lokalne i globalne Zmienne utworzone wewnÄ…trz funkcji (pamiÄ™tamy, że MATLAB nie wymaga specjalnej deklaracji, a wiÄ™c pierwsze użycie zmiennej jest równoczeÅ›nie jej deklaracjÄ…) sÄ… zmiennymi lokalnymi. Zmienne takie sÄ… wiÄ™c widoczne tylko wewnÄ…trz funkcji. Istnieje możliwość deklaracji zmiennych globalnych, a wiÄ™c takich, które sÄ… widoczne w kilku funkcjach, lub w funkcjach i głównej przestrzeni zmiennych MATLAB a. W takim przypadku konieczna jest deklaracja zmiennej z wykorzystaniem sÅ‚owa kluczowego global. Np. w wierszu poleceÅ„, lub skrypcie możemy napisać: global ALPHA BETA ALPHA = 0.01 BETA = 0.02 Teraz, w funkcji możemy użyć tych zmiennych globalnych pod warunkiem zapisania wewnÄ…trz funkcji instrukcji: global ALPHA BETA OpracowaÅ‚: dr inż. Witold NocoÅ„ MateriaÅ‚y do Laboratorium Informatyki Rok akademicki: 2009/10 Semestr: letni PrzykÅ‚adowe zadania do rozwiÄ…zania: 1. Napisz funkcjÄ™ która na podstawie przekazanego wektora okreÅ›li ilość elementów dodatnich, ilość elementów ujemnych oraz ilość elementów o wartoÅ›ci zero. 2. Napisz funkcjÄ™ która na podstawie przekazanego wektora, zwróci trzy wektory zawierajÄ…ce odpowiednio elementy dodatnie, ujemne i zerowe. 3. Napisz funkcjÄ™, która wykorzystujÄ…c funkcji z zad. 1 i 2. zwróci trzy wartoÅ›ci: ·ð Å›redniÄ… elementów dodatnich ·ð Å›redniÄ… elementów ujemnych ·ð ilość zer 4. Napisz funkcjÄ™ zwracajÄ…cÄ… wartość funkcji danej nastÄ™pujÄ…cym wzorem: ìð x <ð y 2x +ð 2y ïð f (x, y) =ð =ð y 3 íðx ïðx >ð y x2 -ð sin(y) îð 5. Po przetestowaniu funkcji z zad. 4 proszÄ™ wykorzystać jÄ… w innej funkcji wyznaczajÄ…cej wartość: Nk y =ð +ð i Dðx, y0 -ð i Dðy)ð åðf(ðx0 i=ðNp Gdzie x0, y0, Dðx, Dðy Îð R, Np, Nk Îð N wartoÅ›ci wczytywane z klawiatury w skrypcie wywoÅ‚ujÄ…cym tÄ… funkcjÄ™. 6. FunkcjÄ™ z zad. 4 wykorzystać w kolejnej funkcji, która obliczy wartoÅ›ci funkcji dwóch zmiennych f(x,y), dla podanych przedziałów i kroków dla zmiennych x i y, czyli: xÎð xp; xk i zadanego kroku dx y Îð yp; yk i zadanego kroku dy Uzyskane wartoÅ›ci funkcji dwóch zmiennych (czyli powierzchni) należy przedstawić na wykresie trójwymiarowym, korzystajÄ…c z funkcji mesh. OpracowaÅ‚: dr inż. Witold NocoÅ„