具有现有工作空间函数的Matlab str2func

具有现有工作空间函数的Matlab str2func,matlab,anonymous-function,Matlab,Anonymous Function,希望我能尽可能清楚地说明这一点,因为我自己也很困惑。我举了一个简单的例子以便于讨论 a = @(c) 1 + c; fcn = str2func('@(x) x+a(x)'); 这将返回一个错误,因为调用fcn时,“str2func”不保留工作区变量a。这在中突出显示。有解决这个问题的办法吗 注意:将a硬编码到字符串中是不可接受的答案。要允许在fcn中计算自定义函数句柄,可以将其作为输入参数传递: a = @(c) 1 + c; fcn = str2func('@(x,a) x+a(x)');

希望我能尽可能清楚地说明这一点,因为我自己也很困惑。我举了一个简单的例子以便于讨论

a = @(c) 1 + c;
fcn = str2func('@(x) x+a(x)');
这将返回一个错误,因为调用
fcn
时,“str2func”不保留工作区变量
a
。这在中突出显示。有解决这个问题的办法吗


注意:将
a
硬编码到字符串中是不可接受的答案。

要允许在
fcn
中计算自定义函数句柄,可以将其作为输入参数传递:

a = @(c) 1 + c;
fcn = str2func('@(x,a) x+a(x)');

>> fcn(3,a)
ans =
     7
如果希望
fcn
只有一个参数,则需要分两步定义它:

a = @(c) 1 + c;
tmp = str2func('@(x,a) x+a(x)');
fcn = @(x)tmp(x,a);

首先,为什么要使用str2func?在你的例子中,这当然是不必要的。@David我很清楚这一点。这是一个展示问题的简单示例。不管我想做什么,工作区中是否有从现有变量/函数构建函数的变通方法?问完整的问题,你可能会得到更好的整体解决方案!你的意思是像
a{1}=@(x)1+x
a{2}=@(x)x.^2
f=@(x)x+a{i}(x)
。如果有帮助的话,我会用一个具体的例子来编辑我的问题。处理匿名函数的单元格数组不是很难,因此我的评论。