2010-09-09 56 views
2

我有一个相当复杂的函数,我想写作一个匿名函数。多步匿名函数

它看起来是这样的:

function Answer = MatlabFunction(x) 
a=4*x; 
b=sin(a); 
c=cos(b); 
Answer = c; 

我不知道但是如何把这个变成一个匿名函数。有没有办法做到这一点,而不写作几个级联功能?

回答

3

有两种方式:

要么,您保存功能MatlabFunction的MATLAB的路径,并定义匿名函数作为

myFun = @MatlabFunction; 

或者,您直接定义功能

myFun = @(x)cos(sin(4*x)); 
+0

是否有不同的方式吗?我想在for循环中设置要在每个循环中更改函数部分的函数,因此我无法使用外部文件。我的实际功能要复杂得多,所以我不能把它合并成一行。 – Brian 2010-09-09 01:05:47

+1

@Brian:我在这里回答了你的其他问题:http://stackoverflow.com/questions/3673112/change-matlab-function-in-loop/3673185#3673185 – Jonas 2010-09-09 01:36:44

+0

你可以将几个任意选择的函数句柄传递给你的'worker'功能。 – zellus 2010-09-09 06:12:25

0

Matlab由于不支持多步匿名函数而臭名昭着。然而,存在一些丑陋的技巧来规避这种限制。 http://www.mathworks.com/matlabcentral/answers/50195-is-it-possible-to-write-several-statements-into-an-anonymous-function提出几点的,e.g:

一个if/else语句可以在函数形式通过编码:

FHEXEC = @(FH) FH(); 
FHSELECT = @(TF,CONDITION) TF(CONDITION==[true,false]); 
IF = @(CONDITION,TRUEFUNC,FALSEFUNC) FHEXEC(FHSELECT([TRUEFUNC,FALSEFUNC],CONDITION))