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
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
http://www.hs-augsburg.de/~kjuen/html/ml14_function_handles.html[26.04.2009 11:06:37]