具有现有工作区功能的 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);
希望我能把这个说得尽可能清楚,因为我自己也很困惑。我整理了一个简单的例子方便大家讨论。
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);