Anonymous Functions
Anonymous functions can be defined anywhere inside a script.
myfunc=@(inputVars) expression
resultant=@(x,y) sqrt(x^2+y^2)
resultant(5,12) => 13
b=1
silly=@(x) x+b
b=2
silly(9)
returns a value of 10, not 11.
Local variables used by an anonymous function cannot be defined later. If they do not exist
at the time the function is defined, an error will occur when the function is used.Anonymous functions also provide a means of passing additional parameters to a function that is to be used as an argument. Consider the following scenario:
function result = ObjFunc(p, data)
...
end
init = [5,3]
data = [2,3,5,7];
[x,fval] = fminunc(@ObjFunc, init)
Passing ObjFunc to fminunc will not work because fminunc expects ObjFunc to have one argument. The solution is to use an anonymous function, like this:
[x,fval] = fminunc(@(x) ObjFunc(x, data), init)
The anonymous function satisfies the requirement of having one argument (x), and allows the second argument (data) to be passed to ObjFunc. This can also be accomplished using a function handle for the anonymous function, as follows:
handle = @(x) ObjFunc(x, data)
[x,fval] = fminunc(handle, init)