基样条曲线
本章描述用于计算平滑基样条(B样条)的函数。平滑样条与插值样条的区别在于,生成的曲线不需要经过每个数据点。有关插值样条的信息,请参见插值。
头文件gsl_bspline.h包含了bspline函数的原型和相关声明。
42.1 概述
B样条是一种常用的用于拟合大数据集平滑曲线的基函数。为了做到这一点,横轴被分成若干个区间,每个区间的端点称为断点。通过在每个界面施加各种连续性和平滑度条件,将这些断点转换为结点。给定一个非递减的结向量,
定义了n个k阶基样条,
对于i = 0,…,n−1。三次B样条的一般情况由k = 4给出。上述递推关系可由de Boor算法以数值稳定的方式进行估算。
如果我们在区间[a, b]上定义适当的节,那么B样条基函数在该区间上形成一个完整的集合。因此我们可以将平滑函数展开为,
给定足够的(xj, f(xj))数据对。系数ci 可以很容易地由最小二乘拟合得到。
42.2 初始化B样条求解器
gsl_bspline_workspace
B样条函数的计算需要预先分配一个工作空间。
gsl_bspline_workspace * gsl_bspline_alloc(const size_t k, const size_t nbreak)
本函数为计算k阶B样条分配了工作空间。断点的数目由nbreak给出。这导致n=nbreak+k−2个基函数。三次B样条由k=4表示。工作空间大小为O(2k2+5k+nbreak)。
void gsl_bspline_free(gsl_bspline_workspace * w)
本函数释放与工作空间w相关的内存。