I need to build up a vector of non-linear equations to be used in fsolve
to solve it. But I should make each element of the vector in each loop iteration. How can I make up such a vector? In fact, I can not use cell array. How can I convert a cell array like {@(x) x(1)+x(2)^2; @(x) x(1)-2*(x(2))}
into an array like @(x) [ x(1)+x(2)^2 ; x(1)-2*(x(2))]
? Because I want to use fsolve
to solve the system of non-linear equations.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Use func2str
to get the function definitions in string and use str2func
to get the desired function, if A
is the cell array containing the function handles:
B = strcat(regexprep(cellfun(@func2str, A, 'uni', 0), '^@\(x\)', ''), ';');
F = str2func(strcat('@(x) [', B{:}, ']'));
Now F
contains the desired function handle.
回答2:
Why convert? Why not use something like
% 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])