码迷,mamicode.com
首页 > 其他好文 > 详细

三次样条插值介绍

时间:2018-05-04 11:59:44      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:.com   get   article   总结   左右   border   表达   tps   span   

所谓三次样条插值对于一个区间(a,b)将区间分成x0 = a < x1 ......xn-1 < b = xn 的n-1个区间,我们需要通过已知的n+1个点来模拟一个未知的函数,在三次样条插值中我们采用分段的方法来做这件事情。

三次样条插值得到的分段函数保证一下条件成立,而这些条件也是用来求解每一段样条插值的条件:

1 模拟出来的函数在已知点的函数值等于f的函数值

2模拟出来的分段函数是二阶连续的也就是说导数和二阶导数在分段的交界点是相等的

3需要知道在a和b点的二阶导数的情况,或者二阶导数在这n+1个点的变化规律

下面直接转载其内在的规律

已知:

a. n+1个数据点[xi, yi], i = 0, 1, …, n

b. 每一分段都是三次多项式函数曲线

c. 节点达到二阶连续

d. 左右两端点处特性(自然边界,固定边界,非节点边界)

根据定点,求出每段样条曲线方程中的系数,即可得到每段曲线的具体表达式。

 

插值和连续性:

技术分享图片, 其中 i = 0, 1, …, n-1

微分连续性:

技术分享图片 , 其中 i = 0, 1, …, n-2

样条曲线的微分式:

技术分享图片技术分享图片

 

将步长技术分享图片 带入样条曲线的条件:

a. 由技术分享图片 (i = 0, 1, …, n-1)推出

技术分享图片 

b. 由技术分享图片 (i = 0, 1, …, n-1)推出

技术分享图片

c. 由 技术分享图片 (i = 0, 1, …, n-2)推出

技术分享图片

由此可得:

技术分享图片

d. 由 技术分享图片 (i = 0, 1, …, n-2)推出

技术分享图片

 

技术分享图片 ,则

a. 技术分享图片 可写为:

技术分享图片 ,推出

技术分享图片

b. 将ci, di带入 技术分享图片 可得:

技术分享图片 

c. 将bi, ci, di带入技术分享图片 (i = 0, 1, …, n-2)可得:

技术分享图片 

这样我们可以构造一个以m为未知数的线性方程组,而且在端点条件已知的情况下我们是知道其中几个未知数的值的

端点条件

由i的取值范围可知,共有n-1个公式, 但却有n+1个未知量m 。要想求解该方程组,还需另外两个式子。所以需要对两端点x0和xn的微分加些限制。 选择不是唯一的,3种比较常用的限制如下。

a. 自由边界(Natural)

首尾两端没有受到任何让它们弯曲的力,即技术分享图片 。具体表示为技术分享图片 和 技术分享图片

则要求解的方程组可写为:

技术分享图片技术分享图片 

 

b. 固定边界(Clamped)

首尾两端点的微分值是被指定的,这里分别定为A和B。则可以推出

技术分享图片

技术分享图片

将上述两个公式带入方程组,新的方程组左侧为

技术分享图片

c. 非节点边界(Not-A-Knot)

指定样条曲线的三次微分匹配,即

技术分享图片

技术分享图片

根据技术分享图片 和技术分享图片 ,则上述条件变为

技术分享图片

技术分享图片

新的方程组系数矩阵可写为:

技术分享图片

 

 

右下图可以看出不同的端点边界对样条曲线的影响:

技术分享图片

 

1.3 算法总结

假定有n+1个数据节点

技术分享图片

a. 计算步长技术分享图片 (i = 0, 1, …, n-1)

b. 将数据节点和指定的首位端点条件带入矩阵方程

c. 解矩阵方程,求得二次微分值技术分享图片。该矩阵为三对角矩阵,具体求法参见我的上篇文章:三对角矩阵的求解

d. 计算样条曲线的系数:

技术分享图片

其中i = 0, 1, …, n-1

e. 在每个子区间技术分享图片 中,创建方程

技术分享图片 

 原创作者博客地址:https://blog.csdn.net/flyingleo1981/article/details/53008931

三次样条插值介绍

标签:.com   get   article   总结   左右   border   表达   tps   span   

原文地址:https://www.cnblogs.com/ondaytobewhoyouwant/p/8989497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!