MATLAB编写拉格朗日插值与龙格现象

插值与龙格现象

在区间[-1,1]上对函数f(x)=\frac{1}{1+25x^{2}} ,选取不同的插值节点构造插值多项式,比较他们的误差。

(1) 取等距节点,n=5,10,15,20。

(2) 取节点x_{k}=cos\frac{k\pi }{n} ,k=0,1,2,…n;分别取n=5,10,15,20能有什么样的结论。

1.数学原理

1.1、拉格朗日(Lagrange)插值原理

拉格朗日(Lagrange)插值公式的基本思想是把的构造问题转化为n+1个插值基函数l_{i}(x)(i=0,1,...,n) 。首先我们利用节点直接构造如下多项式:

 l_{i}(x)=\frac{w_{n+1}(x)}{(x-x_{i})w_{n+1}(x_{i})}

其中

  w_{n+1}(x)=(x-x_{0})(x-x_{1})(x-x_{2})...(x-x_{n})    ,

  w_{n+1}(x_{j})=(x_{i}-x_{0})(x_{i}-x_{1})...(x_{i}-x_{i-1})(x_{i}-x_{i+1})...(x_{i}-x_{n})

容易验证该多项式具有性质

   l_{i=}\left\{\begin{matrix} 0,&i\neq j \\ 1,& i=j \end{matrix}\right.

 L_{n}(x_{k})=\sum_{k=0}^{n}l_{k}(x)y_{k}=l_{i}(x_{i})y_{​{i}} ,i=0,1,...,n

既满足插值条件。我们称L_{n}(x) 为拉格朗日插值多项式, 称l_{i}(x_{})为拉格朗日插值函数。

1.2、截断误差的实用估计式

 R_{n}(x)=f(x)-L_{n}(x)                                      

上式公式估计误差时不实用,实际中实用估计式应该用如下方法:

假设插值条件中包含n+2组数据

 f(x_{i})=y_{i},i=0,1,..,n,n+1  

那么利用n+1组数据我们可以构造一个n次拉格朗日插值多项式L_{n}(x) ,利用后n+1组数据我们可以构造另一个n次拉格朗日插值多项式L{}'_{n}(x) 。利用公式(4.1)知,他们各自的插值余项为

f(x)-L_{n}(x)=\frac{1}{(n+1)!}f^{(n+1)}(\xi )(x-x_{0})(x-x_{1})(x-x_{2})...(x-x_{n})

 f(x)-L{}'_{n}(x)=\frac{1}{(n+1)!}f^{(n+1)}(\xi {}')(x-x_{1})(x-x_{2})...(x-x_{n})(x-x_{n+1})

两式相减得

