实验题目
高次插值的龙格现象(Runge)实验
1.实验目的
通过观察高次插值的拉格朗日插值多项式在一区间上的振荡现象,了解龙格现象的产生机理以及高次插值的局限性。
2.实验要求
给定函数。分别取f(x)的5次、20次拉格朗日插值多项式,并在同一坐标系下绘制出三者的图像。
3.实验步骤
(1).首先编写拉格朗日插值函数的脚本文件。在Matlab主界面通过新建脚本创建一个脚本文件,并将其命名为lagrange.m。该函数脚本主要功能为:直接输出所求得经过了(x,y)点的高次插值函数表达式在插值点xx处的函数值。
代码如下:
%拉格朗日插值命令
function yy=lagrange(x,y,xx)
%Lagrange 插值,求数据(x,y)所表达式的函数在插值点xx处的插值
m=length(x);
n=length(y);
if m~=n
error('向量x,y长度必须一致');
end
s=0;
for i=1:n
t=ones(1,length(xx));
for j=1:n
if j~=i
t=t.*(xx-x(j))/(x(i)-x(j));
end
end
s=s+t*y(i);
end
yy=s;
将函数脚本文件保存在工作目录下,因为一会需要调用。
(2).继续在matlab中的命令行窗口直接编写代码,实现对要求函数求其拉格朗日插值多项式中各插值点函数值以及绘制相对应的函数图像。
代码如下:
%先绘制原函数图像
fplot(@(X) 1./(1+25.*X.^2),[-1 1],'r')
hold on
%对坐标图标注
title('龙格现象');
xlabel('x');
ylabel('y');
%5次插值
X5=linspace(-1,1,6);
Y5=1./(1+25.*X5.^2);
x5=[-1:0.01:1];
y5=lagrange(X5,Y5,x5);
plot(x5,y5,'g-o','MarkerIndices',1:10:length(x5));
hold on
%20次插值
X20=linspace(-1,1,21);
Y20=1./(1+25.*X20.^2);
x20=[-1:0.01:1];
y20=lagrange(X20,Y20,x20);
plot(x20,y20,'b--')
4.实验结果
在进行5次和20次拉格朗日插值多项式的计算后,我们得到了5次插值多项式和20次插值多项式在[-1,1]区间上等距取100个点时的函数值。在同一坐标系下绘制三条曲线的图像,如图所示(自己做了出图吧)
从图中可以看出,在节点附近,20次插值多项式出现了明显的振荡现象,而5次插值多项式则没有明显的振荡。这是因为高次插值多项式在节点附近可能会出现龙格现象,导致插值多项式在节点附近呈现出明显的振荡现象。
为了避免高次插值多项式出现龙格现象,我们应该尽可能少地使用插值多项式,或者采用其他插值方法。