# Anonymous Functions

Anonymous functions can be defined anywhere inside a script.

They are created using the following syntax:
myfunc=@(inputVars) expression
Anonymous functions can be used like any other functions.
resultant=@(x,y) sqrt(x^2+y^2)
resultant(5,12) => 13
However, the values of any local variables used by the anonymous function are copied at the time the function is defined, as shown below:
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)