Evaluating a cell array of function handles
13 views (last 30 days)
Show older comments
In the following code I assemble a sequence of polynomials (the Chebyshev polynomials, to be exact) symbolically, and then use matlabFunction() to convert each symbolic expression into a function handle. Each function handle is then placed in the cell array.
N = 10;
C = cell(N,1);
syms y;
T = sym(zeros(N,1));
T(1) = 1;
T(2) = y;
C{1} = matlabFunction(T(1));
C{2} = matlabFunction(T(2));
for n = 2:1:N-1
T(n+1) = 2*y*T(n) - T(n-1);
C{n+1} = matlabFunction(T(n+1));
end
evalArray = @(y)cellfun(@(f)f(y),C);
evalArray(3)
However, evalArray(3), which is intended to evaluate each polynomial at y=3, gives the error: "Error using symengine>@()1.0;Too many input arguments."
Any suggestions? Thanks all for your help.
0 Comments
Accepted Answer
Matt Fig
on 9 Oct 2012
Edited: Matt Fig
on 9 Oct 2012
Exactly as you have made it, C{1} is a function that takes no input arguments.
Try this instead:
C{1} = matlabFunction(T(1),'vars',y);
2 Comments
Matt Fig
on 9 Oct 2012
Edited: Matt Fig
on 9 Oct 2012
matlabFunction is even smarter than that!
T(1) = 1 + 0*y; % Fails to produce f = f(y)
T(1) = y - 2 + 3 - y; % Also fails!
I tried these and other ways of "tricking" the conversion, without success. Finally, I checked the doc for matlabFunction... d'oh.
More Answers (0)
See Also
Categories
Find more on Symbolic Math Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!