Materiały do Laboratorium Informatyki Rok akademicki: 2008/09
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)/lenght(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: 2008/09
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: 2008/09
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) = ⎨x = y 3
⎪⎩x > y x2 −sin(y)
5. Po przetestowaniu funkcji z zad. 4 proszę wykorzystać ją w innej funkcji wyznaczającej wartość:
Nk
y = ∑f (x + i ∆x, y − i ∆
0
0
y)
i=Np
Gdzie x0, y0, ∆ x, ∆ 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 ∈ x ; x
i zadanego kroku dx
p
k
y ∈ y ; y
i zadanego kroku dy
p
k
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ń