Erweiterte Sprachfeatures vereinfachen das Rechnen mit Funktionen

Mit Funktionen so einfach rechnen wie mit Variablen

15. September 2008, 14:44 Uhr | Steve Johnson
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Mit Funktionen so einfach rechnen wie mit Variablen

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.

passend zum Thema

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
hat an der Columbia University im Fach Mathematik promoviert. Er verbrachte annähernd 20 Jahre bei den Bell Labs und gehörte zu dem Team, das das ursprüngliche Unix-Betriebssystem entwickelte. Von ihm stammen z.B. die Programme Yacc und Lint. Sein „Portable C Compiler“ unterstützte die Verbreitung von C unter Unix. Nach 15 Jahren als Berater im Silicon Valley, u.a. für Transmeta, arbeitet er nun bei The Mathworks, wo er sich mit Programmiersprachen beschäftigt und den ersten Matlab-zu-C-Compiler schrieb.
Steve.Johnson@mathworks.com


  1. Mit Funktionen so einfach rechnen wie mit Variablen
  2. Mit Funktionen so einfach rechnen wie mit Variablen
  3. Mit Funktionen so einfach rechnen wie mit Variablen

Jetzt kostenfreie Newsletter bestellen!