Converting Cell array of function handle into a single array of function handle

牧云@^-^@ 提交于 2019-12-10 18:15:02

问题


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


来源:https://stackoverflow.com/questions/18607678/converting-cell-array-of-function-handle-into-a-single-array-of-function-handle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!