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 = 24Wenn 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.0185Das 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