这是拉格朗日插值的代码。我正在调用一个名为polyinterp
的函数来执行插值。
我试图在[ - π,π]中逼近罪( x )。 如果我使用12个点进行插值,我得到的结果很好。 然而,如果我尝试使用200点进行插值,我无法理解图形,因为绿线应该绘制罪( x ),蓝色圆圈表示使用的点。
x=linspace(-pi,pi,200)
target=sin(x);
figure('name', 'Polynomial Interpolation 200 points');
u=-pi:0.01:pi
output_2 = polyinterp(u,x,target);
plot(x,target,'o',u,output_2,'-')
axis([-pi,pi, -1,1]);
xlabel('x (radians)'); % label the x-axis
ylabel('sine function'); % label the y-axis
title('sin(x)');
对于12点插值,我改变了这一行:
x=linspace(-pi,pi,12)
任何帮助都将受到高度赞赏。感谢
答案 0 :(得分:1)
您的问题可能是由于浮点精度有限造成的。我不知道究竟polyinterp
究竟是什么,但通常n个点定义了第(n-1)阶多项式。在你的情况下它是第199顺序。这意味着它有一个x ^ 199项,x的范围是-3到3.检查eps(3.^199)
,你会得到由浮点运算引起的巨大精度误差。