具有现有工作区功能的 Matlab str2func

Matlab str2func with existing workspace function

希望我能把这个说得尽可能清楚,因为我自己也很困惑。我整理了一个简单的例子方便大家讨论。

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

这将 return 出错,因为 "str2func" 在调用 fcn 时不会保留工作区变量 a。这在 documentation 中突出显示。这个问题有解决办法吗?

注意:将 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);