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]