多项式插值随着点数的增加,多项式的次数也在增加,由于龙格现象,所以多项式插值的误差也增加了。
那怎么做才可以使增加节点,多项式插值误差减小呢?
这种方法叫做分段插值方法:
先将区间划分为若干个小区间,然后在每个小区间用低次多项式代替单个多项式做插值,并将每个小区间上所得到的多项式连接成一条连续曲线。
所得的多项式称为 分段插值多项式。
分段线性插值
即在每一个区间上使用一次多项式作为插值多项式,即每段一条直线。
设a=x0<x1<x2<...<xn=b,则节点把[a,b]分成n个小区间,当插值点x在第i个小区间[xi−1,xi]时,
采用一次Lagrange插值多项式:
g1i(x)=xi−1−xix−xiyi−1+xi−xi−1x−xi−1yi,xi−1≤x≤xi,i=1,2,...,n
采用Newton插值多项式:
g1i(x)=yi−1+y[xi−1,xi](x−xi−1),xi−1≤x≤xi,i=1,2,...,n
分段线型插值的误差:
E(g1i)=∣∣∣2y′′(ξ)(x−xi−1)(x−xi)∣∣∣≤2M2,i∣(x−xi−1)(x−xi)∣
设M2,i=xi−1≤x≤ximax∣y′′(x)∣,表示在[xi−1,xi]区间上的2阶导的绝对值最大值。
xmax∣(x−xi−1)(x−xi)∣=41(xi−xi−1)2
因此E(g1i)≤8M2,i(xi−xi−1)2
定理:
设g1(x)是在a=x0<x1<⋯<xn=b上插值y(xi)的分段线型插值多项式,若y′′(x)在[a,b]上连续,则有误差估计:
E(g1)≤81M2Δ2
其中M2=xmaxM2,i=a≤x≤bmax∣y′′(x)∣,Δ=1≤i≤nmax(xi−xi−1)
式中,只有Δ会随n的变化而改变。所以,只要增加的插值数据点在最长的子区间中,那么当节点数目增大时,Δ将减小。所以按照这种方法增加插值数据点会使误差随n的增大而趋于0。
优缺点:
优点:计算量少,可以保证插值准确性。
缺点:曲线在节点处不可导,即光滑程度较差。
分段二次插值
既然线性插值的光滑程度较差,我们可以尝试提高次数,使用二次插值。
若将区间[a,b]分成偶数个子区间,在每相邻的两个子区间上做二次插值多项式g2i(x),即在子区间[xi−1,xi+1]上,g2i(x)是以(xi−1,yi−1),(xi,yi),(xi+1,yi+1)为插值点的插值多项式(i=1,3,...,n−1)。
采用Newton插值多项式:
g2i(x)=yi−1+y[xi−1,xi](x−xi−1)+y[xi−1,xi,xi+1](x−xi−1)(x−xi)
余项为:
y(x)−g2i(x)=3!y′′′(ξi)(x−xi−1)(x−xi)(x−xi+1),x∈[xi−1,xi+1],ξi∈[xi−1,xi+1]
定理:
设g2i(x)是在a=x0<x1<⋯<xn=b上插值y(xi)的分段二次插值多项式,若y′′′(x)在[a,b]上连续,则有误差估计:
E(g1)≤12M3Δ3
其中M2=a≤x≤bmax∣y′′′(x)∣

