Evaluating a cell array of function handles

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.

 채택된 답변

Matt Fig
Matt Fig 2012년 10월 9일
편집: Matt Fig 2012년 10월 9일

0 개 추천

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

Right. By default matlabFunction searches for variables in the symbolic code and uses that many variables as input; since "1" is constant (0 variables), that is 0 inputs; Matt's solution shows how to force one input.
Matt Fig
Matt Fig 2012년 10월 9일
편집: Matt Fig 2012년 10월 9일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

질문:

2012년 10월 9일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by