Materiały do Laboratorium Informatyki
Rok akademicki: 2008/09
Semestr:
letni
Opracował: dr inż. Witold Nocoń
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)
Materiały do Laboratorium Informatyki
Rok akademicki: 2008/09
Semestr:
letni
Opracował: dr inż. Witold Nocoń
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
Materiały do Laboratorium Informatyki
Rok akademicki: 2008/09
Semestr:
letni
Opracował: dr inż. Witold Nocoń
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:
⎪
⎩
⎪
⎨
⎧
−
>
=
+
<
=
)
y
sin(
x
y
x
3
y
x
y
2
x
2
y
x
)
y
,
x
(
f
2
5. Po przetestowaniu funkcji z zad. 4 proszę wykorzystać ją w innej funkcji wyznaczającej
wartość:
(
)
∑
=
∆
−
∆
+
=
k
N
p
N
i
0
0
y
i
y
,
x
i
x
f
y
Gdzie x
0
, y
0
,
∆
x,
∆
y
∈
R, N
p
, N
k
∈
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:
k
p
x
x
x
;
∈
i zadanego kroku dx
k
p
y
y
y
;
∈
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.