Background
前面提到,可以用合理选择插值点来避免Runge现象
YcoFlegs:[数值计算] 函数近似理论、Runge现象、Chebyshev点、Lesbegue常数zhuanlan.zhihu.com
另一种流行的方法是,使用样条插值,分段处理。k阶样条插值可以连续可微k-1次。
还是以
为例:
一个trivial的情况是,线性样条,Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
样条插值是CAD、矢量图、字体设计的基础之一,CAD软件使用的是NURB样条,而字体设计是Bezier样条。
三次样条
每一个分段上,都是一个三次函数。由于有连续的两阶导数,所以肉眼看上去是很光滑的。
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/
如果有n+1个节点
,那么一共有n个分段,即
4n个未知参数
其中每个分段两端的值已知,所以有n个分段,因此有2n个已知等式
剩下还要限制两个相邻分段在边界上的一阶和二阶导数连续,一共2*(n-1)个已知等式,因为只有n-1个边界
还剩下两个条件,有不同的方法来处理:
- 自然三阶样条插值 Natural cubic spline,设置首尾的二阶导数为零:
- Not-a-knot样条插值: 以及
- End Slope样条插值,加入了首尾的导数项: 以及
- 周期样条插值Periodic Spline,首尾的一二阶导数相等: 以及
插值的基函数选取与系数求解
对于多项式拟合,需要选择基函数,通过求解Ax=B,计算基函数前面的系数。此处有n个区间,因此需要把n个区间组合起来,构成一个更大的Ax=B的问题,其中x是基函数们前面的系数组成的列向量。三次样条的一个区间有4个参数,因此,列向量的尺寸是(4n,1)。
之前在条件数里提到过,多项式拟合的时候选择monomial基函数
+ Vandermonde矩阵会出现条件数过高,而不稳定的情况。
YcoFlegs:[数值计算] 条件数zhuanlan.zhihu.com
在计算样条插值的时候也要注意这个问题。如果插值区间数较少的情况下问题不会太明显。但随着插值区间数增多,需要选用更好的基函数,比如:
这组基函数是线性不相关的,这点可以通过展开c0~c3,得到系数矩阵来检查。比较好的性质是,
http://iacs-courses.seas.harvard.edu/courses/am205/notes/am205_cspline.pdf
对于具体的计算,有兴趣的可以参考Homework的Q4 (a-c)