Mit früheren Matlab-Versionen musste man dazu erst pp separat erzeugen. Hält man sich dagegen an das Muster der Function-Factory, so kann man dem Endanwender gegenüber den Wert und sogar die Existenz von pp vollständig verbergen:
function fh = splinefun(X, Y)
pp = spline(X, Y);
fh = @(x) ppval(pp, x);
end
fh ist ein Function-Handle der Interpolation, das so aufgerufen wird:
y = fh(x);
Damit ist pp für den Anwender von fh komplett verborgen.
Addition von Funktionen
Statt der bereits erwähnten doppelt verschachtelten anonymen Funktion fadd kann man auch eine Standard-Funktion plus schreiben:
function h = plus(f, g)
h = @(x)f(x)+g(x);
end
Legt der Nutzer nun diese Funktion im passenden Verzeichnis (@function_ handle) im Matlab-Pfad ab, dann hat er damit die Addition von Function-Handles durch das in Matlab praktizierte Operator-Overloading definiert. Er kann nun einfach in die Kommandozeile eingeben:
h = @sin + @cos;
Ebenso könnte er definieren:
h = @sin + 1;
und
h = @sin * @cos;
Mit dieser Methode lassen sich Funktionen genauso behandeln wie Variablen, was in Programmiersprachen wie Fortran, C++ oder Java nicht möglich ist.
Objekte und verschachtelte Funktionen
Die geschilderte Ausdehnung arithmetischer Operationen auf Funktionen ist möglich, weil Matlab im Kern ein vollständiges Objektsystem enthält. Dieses System wird zwar von den meisten Anwendern nicht direkt genutzt, gestattet Matlab aber die unkomplizierte Interaktion mit Java oder C++ und ist zudem das Rückgrat vieler leistungsfähiger Anwendungen.
Ein weiteres in diesem Zusammenhang erwähnenswertes Feature von Matlab sind verschachtelte Funktionen oder Unterfunktionen. Mit ihrer Hilfe lassen sich z.B. „Closures“ implementieren, die Programmierern anspruchsvoller Anwendungen die Möglichkeit bieten, komplexe Datenstrukturen zu abstrahieren und mehr Leistung zu erzielen. Die zentralen Anliegen von Programmierern aus Wissenschaft und Technik sind heute Produktivität, Exaktheit, Wartungsfreundlichkeit und Leistung. Erweiterte Sprachfeatures können zum Erreichen dieser Ziele sehr hilfreich sein. Besonders wertvoll ist hier die Möglichkeit, Funktionen auf eine Art und Weise zu erzeugen und zu verwenden, die der gewohnten schriftlichen mathematischen Notation entspricht. jk
![]() | Steve Johnson |