我正在尝试在 maple 中编写一个程序,将函数 f 近似为区间 [-1..1] 上的 n 次 Chebyshev 多项式,而不使用任何与 Chebyshev 多项式相关的内置 Maple 函数。 http://en.wikipedia.org/wiki/Chebyshev_polynomials
例如,一个过程 CPlot 以便 CPlot(f,[2,3,4]) 在 [-1, 1] 上生成函数 f 的图,并以不同的颜色显示其第 2、3 和第四切比雪夫近似。它应该适用于任意长度的任意列表作为第二个参数。这是我当前的代码:
ChebT := proc(n,x)
local i,firstT,secondT,generalT;
firstT := 1;
if n=0 then return firstT end if;
secondT := x;
if n=1 then return secondT end if;
for i from 1 to n-1 do
generalT := 2*x*secondT - firstT;
firstT := secondT;
secondT := generalT;
end do;
return expand(secondT)
end proc:
CPlot:=proc(f,L::list)
local j, K,num_ip,num_prj,c,chb;
K:=f(x);
for j from 1 to nops( L) while j<(nops(L)+1) do
num_ip := (f,g) -> evalf(Int(f*g/sqrt(1-x^2),x=-1..1)*2/Pi);
num_prj := (f,n) -> seq(num_ip(f,ChebT(i,x)),i=0..n);
c := num_prj(f(x),L[j]);
chb := c -> c[1]/2 + sum(c[i]*ChebT(i-1,x),i=2..nopc(c)); *
K:=K, chb([c]);
end do;
plot([K], x=-1..1, colour=[green, red, blue, yellow],linestyle=[1,2,3,4], thickness=[5,2,3,4]);
end proc:
尝试时:
f:=x->x^2:
切比图(f,[2,5,10]);
我得到“错误,(在 ChebT 中)for 循环中的最终值必须是数字或字符”*
如果我为切比雪夫多项式使用内置函数 T,通过调用 with(orthopoly,T) 而不是 ChebT,我之前测试过它并且它有效,图表上的所有图看起来都一样。有什么建议么?