将函数句柄的Cell数组转换为单个函数句柄数组

时间:2013-09-04 07:18:49

标签: matlab anonymous-function function-handle

我需要建立一个非线性方程的向量,用于fsolve来解决它。但是我应该在每次循环迭代中制作向量的每个元素。我怎么能组成这样的载体?实际上,我不能使用单元阵列。如何将像{@(x) x(1)+x(2)^2; @(x) x(1)-2*(x(2))}这样的单元格数组转换为像@(x) [ x(1)+x(2)^2 ; x(1)-2*(x(2))]这样的数组?因为我想用fsolve来解决非线性方程组。

2 个答案:

答案 0 :(得分:2)

如果func2str是包含函数句柄的单元格数组,请使用str2func获取字符串中的函数定义并使用A来获取所需的函数:

B = strcat(regexprep(cellfun(@func2str, A, 'uni', 0), '^@\(x\)', ''), ';');
F = str2func(strcat('@(x) [', B{:}, ']'));

现在F包含所需的函数句柄。

答案 1 :(得分:1)

为何转换?为什么不使用像

这样的东西
% Your cell array
Fs = {@(x) x(1)+x(2)^2; @(x) x(1)-2*x(2)};

% Just use cellfun
solution = fsolve(@(y) cellfun(@(x) x(y), Fs), [0 0])