1. 概述
前面介绍到了多种插值方法,但是这些插值方法都无法避免龙格现象,即高阶多项式可能存在剧烈的振动,而且在区间的一个点处的微小扰动,都可能引起整个范围内的巨大振动,一种替代方式是使用类似线性插值的方式,将区间分成多个子区间,然后在每个子区间上构造不同的多项式来逼近,这种方式就是分段多项式。
但是,线性插值的表现会存在一个显著的现象就是插值点处一阶导不存在,在曲线上表现出来的是尖点,如果使用分段的Hermite多项式,虽然可以保证可导性,但是导数值有时并不是可以预先获取的。
最后,一个普遍的分段多项式是在使用三次多项式,即所谓的三次样条(Cubic Spline)插值。样条,英语为Spline,是Sample line的含义,意思是指通过一组给定点集来生成平滑曲线的柔性带。此概念源于生产实践,“样条”是绘制曲线的一种绘图工具,是富有弹性的细长条。绘图时用压铁使样条通过指定的形值点(样点),并调整样条使它具有满意的形状,然后沿样条画出曲线。
最初,样条曲线都是借助于物理样条得到的,放样员把富有弹性的细木条(或有机玻璃条),用压铁固定在曲线应该通过的给定型值点处,样条做自然弯曲所绘制出来的曲线就是样条曲线。样条曲线不仅通过各有序型值点,并且在各型值点处的一阶和二阶导数连续,也即该曲线具有连续的、曲率变化均匀的特点,但是需要注意的是,三次样条曲线并不能像Hermite多项式那样,在给定点处与被插函数具有相同的导函数值。
2. 数学知识
一个三次多项式具有的形式,那么问题的重点就是确定系数。对于给定区间上的函数和一组插值点,的一个三次样条插值多项式应满足如下条件:
- 对于,是子区间上的一个三次多项式,记作
- 对于,且
- 对于,
- 对于,
- 对于,
由于我们将区间分为了n段,然后每段上需要确定多项式的系数,因此一共要计算个常数。由条件2和3,每个子区间上首位函数值,可以构造个方程,由条件4和5各可以构造个方程,总共可以构造个方程,方程数量少于未知数数量(),因此还缺少条件,不能完全求解。为了构造可求解的方程组,需要补充边界条件,通常是两个端点处的导数值,一般分为三种情况:
1. 紧固(Clamped)三次样条曲线:端点处的一阶导数值为给定值,即,也叫做夹持三次样条曲线,这种情况相当于是在两个端点也增加了约束;
2. 自然(Natural)三次样条曲线:端点处的二阶导数值为0,,也叫自由三次样条曲线,这种情况相当于两个端点被放开,没有约束;
3. 非扭结(Not-a-knot)三次样条曲线:起始2个点和结尾两个点的三阶导数值相同,,这表明最开始两个子区间和最后的两个子区间,其多项式相同,因此,上是同一个三次多项式,上也是同一个三次多项式,实际上是可有可无的,也就是说,它们起不到扭结点的作用了,所以被称作not-a-knot样条曲线,这种是方式是一般在无法获取端点处导数值时比较好的一种选择。
此外,由于紧固样条曲线使用到了更多被查函数的信息,因此拟合的效果会比自然三次样条曲线更好一些。
3. 公式推导
3.1 紧固三次样条曲线
如果用表示各区间的步长,则,且显然有,但需要注意,最后所求的曲线方程为:
可以得到紧固三次样条曲线的方程为:
其中:
由于以上方程是严格对角占优的,因此一定存在解,所求就是待求系数中的值,再使用:
可计算。
最后可以通过:
计算出。
3.2 自然三次样条曲线
对于自然三次样条曲线,其计算过程相同,但是方程需要有所调整,即A与b的第一行和最后一行,调整如下:
3.3 非扭结三次样条曲线
根据前面的定义,方程变为:
4. 总结
三种不同三次样条曲线的边界条件,如下: