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