Beruflich Dokumente
Kultur Dokumente
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]