Evaluating a cell array of function handles

조회 수: 4 (최근 30일)
Matt
Matt 2012년 10월 9일
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일
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
Walter Roberson
Walter Roberson 2012년 10월 9일
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개)

카테고리

Help CenterFile Exchange에서 Number Theory에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by