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



我需要建立一个非线性方程的向量,用于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来求解非线性方程组。

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

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

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

为什么转换?为什么不使用之类的东西

% 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])

最新更新