Function Handles
Transcrição
Function Handles
Function Handles Function Handles Oft will man Funktionen nicht nur aufrufen, sondern als Parameter nutzen, die später aufgerufen werden. Dafür gibt es Function Handles, die man ganz analog zu Funktionspointern in C verstehen kann. Function Handles sind Referenzen auf Funktionen und damit ein eigenständiger 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 läßt 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 erhält 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 für 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 benötigt 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 möchten sin*cos in unseren Funktionsplotter übergeben. Es existiert keine m-Funktion, deren Handle wir übergeben können. 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]