next up previous contents
Next: 3.3 Petlje i uvjetne Up: 3. Programi i funkcije Previous: 3.1 Skripte

3.2 Funkcijske M-datoteke

Kod funkcijskih datoteka varijable su lokalne i nema ih u radnom prostoru i zato možemo reći da je funkcija na neki način crna kutija. Funkcijska datoteka komunicira s radnim prostorom samo preko varijabli ulaza i varijabli izlaza3.2.

Osnovna forma funkcijske M-datoteke dana je na slici (3).

Slika 3: Propisana forma funkcijske M-datoteke
function [izl1,izl2,...] = imedatoteke (ul1,ul2,...)
% ovo je kratki opis funkcijske m-datoteke
% komentar za dokumentaciju...
% sve ono sto je iza '%' je komentar
% ovaj komentar se vidi u kom.prozoru ako se ukuca
% help imedatoteke
% ova funkcija je spremljena u datoteku:
% imedatoteke.m
% ...
...
Glavni element je prva linija u kojoj se definira funkcija sa svojim imenom (to ime određuje i ime datoteke u kojoj je spremljena funkcija), ulaznim i izlaznim varijablama. Nakon nje slijedi niz komentar linija koje predstavljaju help funkcije i pri tome je prva od njih (naziva se H1 linija) posebna jer se ona pretražuje naredbom lookfor i uobičajeno je da sadrži ime i kratki opis funkcije. Nakon komentar linija slijedi samo tijelo funkcije.

Uz pretpostavku da je funkcijska M-datoteka (imedatoteke.m) smještena u MATLAB-ovu path-u funkcija se izvršava pozivom u MATLAB-ovu komandnom prozoru (ili u nekoj drugoj M-datoteci) na sljedeći način:

>> [izl1,izl2,...] = imedatoteke(ul1,ul2,...)
pri čemu su ul1,ul2,... ulazne varijable, a izl1,izl2,... izlazne. Izvršavanje funkcijske .m datoteke se ne preporuča direktno iz editora budući da nemamo kontrolu nad ulaznim varijablama.

Analizirajmo funkcijske M-datoteke na primjeru funkcije average.m koja određuje srednju vrijednost za elemente jednog vektora. Pri tome ulazna varijabla ne smije biti skalar ili matrica.

function a = average(b)
% AVERAGE Srednja vrijednost elemenata vektora.
% AVERAGE(B), gdje je B vektor, predstavlja srednju 
% vrijednost elemenata vektora.
% Za ne-vektorski ulaz funkcija dojavljuje gresku.
[m,n] = size(b);
if (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
    error('Ulaz mora biti vektor!')
end
a = sum(b)/length(b);      % izracun srednje vrijednosti

U komandnom prozoru funkciju pozivamo na sljedeći način

>> y=average(x)
y =
    0.7850



... izlaza3.2
Funkcije ne koriste radnu memoriju (engl. base workspace) već je područje dosega memorije funkcije ograničeno - one imaju svoju vlastitu memoriju, engl. workspace. Prosljeđivanje varijabli iz radne memorije u memoriju funkcije je najsigurnije preko ulazno-izlaznih varijabli. No postoje i drugi način o kojim će biti više riječi kasnije.

next up previous contents
Next: 3.3 Petlje i uvjetne Up: 3. Programi i funkcije Previous: 3.1 Skripte
Milan Vrdoljak, 2007-10-15