1 问题描述
对函数
进行Lagrange插值.
插值区间:
.
插值节点:n=10+1,n=20+1.
测试数据:N=400+1
2 Runge现象
3 分析
- 从上述两个例子中的误差图像可以看出:存在高次插值的病态问题,也即龙格现象[1]。由此可见,采用拉格朗日多项式插值时,插值多项式p(x)不一定收敛于f(x);
- 由上图可以看出随着等分值的值增大拟合精度会越来越小,但是在函数的两边值会出现巨变,这也就是所谓的龙格现象;
4 误差上界推导[1]
5 相关程序
function interpolationErrorB()
%{
程序功能:
1、使用f(x)=sin(x) ,在区间[-5, 5]上测试Lagrange插值函数, 节点数分别为n=1+10,n=1+20;
2、调用并测试Lagrage函数的正确性,在区间[-5, 5]上测试N=400+1个等距节点;
3、绘制误差图
%}
clear,clc,close all
n=[ 10 ;20 ];
N=400; %测试点数量
xmin=-5;
xmax=5;
m=length(n) ;
sys=zeros(N+1,2);
for j=1:m
xi=linspace(xmin, xmax, n(j)+1);
fi=fx(xi); %生成节点
x=linspace(xmin, xmax, N+1);
sys(:,1)=x' ; %sys第一列表示插值点
for k=1:N+1
sys(k, 2 )=Lagrange( xi, fi ,x(k)) ; %sys第一列表示插值点
end
drawOne( xi, fi, sys) %绘制插值图像
drawError( sys) %绘制误差图像
end
end
%绘制误差图像
function drawError( sys)
figure
x=sys(:,1);
y=sys(:,2);
f=fx( x );
error=abs( y- f); %计算误差
plot(x, error, 'b-','linewidth',1)
% legend('The interpolant function' ,'Evaluation points' , 'Location', 'best') %, 'Location', 'best'
title(' Interpolation Error ')
end
%绘制插值图像
function drawOne( xi, fi, sys)
figure
x=sys(:,1);
y=sys(:,2);
plot(x, fx(x), 'b-','linewidth',2)
hold on
scatter(x, y,'ro', 'linewidth',0.1)
legend('The data generating function f(x)' , 'Interpolating polynomial p(x)' , 'Location', 'best') %, 'Location', 'best'
title( ' Interpolation Result Test ')
end
%插值测试函数
function y=fx( x )
% y=sin(x);
y=1./(1+x.^2);
end
function y=Lagrange(xi, fi, x)
% data: (xi,fi), i=0, ...,n
% evaluation points: x
% return: y=p(x), where p is the interpolant
% Sheng Xu, SMU Math, 2014
% xi=[0.3,0.4,0.55,0.65,0.80,1.05];
% fi=[0.30163,0.41075,0.57815,0.69675,0.87335,1.18885];
% X=[0.36,0.4,0.42,0.75,0.98];
% x=0.98;
n=length(xi)-1;
y=zeros(size(x));
for k=0:n
num=ones(size(x));
den=1;
for j=0:k-1
num=num.*(x-xi(j+1));
den=den*(xi(k+1)-xi(j+1));
end
for j=k+1:n
num=num.*(x-xi(j+1));
den=den*(xi(k+1)-xi(j+1));
end
l=num/den;
y=y+fi(k+1).*l;
end
参考
- ^汪巧云.Lagrange插值多项式逼近误差上界系数的改进[D].安徽省合肥市:安徽大学,2011.