【发布时间】:2016-07-17 07:32:15
【问题描述】:
我有一个函数向量,我正在尝试从中获取子集。我将向量中的函数转换为一个元胞数组,以便可以对其进行索引。这是脚本
coeff1 = 1;
coeff2 = 2;
coeff3 = 3;
F = @(x) [...
coeff1*x(1)*x(4); ...
0; ...
coeff2*x(3); ...
coeff3*x(7)*x(3) ...
];
G = regexp(func2str(F), ';|\[|\]', 'split');
H = cellfun(@str2func, strcat(G{1}, G(2:end-1)), 'uni', 0);
F2 = @(y)cellfun(@(x)x(y),H(2:4));
F2(rand(1,4));
但是在测试函数时出现错误。它说coeff1 未定义。不知何故,解析的函数无法识别它。有什么问题?
提前致谢。
【问题讨论】:
-
澄清一下,
F不是函数向量,而是返回向量的函数 -
那么为什么索引
F的输出还不够呢? -
@zeeMonkeez 感谢您的更正!索引 F 的输出是不够的。我需要子集,因为我正在测试需要它的算法。
-
也许你可以解释一下潜在的问题。
regexping 函数字符串并将它们重新组合在一起似乎非常老套且不可靠 -
此行为在the documentation:
Function handles created using str2func do not have access to variables outside of their local workspace or to nested functions.And there is an example 中明确说明。
标签: regex string matlab function string-concatenation