L_{n}^{'}(x)-L_{n}(x)=\frac{1}{(n+1)!}f^{(n+1)}(\xi )(x-x_{1})(x-x_{2})...(x-x_{n})(x_{n+1}-x_{0})

 

并可写成

    \frac{1}{(n+1)!}f^{(n+1)}(\xi {})(x-x_{1})(x-x_{2})...(x-x_{n})=\frac{L{}'_{n}(x)-L_{n}(x)}{(x_{n+1}-x_{0})}                      

注意到上式中利用 该条件在很多情况下是成立的。

   利用上式可得

   \left\{\begin{matrix} R_{n}(x)=f(x)-L_{n}(x)\approx\frac{L{}'_{n}(x)-L_{n}(x)}{(x_{0}-x_{n+1})} \\ R{}'_{n}(x)=f(x)-L{}'_{n}(x)\approx\frac{L_{n}(x)-L{}'_{n}(x)}{(x_{n+1}-x_{0})} \end{matrix}\right.                                       

上式给出了用L_{n}(x)L{}'_{n}(x)作近似计算时的实用误差估计式,它不需要计算高阶导数,也不用估计插值区间上高阶导数的界。

总之,拉格朗日插值法的公式结构紧凑,在理论分析中十分方便,然而在计算中,但插值点增加或减少时,所对应的基本多项式就得重新计算而且图像发生很大变化。像逐次线性插值法、牛顿插值法等都是在拉格朗日插值多项式的基础上延伸出来的。我们根据实际中的具体问题,为减少插值误差来选取相应的插值法来快速的解决问题。

2.结果分析和讨论:

 

1.1

由上图可以看出随着等分值n的值增大拟合精度会越来越小,但是在函数的两边值会出现巨变,这也就是所谓的龙格现象。

 

1.2

由图1.2可以得出,当取节点 ,k=0,1,2,…n时,随着等分值n的增加,拟合现象会越来越好,并且没有出现龙格现象,故改变节点的值可以避免龙格现象。

3.程序设计:

(1)取等距节点,n=5,10,15,20.

%x0、y为被插值函数变量,n为等分数,x(k)为插值点,W_x为Li(x)的分子乘(x-x(j),W1_x为Li(x)的分母,Ln_x为插值函数多项式

syms x0 x1 y x n x_para

x0=-1:0.02:1;%作为画图的点

y=1./(1+25.*(x0.^2));

for n=[5,10,15,20]

    k=0:n;  %k的范围从0到n,共n+1项

    x(k+1)=-1+2*k/n; %从x(1)到x(n+1),共n+1项,即从第0点到第n点

 

for i=1:(n+1)  %共k+1项

part_x(i)=(x_para-x(i));  %每个因式的组成,共k+1种

end

for i=1:(n+1)  %共k+1项

    W1_x(i)=1;

    for j=1:(n+1)

    if i~=j

    W1_x(i)=W1_x(i)*(x(i)-x(j));  %每个因式的组成,共k+1种

    end

    end

end

W_x(n+1)=prod(part_x);  %累乘函数求w_x

   for j=1:(n+1)

   ln_x(j)=(1/(1+25*(x(j)^2))) * W_x(n+1) / ( (x_para-x(j))*(W1_x(j)) );

   end

   Ln_x=sum(ln_x);

   x_vector=-0.99:0.008:0.99;

   Ln_x=subs(Ln_x,x_para,x_vector);

   m=n/5;

   subplot(2,2,m);plot(x0,y);

   hold on

   subplot(2,2,m);plot(x_vector,Ln_x);

   legend ('被插值函数','插值函数')

   ylabel('f(x) and Ln(x) ');

end

(2)取节点x_{k}=cos\frac{k\pi }{n},k=0,1,2,…n;分别取n=5,10,15,20能有什么样的结论。

%x0、y为被插值函数变量,n为等分数,x(k)为插值点,W_x为Li(x)的分子乘(x-x(j),W1_x为Li(x)的分母,Ln_x为插值函数多项式

syms x0 x1 y x n x_para

x0=-1:0.02:1;%作为画图的点

y=1./(1+25.*(x0.^2));

for n=[5,10,15,20]

    k=0:n;  %k的范围从0到n,共n+1项

    x(k+1)=cos(k*3.1415926/n); %从x(1)到x(n+1),共n+1项,即从第0点到第n点

 

for i=1:(n+1)  %共k+1项

part_x(i)=(x_para-x(i));  %每个因式的组成,共k+1种

end

for i=1:(n+1)  %共k+1项

    W1_x(i)=1;

    for j=1:(n+1)

    if i~=j

    W1_x(i)=W1_x(i)*(x(i)-x(j));  %每个因式的组成,共k+1种

    end

    end

end

W_x(n+1)=prod(part_x);  %累乘函数求w_x

   for j=1:(n+1)

   ln_x(j)=(1/(1+25*(x(j)^2))) * W_x(n+1) / ( (x_para-x(j))*(W1_x(j)) );

   end

   Ln_x=sum(ln_x);

   x_vector=-0.99:0.008:0.99;

   Ln_x=subs(Ln_x,x_para,x_vector);

   m=n/5;

   subplot(2,2,m);plot(x0,y);

   hold on

   subplot(2,2,m);plot(x_vector,Ln_x);

   legend ('被插值函数','插值函数')

   ylabel('f(x) and Ln(x) ');

end

如需要代码请在此链接下下载:https://download.csdn.net/download/weixin_41788456/10854164

如有志同者请发邮箱chenshuai0614@hrbeu.edu.cn联系我!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值