前言
本篇介绍插值法的最后一节,样条插值。
分段插值存在的问题
采用分段插值可以避免龙格现象,提升插值精度,但是分段插值的结果并不平滑。采用分段三次埃尔米特插值能够使得插值结果在节点附近相对平滑(没有突变点)。但是其平滑性也只是对于一阶导而言的。
为了让插值结果具有更好的平滑性,可以使用样条插值。
样条插值
对于待插值函数
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)
实际上可以自行设定条件,只要能够额外产生两个方程。
样条插值与分段埃尔米特插值的区别
样条插值曲线本身是光滑的,因为样条需要满足节点插值条件和平滑性。
分段埃尔米特插值需要同时满足节点函数值与导数值。换言之,埃米尔特插值的平滑性是由给定的节点导数值决定的。
后记
终于把插值给搞完了。下篇就是拟合了。