拉格朗日插值matlab_数值计算(三十六)Lagrange插值的Runge现象

c33622cbd5e98deec33f628dadc6bcc6.png

1 问题描述

对函数

进行Lagrange插值.

插值区间:

.

插值节点:n=10+1,n=20+1.

测试数据:N=400+1

2 Runge现象

5c0c7ed9d9511e67ae1db322ab984d6f.png

d24e6676ebb78d49e68550b85c2b4b94.png

0ea5052b271aef9d7cf2b6581c3cf8de.png

6cb8b6b77dd7ae279fd9d4d394958e3a.png

3 分析

  • 从上述两个例子中的误差图像可以看出:存在高次插值的病态问题,也即龙格现象[1]。由此可见,采用拉格朗日多项式插值时,插值多项式p(x)不一定收敛于f(x);
  • 由上图可以看出随着等分值的值增大拟合精度会越来越小,但是在函数的两边值会出现巨变,这也就是所谓的龙格现象;

4 误差上界推导[1]

e426801b68db34bd3b65c4f2c8418d3c.png

b3a2a9f9b2015000bcda3443f3856b8d.png

05fc4baf3749500400de1869e6d80c5c.png

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

参考

  1. ^汪巧云.Lagrange插值多项式逼近误差上界系数的改进[D].安徽省合肥市:安徽大学,2011.
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值