Programming and Data Types | ![]() ![]() |
Examples of Function Handle Evaluation
This section provides two examples of how function handles are used and evaluated.
Example 1 - A Simple Function Handle
The following example defines a function, called plot_fhandle
, that receives a function handle and data, and then performs an evaluation of the function handle on that data.
When you call plot_fhandle
with a handle to the sin
function and the argument shown below, the resulting evaluation produces the following plot.
Example 2 - Function Handles and Subfunctions
The M-file in this example defines a primary function, fitcurvedemo
, and a subfunction called expfun
. The subfunction, by definition, is visible only within the scope of its own M-file. This, of course, means that it is available for use only by other functions within that M-file.
The author of this code would like to use expfun
outside the confines of this one M-file. This example creates a function handle to the expfun
subfunction, storing access information for the subfunction so that it can be called from anywhere in the MATLAB environment. The function handle is passed to fminsearch
, which successfully evaluates the subfunction outside of its usual scope.
The code shown below defines fitcurvedemo
and subfunction, expfun
. Line 6 constructs a function handle to expfun
and assigns it to the variable, fun
. In line 16, a call to fminsearch
passes the function handle outside the normal scope of a subfunction. The fminsearch
function uses feval
to evaluate the subfunction through its handle.
1 function Estimates = fitcurvedemo 2 % FITCURVEDEMO 3 % Fit curve to data where user chooses equation to fit. 4 5 % Define function and starting point of fitting routine. 6 fun = @expfun; 7 Starting = rand(1, 2); 8 9 % First, we create the data. 10 t = 0:.1:10; t=t(:); % to make 't' a column vector 11 Data = 40 * exp(-.5 * t) + randn(size(t)); 12 m = [t Data]; 13 14 % Now, we can call FMINSEARCH: 15 options = optimset('fminsearch'); % Use FMINSEARCH defaults 16 Estimates = fminsearch(fun, Starting, options, t, Data); 17 18 % To check the fit 19 plot(t, Data, '*') 20 hold on 21 plot(t, Estimates(1) * exp(-Estimates(2) * t), 'r') 22 xlabel('t') 23 ylabel('f(t)') 24 title(['Fitting to function ', func2str(fun)]); 25 legend('data', ['fit using ', func2str(fun)]) 26 hold off 27 28 % ---------------------------------------------------------- 29 30 function sse = expfun(params, t, Data) 31 % Accepts curve parameters as inputs, and outputs fitting the 32 % error for the equation y = A * exp(-lambda * t); 33 A = params(1); 34 lambda = params(2); 35 36 Fitted_Curve = A .* exp(-lambda * t); 37 Error_Vector = Fitted_Curve - Data; 38 39 % When curve fitting, a typical quantity to minimize is the sum 40 % of squares error 41 sse = sum(Error_Vector .^ 2);
![]() | Evaluating a Function Through Its Handle | Displaying Function Handle Information | ![]() |