Function handles, as they are referred to in Matlab, are no
more than pointers to functions. Given a function `f`,
`@f` returns a pointer to that function, just like C.

Unlike C, to dereference the point, you must use the function
`feval` which takes as its first argument a function
pointer, and as subsequent arguments, arguments to be given to the
function. For example, the following two are identical:

>> sin(3.2) ans = -0.0584 >> feval( @sin, 3.2 ) ans = -0.0584

The function `feval` passes on the variable `nargout`
as well:

>> [a b] = feval( @size, [1 2 3; 4 5 6] ) a = 2 b = 3 >> feval( @size, [1 2 3; 4 5 6] ) ans = 2 3

The following function takes as its input a function
pointer and two end points. It evaluates the function at
each of 100 points between `a` and `b` and
returns the minimum and maximum. Save it to a file `fnminmax.m`:

function [m, n] = fnminmax( f, a, b ) % FNMINMAX Minumum and maximum of a function by sampling x = linspace( a, b, 100 ); y = ( f, x ); if nargout == 2 m = min( y ); n = max( y ); else m = [min(y), max(y)]; end

We can now call:

>> fnminmax( @sin, 2, 4 ); ans = -0.7568 0.9093

Now, if yhou wanted to find the sampled minimum and
maximum of `x^2 + 3*sin(x)*x + sin(x)^2`, you would have
to create a file `f.m`:

function y = f(x) % F Evaluate x^2 + 3*sin(x)*x + sin(x)^2 y = x.^2 + 3*sin(x).*x + sin(x).^2;

and then you could call:

>> fnminmax( @f, -2, 5 ) ans = 0.0020 11.5357 >> x = linspace( -2, 5, 100 ); >> y = feval( @f, x ); >> plot( x, y )