transforming an m-file to an anonymous or inline function

3 views (last 30 days)
Hi, I have the following function
function out=myfun(x,y,z)
aa=h1(x,y,z);
dd=h2(x,y,z);
out=[x(1)+y(2)
x(3)+z(2)
x(1)+aa
x(3)+dd*y(1)];
Is there any way I can write this function either as inline or anonymous? that is without writing an m-file?
Thanks, J.

Accepted Answer

Daniel Shub
Daniel Shub on 24 Aug 2011
You need to get rid of the temp variables aa and dd:
aa = @(x,y,z)(h1(x,y,z));
dd = @(x,y,z)(h1(x,y,z));
fcn = @(x,y,z)([x(1)+y(2); x(3)+z(2); x(1)+aa(x,y,z); x(3)+dd(x,y,z)*y(1)]);
  2 Comments
Junior
Junior on 24 Aug 2011
The very reason I am post the question is because I don't want to insert for aa and dd, which are themselves very complicated expressions. For simplicity, I just defined them as h1(x,y,z) and h2(x,y,z). Thanks, J.
Daniel Shub
Daniel Shub on 24 Aug 2011
See my edit. You can keep splitting up h1 and h2 into functions that are whatever size you want. The key is you cannot have any temp variables.

Sign in to comment.

More Answers (1)

Fangjun Jiang
Fangjun Jiang on 24 Aug 2011
It is not recommended to use anonymous function due to the fact that the function has so many characters. If you wan to make it in line, just remove the first line 'function out=myfun(x,y,z)' and copy the rest of the code into your other M-script or M-function.
  4 Comments
Fangjun Jiang
Fangjun Jiang on 24 Aug 2011
Should be subfunctions in my previous comments. Search subfunctions in document for details.
Daniel Shub
Daniel Shub on 24 Aug 2011
If your m-file is a script and you want to use a function that requires a function handle (e.g., fminsearch) then you need a second m-file with your function or an anonymous function.

Sign in to comment.

Categories

Find more on Function Creation in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!