Sie sind auf Seite 1von 3

Function Handles

Function Handles
Oft will man Funktionen nicht nur aufrufen, sondern als Parameter nutzen, die spter aufgerufen werden. Dafr gibt es Function Handles, die man ganz analog zu Funktionspointern in C verstehen kann. Function Handles sind Referenzen auf Funktionen und damit ein eigenstndiger Datentyp in Matlab. Contents Der @ Operator Anwendungsbeispiel: Ein Funktions-Plotter Anonyme Funktionen Der @ Operator Function Handles erzeugt man, indem man einem Funktionsnamen ein @ voranstellt.
sin_handle = @sin; disp(class(sin_handle));

function_handle

Die handle lt sich wie die Originalfunktion benutzen:


sin_handle(pi)

ans = 1.2246e-016

Anwendungsbeispiel: Ein Funktions-Plotter Hier ist ein einfaches Anwendungsbeispiel: Ein universeller Funktionsplotter, der eine Handle einer Funktion erhlt und die Funktion graphisch darstellt
type funcPlotter;

function funcPlotter(func_handle) %FUNCPLOTTER: Spielzeug-Funktionsplotter, dient zur Illusttrierung von %Funktions-Handles % Argument Check if ~isequal(class(func_handle), 'function_handle') error('Argument muss eine Function Handle sein!'); end % Extrahieren des Funktionsnamen fr Plot Labels func_name = func2str(func_handle); % Plot der Function x = linspace(0, 5); fx = func_handle(x); plot(x, fx, 'r-.'); xlabel('x'); ylabel(func_name); title(sprintf('Plot der Funktion %s', func_name));

Der Aufruf bentigt nicht die Originalfunktion, sondern eine Handle. Damit wird verhindert, dass die Funktion schon bei der bergabe ausgewertet wird:

http://www.hs-augsburg.de/~kjuen/html/ml14_function_handles.html[26.04.2009 11:06:37]

Function Handles

funcPlotter(@sin);

Anonyme Funktionen Angenommen, wir mchten sin*cos in unseren Funktionsplotter bergeben. Es existiert keine m-Funktion, deren Handle wir bergeben knnen. Entweder wir erzeugen ein m-file, oder erstellen eine anonyme Function Handle.
sincos = @(x) sin(x) .* cos(x); class(sincos) % handle auf anonyme Funktion

ans = function_handle

Diese Handle kann dann wie eine Funktion genutzt werden oder in den Plotter bergeben werden:
sincos(pi) funcPlotter(sincos);

ans = -1.2246e-016

http://www.hs-augsburg.de/~kjuen/html/ml14_function_handles.html[26.04.2009 11:06:37]

Function Handles

Published with MATLAB 7.5

http://www.hs-augsburg.de/~kjuen/html/ml14_function_handles.html[26.04.2009 11:06:37]