当已知某些点而不知道具体方程时候,最经常遇到的场景就是做实验,采集到数据的时候,我们通常有两种做法:拟合或者插值。拟合不要求方程通过所有的已知点,讲究神似,就是整体趋势一致。插值则是形似,每个已知点都必会穿过,但是高阶会出现龙格库塔现象,所以一般采用分段插值。今天我们就来说说这个分段三次样条插值。
顾名思义,分段就是把区间[a,b]分成n个区间
,共有n+1个点,其中两个端点
。三次样条就是说每个小区间的曲线是一个三次方程,三次样条方程满足以下条件:
1,在每个分段小区间
上,
都是一个三次方程
2,满足插值条件,即
3, 曲线光滑,即
连续
则这个三次方程可以构造成如下形式:
这种形式,我们称这个方程为三次样条函数
。
从
可以看出每个小区间有四个未知数
,有n个小区间,则有4n个未知数,要解出这些未知数,则我们需要4n个方程来求解。
求解
我们要找出4n个方程来求解4n个未知数
首先,由于所有点必须满足插值条件,
,除了两个端点,所有n-1个内部点的每个点都满足
前后两个分段三次方程,则有2(n-1)个方程,再加上两个端点分别满足第一个和最后一个三次方程,则总共有2n个方程;
其次,n-1个内部点的一阶导数应该是连续的,即在第 i 区间的末点和第 i+1 区间的起点是同一个点,它们的一阶导数应该也相等,即
则有n-1个方程
另外,内部点的二阶导数也要连续,即
,也有n-1个方程
现在总共有4n-2个方程了,还差两个方程就可以解出所有未知数了,这两个方程我们通过边界条件得到。
有三种边界条件:自然边界,固定边界,非节点边界
1,自然边界 ( Natural Spline ):指定端点二阶导数为0,
2, 固定边界 ( Clamped Spline ): 指定端点一阶导数,这里分别定为A和B。即
3, 非扭结边界( Not-A-Knot Spline ): 强制第一个插值点的三阶导数值等于第二个点的三阶导数值,最后第一个点的三阶导数值等于倒数第二个点的三阶导数值. 即
具体推导
1, 由
可得
2,用
表示步长,由
推出
3,由
推出
可得
4,由
推出
设
则
改写为
可得
5,现在
都可以表示成二阶导的关系式,将其代入到
可得
6,将
代入
可得
这样我们可以构造一个以m为未知数的线性方程组。
1)在自然边界条件时,
可以看出,左侧的系数矩阵为严格对角占优矩阵。即:每一行中对角元素的值的模 > 其余元素值的模之和。故线性方程组有唯一解,且雅克比迭代法、高斯-赛德尔迭代法和0
2)在夹持边界条件时,
将上述两个公式带入方程组,新的方程组左侧为
3)在非扭结边界条件时,
由于
,并且
即
新的方程组系数矩阵可写为:
下图可以看出不同的端点边界对样条曲线的影响:
算法总结
假定有n+1个数据节点
1,计算步长
2,将数据节点和指定的首位端点条件带入矩阵方程
3,解矩阵方程,求得二次微分值
。该矩阵为三对角矩阵,常见解法为高斯消元法,可以对系数矩阵进行LU分解,分解为单位下三角矩阵和上三角矩阵。即
4,计算样条曲线的系数:
5,在每个子区间
中,创建方程
参考:
本文详细介绍了三次样条插值的概念,包括分段三次样条插值的定义、特点以及如何构建三次样条函数。讨论了自然边界、固定边界和非扭结边界的条件,并提供了具体的推导过程。最后总结了三次样条插值的算法步骤,强调了不同边界条件对样条曲线形状的影响。
9万+

被折叠的 条评论
为什么被折叠?



