Multiple anonymous functions combined
3 views (last 30 days)
Show older comments
Hi,
I am trying ultimately to be able to define a new anonymous function from two previously defined functions, and pass this into a function. Say, for simplicity, I define:
D=@(d) d^2
C=@(c) c^c
then I try to define:
E=@(d,c) D(d)*C(c)
then this works. I can put in values of d and c and get (d^2)*(c^c) as an output from E. I am trying to understand how MATLAB defines the new function E. If I delete functions D and C from the workspace, and continue to call E(1,2) etc then E will continue to produce results, so it's as if MATLAB has stored C and D inside E itself.
However, if I pass E into a new function and ask it to calculate E(1,2) inside there - I get an error. (Undefined function or method 'mtimes' for input arguments of type 'function_handle'). So it's as if MATLAB has now forgotten D and C, so they are not built into E.
Can someone explain what is happening here? I'm just trying to grasp how these functions are working.
Thanks!
1 Comment
Matt J
on 18 Mar 2013
Edited: Matt J
on 18 Mar 2013
However, if I pass E into a new function and ask it to calculate E(1,2) inside there - I get an error. (Undefined function or method 'mtimes' for input arguments of type 'function_handle').
This is not enough information. We need to know not just what error message you are seeing, but what particular statement in your code produces it. Please copy/paste the complete error message, ideally from a small example that we can run/reproduce it with.
Answers (2)
Azzi Abdelmalek
on 18 Mar 2013
Edited: Azzi Abdelmalek
on 18 Mar 2013
You should pass E through input argument of your function
Example
function y=yfcn(a,b,f)
y=f(a,b)+500
Then call your function
out=yfcn(2,3,E)
2 Comments
Azzi Abdelmalek
on 18 Mar 2013
Edited: Azzi Abdelmalek
on 18 Mar 2013
For me it's working.Also it should be
function out=Newfunction(E,c,d)
out=E(c,d)
end
Sean de Wolski
on 18 Mar 2013
You can use the function functions() to figure out the workspace of a E. Here is an example, as for the error - I cannot reproduce it:
function examplefh
D=@(d) d^2;
C=@(c) c^c;
E=@(d,c) D(d)*C(c);
passedInto(E)
ef = functions(E)
ef.workspace{1}
function passedInto(E)
E(1,2)
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!