拉格郎日插值与牛顿插值
插值法作用
已知未知函数多个点的坐标,寻求某一简单函数(满足上述坐标),利用简单函数来预测未知函数在某一点的函数值,某一简单函数通常选用多项式来代替。
插值分类:
1.拉格朗日插值
拉格朗日插值多项式: Ln(x)=y0l0(x)+y1l1(x)+⋯+ynln(x)
其中 li(x) 为插值基函数
li(x)=∏i=0,i≠jnx−xix−xj
证明为:假设有四个点,
(x0,y0),(x1,y1),(x2,y2),(x3,y4)
若要
Ln(x0)=y0
,则当
x=x0
时,
x0
是
l1(x),l2(x),l3(x)
的零点
若要
Ln(x1)=y1
,则当
x=x1
时,
x1
是
l0(x),l2(x),l3(x)
的零点
若要
Ln(x2)=y2
,当
x=x2
时,
x2
是
l0(x),l1(x),l3(x)
的零点
若要
Ln(x3)=y3
,当
x=x3
时,
x3
是
l0(x),l1(x),l2(x)
的零点
则
l0(x)的零点为x1,x2,x3
,则
l0(x)=c0(x−x1)(x−x2)(x−x3)
,根据
L0(x0)=1
可以求出
c0
这样依次可以求出其他的插值基函数。 一个拉格朗日插值多项式要由n+1个n次的插值基函数组成.
2.牛顿插值
牛顿插值的引入是因为拉格朗日插值每次新添加一个坐标点进去运算则插值基函数需要全部重新计算,而牛顿插值只需要在原有的插值基函数的条件下,添加新的插值基函数即可。
证明:
1.假设有两个点:
(x0,y0),(x1,y1)
其中假设
N1(x)=y0+b1(x−x0)
,易知
N1(x0)=y0
若要
N1(x1)=y1
,则
N1(x1)=y0+b1(x1−x0)=y1
则可以把 b1 解出来: y1−y0x1−x0
从而得到 N1(x)=y0+b1(x−x0) .这里不具体写出 b1 的值, b1 为一阶均差
2.现假设有三个点:
(x0,y0),(x1,y1),(x2,y2)
假设
N2(x)=N1(x)+b2(x−x0)(x−x1)
,
易知
N2(x0)=N1(x0)=y0,N2(x1)=N1(x1)=y1
b2
的求法与上述
b1
求法类似
其中 b2=f[x1,x0,x2] 为二阶均差,因为均差具有对称性(即节点的排列顺序不影响计算),则也可为下式
则把 N1(x) 带入
N2(x)=N1(x)+b2(x−x0)(x−x1)
;
N2(x)=y0+b1(x−x0)+b2(x−x0)(x−x1)
=y0+(x−x0)(b1+b2(x−x1))
;
可见在新添加了一个点的基础上,只需要求出 b2 则新的牛顿插值多项式就计算完毕。
但牛顿插值多项式的得出是通过观察均差的特点,即函数值f(x)可以用一阶均差表示,一阶均差可以用二阶均差表示,二阶均差可以用三阶均差表示,则依次类推可以推到n阶,则可得到f(x)的表达式
f(x)=f(x0)+∑k=1nf[x0,x1,...,xk]∏j=0k−1(x−xj)+f[x,x0,...,xn]∏j=0n(x−xj)
其中牛顿插值多项式为:
Nn(x)=∑k=1nf[x0,x1,...,xk]∏j=0k−1(x−xj)
牛顿插值法应用(Matlab):
- 首先求取均差表,为了节省内存,从下往上计算均差表并一级一级覆盖,最后数组内为均差表对角线的元素,也为需要计算牛顿插值多项式的均差。同时用提取公因数的方法来计算多项式的值,提取公因数的方法可以减少运算次数避免多次计算引起的误差。
代码:
clear;
x=[0.40,0.55,0.65,0.80,0.90,1.05];
y=[0.41075,0.57815,0.69675,0.88811,1.02652,1.25382];
%%Newton
%计算均差表
n=length(y);%因为matlab内矩阵从1开始计数
for k=2:n
for j=n:-1:k%从下往上计算覆盖
y(j)=(y(j)-y(j-1))/(x(j)-x(j-(k-1)));%k=2时计算一阶,j减去1,k=3时计算二阶,j减去2
end
end
%利用Horner算法
N=0.596;%计算f(0.596)的近似值
sum=0;
for i=n:-1:2
sum=sum+y(i-1)+y(i)*(N-x(i-1));
end
disp(sum);