Funktionen-Files erkennt man daran, dass die erste Zeile des M-Files das Wort `function' enthält. Funktionen sind M-Files mit Eingabe- und Ausgabeparameter. Der Name des M-Files und der Funktion sollten gleich sein. Funktionen arbeiten mit eigenem Speicherbereich, unabhängig vom Arbeitsspeicher, der vom MATLAB-Befehlsfenster sichtbar ist. Im File definierte Variablen sind lokal. Die Parameter werden by address übergeben. Lokale Variable wie Parameter gehen beim Rücksprung aus der Funktion verloren.
Als erstes Beispiel eines Funktionen-Files habe ich das obige Script-File init_demo.m in eine Funktionen-File init1 umgeschrieben. Dadurch wird es viel einfacher zu gebrauchen.
function [x,y] = init1(n)
%INIT1 [x,y] = INIT(n) definiert zwei
% Zufallszahlenvektoren der Laenge n
% Demo-File fuer Matlab-Kurs
rand('state',0);
x = rand(n,1);
y = rand(n,1);
Neben dem Stichwort function erscheinen auf der ersten Zeile
des Files die Ausgabeparameter (x, y) und die
Eingabeparameter. MATLAB-Funktionen können mit einer variablen Anzahl von
Parametern aufgerufen werden.
>> norm(A)
ans =
16.8481
>> norm(A,'inf')
ans =
24
Wenn das zweite Argument in norm fehlt, berechnet die Funktion
einen Defaultwert. Innerhalb einer Funktion stehen zwei Grössen,
nargin und nargout zur Verfügung, die die Zahl der
beim aktuellen Aufruf verwendeten Parameter angibt. Die Funktion
norm braucht nargin aber nicht nargout, da
sie immer nur einen Wert liefert.
Bemerkung: MATLAB sucht beim Eintippen nicht das init1
der ersten Zeile des Funktionen-Files, sondern das File mit Name init1.m! Der auf der ersten Zeile angegebene Funktionenname ist
unwesentlich! Wenn in MATLAB ein Name z.B. xyz eingegeben wird,
so sucht der MATLAB-Interpreter
Wird in MATLAB der Befehl help init1 eingetippt, werden die im File abgespeicherte Kommentarzeilen bis zur ersten Nichtkommentarzeile auf den Bildschirm geschrieben.
>> help init1
INIT1 [x,y] = INIT(n) definiert zwei
Zufallszahlenvektoren der Laenge n
>> init1(4)
ans =
0.9501
0.2311
0.6068
0.4860
>> [a,b]=init1(4)
a =
0.9501
0.2311
0.6068
0.4860
b =
0.8913
0.7621
0.4565
0.0185
Das zweite Beispiel zeigt ein M-File, welches
>> type fak
function y=fak(n)
%
%FAK fak(n) berechnet die Fakultaet von n.
%
% fak(n) = n * fak(n-1), fak(0) = 1
% P. Arbenz 27.10.89
if n < 0 | fix(n) ~= n,
error(['FAK ist nur fuer nicht-negative',...
' ganze Zahlen definiert!'])
end
if n <= 1,
y = 1;
else
y = n*fak(n-1);
end
>> fak(4)
ans =
24
>> fak(4.5)
??? Error using ==> fak
FAK ist nur fuer nicht-negative ganze Zahlen definiert!
In diesem Beispiel sind die Variablen