5.2 Funktionen-Files

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

  1. ob eine Variable xyz im Arbeitsspeicher existiert,
  2. ob xyz eine eingebaute MATLAB-Funktion ist,
  3. ob ein File namens xyz.m im gegenwärtigen Verzeichnis (Directory) existiert,
  4. ob es ein File namens xyz.m im einem der in der Unix-Umgebungsvariable MATLABPATH eingetragenen Verzeichnisse gibt.
Ein eigenes Funktionen-File wird wie eine eingebaute Funktion behandelt.

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 $ n!$ rekursive berechnet. Wenn die Eingabe nicht korrekt ist, wird die MATLAB-Funktion `error' aufgerufen, die eine Fehlermeldung auf den Bildschirm schreibt und dann die Ausführung abbricht.
   >> 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 $ n$ und $ y$ lokal. Sie werden durch who nicht aufgelistet, wenn sie nicht schon vor dem Aufruf von fak definiert wurden. In letzterem Fall stimmen ihre Werte im Allg. nicht mit den in der Funktion zugewiesenen Werten überein.o



Unterabschnitte
Peter Arbenz 2008-09-24