在做三次样条插值的时候,我们需要首先注意几点:
第一,样条插值主要有两种,一种并不算插值,属于拟合,近似,不过每个给定的离散数据点;另一种是插值,过每个离散数据点。
第二、样条插值函数是在每个段上定义的,如果有N段,就是N个函数。
如果有N+1个数据点,就会一共有N个间隔。也就有分了N段的曲线。我们假设每段曲线为S(x),假设这一堆数据点为:
是按照从小到大的顺序排列的,对应每个点的值
假设我们取其中的一段进行分析,比如取 和 ,在这个间隔的曲线就是
首先我们需要保证的是, ,当然也有
我们设该三次多项式为:
除了上面要保证的条件,还有
对应到每个点的插值应该和真实值一样。
表示的是其导数也应该是连续的。
表示的是其二阶导数也应该是连续的。
为了方便描述,我们做一些替代: 表示第 i 段间隔。 表示第 i 段的二次函数在边缘的二阶导数。
把这些关系联立,然后带入到中,就能解得如下公式:
在首尾两端令 S''=0
解该方程就能得到每段的插值。
参考文献:三次B样条插值和误差分析
三次样条插值(Cubic Spline Interpolation)及代码实现(C语言)
三次样条插值(Cubic Spline Interpolation)及代码实现(C语言)