Search code examples
matlabanonymous-functionfunction-handle

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


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.


Solution

  • 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.