这里的Δ指相邻两个区间中较大的。
上述定理可以看出,分段二次插值当合理增加插值点数使Δ减小时,分段二次插值的误差也随之减小。光滑性相比样条插值得到了改善,但是仍然一个不可导节点相邻一个可导节点。
三次样条插值
要想让所有节点都“光滑”,按照二次函数的方法只能提高到n次,那就变成了多项式插值。
还有另外一种办法。
在每一个子区间[xi−1,xi]上是一个三阶多项式,这些多项式的曲线在节点xi处光滑的连接起来,这样的分段三次多项式称为 三次样条函数。
通过数据点{(xi,yi)}(i=0,1,2,...,n)的三次样条s(x)是满足插值条件s(xi)=yi,i=0,1,2,...,n并使样条的势能达到最小的分段多项式。
样条的势能与其曲率的平方对弧长的积分成正比,即∫x0xn[s′′(x)]2dx
由上式可以知道样条至少需要时三次的,否则上面的积分就是一个定值。
计算三次样条曲线s(x)
将三次样条曲线s(x)在每个小区间[xi−1,xi]上求导数。
si(x)=aix3+bix2+cix+di
si(x)为三次多项式,其二阶导数必定为一次多项式,记Mi为在xi处的二阶导数值s′′(xi),则在区间[xi−1,xi]上有
s′′(x)=Mi−1hixi−x+Mihix−xi−1
式中,hi=xi−xi−1
这是因为在三个节点处的二阶导数也可以组成一个插值多项式,上式是线性插值所得到的结果(因为三次多项式的二阶导数必为一次多项式)。
将上式积分两次得到:
si′(x)=Mi−1−2hi(xi−x)2+Mi2hi(x−xi−1)2+c1
si(x)=Mi−16hi(xi−x)3+Mi6hi(x−xi−1)3+c1x+x2
s(x)=Mi−16hi(xi−x)3+Mi6hi(x−xi−1)3+φ(x)
所以可以看到φ(x)是一次多项式,因此可以设为
φ(x)=c1hixi−x+c2hix−xi−1
由插值条件得到:
s(xi)=yi=Mi−16hi(xi−xi)3+Mi6hi(xi−xi−1)3+φ(xi)=Mi6hihi3+c2hixi−xi−1=Mi6hi2+c2
也就是说带入(xi,yi)点,可以计算出c2。
∴c2=yi−Mi6hi2
同理,带入(xi−1,yi−1)点,可以计算出c1。
c1=yi−1−Mi−16hi2
因此,
φ(x)=(yi−1−Mi−16hi2)hixi−x+(yi−Mi6hi2)hix−xi−1
因此得到si(x)的大M表达式为
si(x)=Mi−16hi(xi−x)3+Mi6hi(x−xi−1)3+(yi−1−Mi−16hi2)hixi−x+(yi−Mi6hi2)hix−xi−1,x∈[xi−1,xi]
s(x)由以上在n个区间上的分段函数构成,共有n+1个参数Mi,i=0,1,...,n需要确定。
s(x)满足插值条件,且s(x)和s′′(x)在区间[x0,xn]上是连续的。
对s′(x)的连续性要求,有s′_(xi)=s′+(xi),i=1,2,...,n−1
si′(x)=−Mi−12hi(xi−x)2+Mi2hi(x−xi−1)2+hiyi−yi−1−6Mi−Mi−1hix∈[xi−1,xi]
si+1′(x)=−Mi2hi+1(xi+1−x)2+Mi+12hi+1(x−xi)2+hi+1yi+1−yi−6Mi+1−Mihi+1x∈[xi,xi+1]
因此,i-可以看做属于[xi−1,xi]。
s′i−(xi)=−Mi−12hi(xi−xi)2+Mi2hi(xi−xi−1)2+hiyi−yi−1−6Mi−Mi−1hi=2Mihi+hiyi−yi−1−6Mi−Mi−1hi
i-可以看做属于[xi,xi+1]。
s′i+(xi)=−Mi2hi+1(xi+1−xi)2+Mi+12hi+1(xi−xi)2+hi+1yi+1−yi−6Mi+1−Mihi+1=−2Mihi+1+hi+1yi+1−yi−6Mi+1−Mihi+1
因此可得
2Mihi+hiyi−yi−1−6Mi−Mi−1hi=−2Mihi+1+hi+1yi+1−yi−6Mi+1−Mihi+1
∴2Mihi+2Mihi+1−6Mi−Mi−1hi+6Mi+1−Mihi+1=hi+1yi+1−yi−hiyi−yi−1
∴6hiMi−1+3hi+hi+1Mi+6hi+1Mi+1=hi+1yi+1−yi−hiyi−yi−1
记λi=hi+hi+1hi+1,μi=1−λi=hi+hi+1hi
∴hi+hi+1hiMi−1+2Mi+hi+hi+1hi+1Mi+1=6hi+hi+1hi+1yi+1−yi−hiyi−yi−1
则有:μiMi−1+2Mi+λiMi+1=6y[xi−1,xi,xi+1],i=1,2,...,n−1
称为 三弯矩方程。
三弯矩方程是一个有n-1个方程,n+1个未知数Mi的线性方程组,还需要两个条件才有可能唯一确定所有的Mi,(i=0,1,2,⋯,n),从而唯一确定样条函数s(x)。这两个条件用所谓的 边界条件来补充规定:
方法一:自然边界条件
s′′(x0)=s′′(xn)=0即M0=Mn=0
自然三次样条是插值所有数据点最光滑的函数。
方法二:指定端点的一阶导数y0′和yn′
有{2M0+M1=h16{y[x0,x1]−y′0}Mn−1+2Mn=hn6{y′n−y[xn−1,xn]}
即在三弯矩方程中令i=0,ui=0和令i=n,ui=1
方法三:若两端点的导数值未知,可以按照下述方法给定边界条件
设c0(x)是通过{(xi,yi)}(i=0,1,2,3)的唯一三次曲线,cn(x)是通过{(xi,yi)}(i=n−3,n−2,n−1,n)的唯一三次曲线。
取三次样条分别在两端点处的三阶导数分别与c0′′′(x)和cn′′′(x)相同。
即s′′′(x0)=c0′′′(x0)s′′′(xn)=cn′′′(xn)
简单来说,就是两端点的三阶导数确定为两端三次插值的三阶导数。
根据四个插值点的牛顿插值方法
Nn(x)=y[x0]+y[x0,x1](x−x0)+y[x0,x1,x2](x−x0)(x−x1)+⋯+y[x0,x1,x2,⋯,xn](x−x0)(x−x1)⋯(x−xn−1)
c′′′0(x)=6y[x0,x1,x2,x3],c′′′n(x)=6y[xn−3,xn−2,xn−1,xn]
又s′′′(x0)=h11(M1−M0),s′′′(xn)=hn1(Mn−Mn−1)
所以边界条件为
2M0−2M1=−12h1y[x0,x1,x2,x3]−2Mn−1+2Mn=12hny[xn−3,xn−2,xn−1,xn]
上面的三种方法可以得到统一的方程组形式
⎝⎜⎜⎜⎜⎛2μ1λ02⋱λ1⋱μn−1⋱2μnλn−12⎠⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎜⎛M0M1⋮Mn−1Mn⎠⎟⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎜⎛d0d1⋮dn−1dn⎠⎟⎟⎟⎟⎟⎞
其中λi=hi+hi+1hi+1,μi=hi+hi+1hi,di=6y[xi−1,xi,xi+1],i=1,2,...,n−1
对应于上面三种边界:
- λ0=0,μn=0,d0=0,dn=0
- λ0=1,μn=1,d0=h16{y[x0,x1]−y′0},dn=hn6{y′n−y[xn−1,xn]}
- λ0=−2,μn=−2,d0=−12h1y[x0,x1,x2,x3],dn=12hny[xn−3,xn−2,xn−1,xn]
三次样条插值的误差分析
定理:
设y(x)是[a,b]上的二阶连续可微的函数,在[a,b]上以a=x0<x1<⋯<xn=b为节点的三次样条插值函数s(x)满足:
∣y(x)−s(x)∣≤2M2Δ2
其中M2=a≤x≤bmax∣y′′(x)∣,Δ=imax∣xi−xi−1∣



优点:
分段三次样条插值具有与分段一次插值,分段二次插值同样的优点,即当节点增多子区间减少时,分段三次样条插值的误差也随之减小同时在中间结点处的光滑性得到了改善
缺点:
要使用方程组计算M,计算量较大,同时还要附加边界条件分段三次样条插值对图形的控制能力还不够灵活