- 前言
- 分段插值存在的问题
- 样条插值
- 三次样条插值
- 样条插值与分段埃尔米特插值的区别
- 后记
本篇介绍插值法的最后一节,样条插值。
分段插值存在的问题采用分段插值可以避免龙格现象,提升插值精度,但是分段插值的结果并不平滑。采用分段三次埃尔米特插值能够使得插值结果在节点附近相对平滑(没有突变点)。但是其平滑性也只是对于一阶导而言的。
为了让插值结果具有更好的平滑性,可以使用样条插值。
样条插值对于待插值函数 f ( x ) f(x) f(x),已知节点 x 0 , x 1 , … , x n x_0,x_1,\dots,x_n x0,x1,…,xn处的函数值,将相邻两节点进行分段,获得n个插值小区间,在每个区间内使用k次多项式 S i ( x ) S_i(x) Si(x)插值,使其满足插值条件与k-1阶平滑性: S i ( x i ) = f ( x i ) , S i ( x i + 1 ) = f ( x i + 1 ) , 0 ≤ i ≤ n − 1 ( 1 ) S i ( j ) ( x i + 1 ) = S i + 1 ( j ) ( x i + 1 ) , 0 ≤ i ≤ n − 2 , 1 ≤ j ≤ k − 1 ( 2 ) S_i(x_i)=f(x_i),S_i(x_{i+1})=f(x_{i+1}),0\le i\le n-1\quad (1) \\ \quad \\ S_i^{(j)}(x_{i+1})=S_{i+1}^{(j)}(x_{i+1}),0\le i\le n-2,1\le j\le k-1\quad (2) \\ Si(xi)=f(xi),Si(xi+1)=f(xi+1),0≤i≤n−1(1)Si(j)(xi+1)=Si+1(j)(xi+1),0≤i≤n−2,1≤j≤k−1(2) 将每段插值结果组合后,就是样条插值。
三次样条插值比较常用的是三次样条插值法,即假设上面的 S i ( x ) S_i(x) Si(x)是三次多项式: S i ( x ) = a i + b i x + c i x 2 + d i x 3 S_i(x)=a_i+b_ix+c_ix^2+d_ix^3 Si(x)=ai+bix+cix2+dix3 由上式可知,一段三次样条含有4个未知数,则节点 x 0 , x 1 , … , x n x_0,x_1,\dots,x_n x0,x1,…,xn对应的三次样条含有4n个未知数。
每个节点 x 0 , x 1 , … , x n x_0,x_1,\dots,x_n x0,x1,…,xn都满足式(1),产生2n个等式。
每个节点 x 0 , x 1 , … , x n x_0,x_1,\dots,x_n x0,x1,…,xn都满足式(2),产生2(n-1)个等式。
因此,三次样条插值本身满足的条件只能形成4n-2个方程,少于未知参数量4n,必须添加额外条件:
自然边界: S ′ ′ ( x 0 ) = S ′ ′ ( x n ) = 0 S''(x_0)=S''(x_n)=0 S′′(x0)=S′′(xn)=0 固定边界: S ′ ( x 0 ) = c 1 , S ′ ( x n ) = c 2 S'(x_0)=c_1,S'(x_n)=c_2 S′(x0)=c1,S′(xn)=c2 周期样条: S ′ ( x 0 ) = S ′ ( x n ) , S ′ ′ ( x 0 ) = S ′ ′ ( x n ) S'(x_0)=S'(x_n),S''(x_0)=S''(x_n) S′(x0)=S′(xn),S′′(x0)=S′′(xn) Not-a-knot: S ′ ′ ′ ( x 0 ) = S ′ ′ ′ ( x 1 ) , S ′ ′ ′ ( x n − 1 ) = S ′ ′ ′ ( x n ) S'''(x_0)=S'''(x_1),S'''(x_{n-1})=S'''(x_{n}) S′′′(x0)=S′′′(x1),S′′′(xn−1)=S′′′(xn)
实际上可以自行设定条件,只要能够额外产生两个方程。
样条插值曲线本身是光滑的,因为样条需要满足节点插值条件和平滑性。
分段埃尔米特插值需要同时满足节点函数值与导数值。换言之,埃米尔特插值的平滑性是由给定的节点导数值决定的。
后记终于把插值给搞完了。下篇就是拟合了。