拉格朗日插值多项式#
lk(x)=(xk−x0)...(xk−xk−1)(xk−xk+1)...(xk−xn)(x−x0)...(x−xk−1)(x−xk+1)...(x−xn)
=j=0,j=k∏nxk−xjx−xj(k=0,1,...,n)
Ln(x)=k=0∑nyklk(x)
形如上式的插值多项式 Ln(x) 称为 拉格朗日插值多项式。
备注: 通常情况下次数为 n,但是特殊情形次数可以小于 n。
拉格朗日插值余项#
设 f(x) 在 [a,b] 上有 n+1 阶导数,节点 a⩽x0<x1<⋯<xn⩽b,Ln(x) 是满足条件 Ln(xi)=f(xi),i=0,1,…,n 的插值多项式。
则对于任何 x∈[a,b],存在 ξ∈(a,b),有插值余项:
Rn(x)=f(x)−Ln(x)=(n+1)!f(n+1)(ξ)ωn+1(x)
- ξ 依赖于 x。
- ωn+1(x)=(x−x0)(x−x1)…(x−xn)
- 误差估计(上界):
若记 maxa⩽x⩽b∣f(n+1)(x)∣=Mn+1,则有:
∣Rn(x)∣⩽(n+1)!Mn+1∣ωn+1(x)∣
拉格朗日插值基函数的性质#
若节点满足 a⩽x0<x1<⋯<xn⩽b,且次数 i⩽n,则有:
k=0∑nxkilk(x)=xi,k=0,1,…,n
特别地,当 i=0 时:
k=0∑nlk(x)=1
误差估计#
-
核心问题:函数的高阶导数未知,如何估计截断误差?
-
构造思路
假设插值条件中包含 n+2 个数据节点:f(xi)=yi,i=0,1,…,n,n+1。
-
利用前 n+1 个数据:构造一个 n 次 Lagrange 插值多项式 Ln(x)。
-
利用后 n+1 个数据:构造一个 n 次 Lagrange 插值多项式 Ln∗(x)。
各自的插值余项分别为:
f(x)−Ln(x)=(n+1)!1f(n+1)(ξ)(x−x0)(x−x1)⋯(x−xn)
f(x)−Ln∗(x)=(n+1)!1f(n+1)(ξ∗)(x−x1)(x−x2)⋯(x−xn+1)
若假设在高阶导数连续且节点较近时,f(n+1)(ξ)≈f(n+1)(ξ∗),则将上述两式相减可得:
Ln∗(x)−Ln(x)≈(n+1)!1f(n+1)(ξ)(x−x1)⋯(x−xn)(xn+1−x0)
由此可以解出包含高阶导数的项:
(n+1)!1f(n+1)(ξ)(x−x1)⋯(x−xn)≈xn+1−x0Ln∗(x)−Ln(x)
因此,我们得到了不需要高阶导数的余项估计式:
- 对于 Ln(x) 的余项估计:
Rn(x)=f(x)−Ln(x)≈x0−xn+1Ln(x)−Ln∗(x)(x−x0)
- 对于 Ln∗(x) 的余项估计:
Rn∗(x)=f(x)−Ln∗(x)≈xn+1−x0Ln∗(x)−Ln(x)(x−xn+1)
Aitken 逐次线性插值法#
对于未知函数或复杂函数 f(x),假设已知信息:
f(xi)=yi,i=0,1,…,n
目标:计算 f(x) 在任何一点 x 处的近似值,且近似误差不超过上限 ε0。
-
步骤 1:构造初始线性插值
记 Ii(x)=yi,i=0,1,…,n。
利用节点 x0,x1 构造线性插值多项式 I0,1(x)。
利用节点 x0,x2 构造另一个线性插值多项式 I0,2(x):
I0,2=I0,2(x)=f0+x2−x0f2−f0(x−x0)=I0+x2−x0I2−I0(x−x0)
-
步骤 2:估计误差与判定
估计 I0,1(x) 的误差:
R0,1,2(x)=x1−x2I0,1−I0,2(x−x1)
若 ∣R0,1,2(x)∣<ε0:算法终止。
记 f(x)≈I0,1,2=I0,1+R0,1,2(x)。
否则:继续执行步骤 3。
-
步骤 3:进一步迭代
利用节点 x0,x3 构造线性插值多项式 I0,3(x)。
估计 I0,1(x) 的误差 R0,1,3(x) 并计算 I0,1,3=I0,1+R0,1,3(x)。
估计 I0,1,2(x) 的误差,计算 I0,1,2,3(x)。
类似地进行后续迭代
Neville 逐次线性插值法#
已知节点 a⩽x0<x1<⋯<xn⩽b 和相应的函数值 f(xi),i=0,1,…,n,则 k 次插值多项式有递推公式:
{Pj(x)=f(xj)P0,1,…,k(x)=xk−x0(x−x0)P1,2,…,k(x)−(x−xk)P0,1,…,k−1(x)j=0,1,…,kk=0,1,…
上述公式可以化简为:
{Pj(x)=f(xj)P0,1,…,k(x)=P0,1,…,k−1(x)+xk−x0P1,2,…,k(x)−P0,1,…,k−1(x)(x−x0)j=0,1,…,kk=0,1,…
牛顿插值多项式#
均差及性质#
定义:
-
一阶均差:f[x0,xk]=xk−x0f(xk)−f(x0)
-
二阶均差:f[x0,x1,xk]=xk−x0f[x1,xk]−f[x0,x1]
-
k 阶均差:
f[x0,x1,…,xk]=xk−x0f[x1,…,xk]−f[x0,…,xk−1]
(均差也称为差商)
线性组合表示:k 阶均差可以表示为函数值 f(x0),…,f(xk) 的线性组合:
f[x0,x1,…,xk]=j=0∑k(xj−x0)…(xj−xj−1)(xj−xj+1)…(xj−xk)f(xj)
对称性:均差的值与节点的排列顺序无关。例如:f[x0,x1]=f[x1,x0]。
与导数的关系:若 f(x) 在 [a,b] 上存在 n 阶导数,则:
f[x0,x1,…,xn]=n!f(n)(ξ),ξ∈(a,b)
牛顿插值公式与余项#
牛顿插值多项式 Nn(x):
Nn(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+⋯+f[x0,…,xn]ωn(x)
牛顿插值余项 Rn(x):
Rn(x)=f(x)−Nn(x)=f[x,x0,x1,…,xn]ωn+1(x)
其中 ωn+1(x)=(x−x0)(x−x1)…(x−xn)。
Lagrange 插值与牛顿型插值的比较#
(1)等价性
两者都是 n 次插值多项式,且均满足插值条件:
Ln(xi)=f(xi),Nn(xi)=f(xi)(i=0,1,…,n)
基于多项式的唯一性可知,Ln(x)≡Nn(x)。
(2)误差一致性
它们的插值余项公式完全相同:
Rn(x)=(n+1)!f(n+1)(ξ)ωn+1(x)
(3)承继性
- Lagrange 插值:当多项式次数从 n−1 次增加到 n 次时,必须重新计算所有的基本插值基函数 lk(x)。
- Newton 插值:具有良好的承继性。只需在原有的均差表基础上再计算一个 n 阶均差,然后在末尾加上新的一项即可。
设节点为等距节点,即步长 h 为常数:
- xk=x0+kh,(k=0,1,…,n)
- f(xk)=fk
一阶差分#
- 向前差分:Δfk=fk+1−fk
- 向后差分:∇fk=fk−fk−1
- 中心差分:δfk=fk+1/2−fk−1/2
高阶差分#
- 二阶向前差分:Δ2fk=Δfk+1−Δfk=fk+2−2fk+1+fk
- m 阶向前差分:Δmfk=Δ(Δm−1fk)=Δm−1fk+1−Δm−1fk
在等距插值的情况下,均差可以简化为差分与步长 h 的组合:
- 向前形式:
f[x0,x1,…,xk]=k!hkΔkf0
- 向后形式:
f[xk,xk−1,…,xk−m]=m!hm∇mfk
- 重要换算关系:
∇mfk+m=Δmfk
均差、差分与导数的关系#
- 均差与导数:f[x0,x1,…,xk]=k!f(k)(ξ)
- 差分与均差:f[x0,x1,…,xk]=k!hkΔkf0
- 差分与导数:
Δkf0=hkf(k)(ξ)
Newton 向前与向后插值公式#
-
Newton 向前差分插值公式
适用场景:适合于计算函数表表头附近(靠近 x0)的函数值。
引入变换 t=hx−x0,公式为:
Nn(x)=f0+tΔf0+2!t(t−1)Δ2f0+⋯+n!t(t−1)…(t−n+1)Δnf0
简化形式:
Nn(x)=k=0∑n(kt)Δkf0
插值余项:
Rn(x)=(n+1)!t(t−1)…(t−n)hn+1f(n+1)(ξ),ξ∈(x0,xn)
-
Newton 向后差分插值公式
适用场景:适合于计算函数表表尾附近(靠近 xn)的函数值。
引入变换 t=hx−xn(注意此处 t 通常为负数),公式为:
Nn(x)=fN+t∇fN+2!t(t+1)∇2fN+⋯+n!t(t+1)…(t+n−1)∇nfN
简化形式:
记 (k−t)=k!−t(−t−1)…(−t−k+1)=(−1)kk!t(t+1)…(t+k−1),则:
Nn(x)=k=0∑n(−1)k(k−t)∇kfN
插值余项:
Rn(x)=(n+1)!t(t+1)…(t+n)hn+1f(n+1)(ξ),ξ∈(xn−n,xn)
重节点均差与泰勒插值#
设 f∈Cn[a,b],则 f[x0,x1,…,xn] 是其变量的连续函数。
当节点趋于重合时,利用极限可以定义重节点均差:
- 一阶重节点均差:
f[x0,x0]=x→x0limf[x0,x]=x→x0limx−x0f(x)−f(x0)=f′(x0)
- 二阶重节点均差:
f[x0,x0,x0]=x1→x0x2→x0limf[x0,x1,x2]=2!1f′′(x0)
- n 阶重节点均差(一般项):
f[n+1个x0,x0,…,x0]=n!f(n)(x0)
在牛顿插值多项式 Nn(x) 中,令所有节点 xi→x0 (i=1,2,…,n),则公式变为:
Pn(x)=f(x0)+f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+⋯+n!f(n)(x0)(x−x0)n
这实际上就是在点 x0 附近逼近 f(x) 的一个带导数的插值多项式(即泰勒多项式),它满足:
Pn(k)(x0)=f(k)(x0),k=0,1,…,n