当已知某些点而不知道具体方程时候,最经常遇到的场景就是做实验,采集到数据的时候,我们通常有两种做法:拟合或者插值。拟合不要求方程通过所有的已知点,讲究神似,就是整体趋势一致。插值则是形似,每个已知点都必会穿过,但是高阶会出现龙格库塔现象,所以一般采用分段插值。今天我们就来说说这个分段三次样条插值。

顾名思义,分段就是把区间[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<ω≤1的超松弛迭代法均收敛。

2)在夹持边界条件时,

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

3)在非扭结边界条件时,

由于

,并且

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

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

算法总结

假定有n+1个数据节点

1,计算步长

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

3,解矩阵方程,求得二次微分值

。该矩阵为三对角矩阵,常见解法为高斯消元法,可以对系数矩阵进行LU分解,分解为单位下三角矩阵和上三角矩阵。即

4,计算样条曲线的系数:

5,在每个子区间

中,创建方程

参考:

https://www.cnblogs.com/flysun027/p/10371726.html

https://www.cnblogs.com/xpvincent/archive/2013/01/26/2878092.html

三次样条插值三弯矩matlab_三次样条(cubic spline)插值相关推荐

  1. Cubic spline(三次样条插值)(转载)

    转自:http://blog.csdn.net/lsxpu/article/details/38849775 自己以前上过数值分析这门课,用的是[1]这本教材,三次样条插值这一节,当时似乎看明白了,但 ...

  2. 数值计算 --- 三次样条函数插值(Cubic spline function interpolation)

    三次样条函数插值(Cubic spline function interpolation) Part I   插值 预备知识: 什么是插值?          已知部分离散的数据,但不知道满足这些数据 ...

  3. 三次样条曲线插值(cubic spline)实例应用

    目标 工作需要,需要达成这样得一个需求,给一系列得三维点,三维点按照顺序连接,形成一条折线.需要依照这条折线,进行曲线1m等距离插值.具体如下图 其中,红色圆圈点为原始点集OrigPoints(原始点 ...

  4. 三次样条函数(cubic spline functions)的插值求解(python,数值积分)

    第三十七篇 三次样条函数的插值求解 利用三次样条函数进行插值 到目前为止,描述的两种插值方法拉格朗日多项式和正向差分会形成高阶的多项式,但一般情况下,选择阶数的值等于小于数据点的数目更合适.除了考虑计 ...

  5. 清风数学建模学习笔记——应用matlab实现分段三次埃尔米特(Hermite)插值与三次样条插值

    插值算法   数模比赛中,常常需要根据已知的函数点进行数据.模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,模拟产生一些新的但又比较靠谱的值来满足需求 ...

  6. R语言时间序列数据的合并(merge time series):使用merge函数合并时间序列数据、使用zoo包中的na.spline函数使用三次样条方法(cubic spline)填充时间序列缺失值

    ↵ R语言时间序列数据的合并(merge time series):使用merge函数合并时间序列数据.使用zoo包中的na.spline函数使用三次样条方法(cubic spline)填充时间序列缺 ...

  7. 三次样条插值(Spline插值)

    当看到周围的同学抱怨样条的种种困难后,哥终于赶上大家的进度,开始写样条插值函数了. 基本情况: 我们测试的函数以F(x)=1/(1+x^2)为例,检测样条函数S(x)在[-5,0]范围内的插值效果,样 ...

  8. 数学建模 | MATLAB学习 | 插值 一维插值函数、三次样条插值

    1.一维插值函数 Matlab中有现成的一维插值函数interp1,语法为  y=interp1(x0,y0,x,'method') x0,y0是已知的数据向量,其中x应以升序或者降序排列(所有的插值 ...

  9. matlab中内插cubic,cubic与spline插值点处的区别

    cubic与spline都是Matlab的三次样条插值法,但是它们在插值点处仍然有着很微妙的区别,这个区别说明不了两种方法的好坏,只能根据实际情况进行合理筛选.以一维插值为例: clc clear % ...

最新文章

  1. 京东主图怎么保存原图_京东自营怎么做?详解京东平台操作方法
  2. java 鼠标停留时,[Java教程]鼠标悬浮停留三秒 显示大图_星空网
  3. pandas python groupby_pandas之分组groupby()的使用整理与总结
  4. 资深专家深度剖析Kubernetes API Server第2章(共3章)
  5. gentoo hibernate
  6. java判断时间区间 隔天_Java初中级程序员面试题宝典
  7. 第21条:用函数对象表示策略
  8. pytorch 模型可视化_【深度学习】高效使用Pytorch的6个技巧:为你的训练Pipeline提供强大动力...
  9. Power BI Desktop中的分解树
  10. http://maven.apache.org/POM/4.0.0 报红
  11. 在校开发的装柜辅助系统
  12. c语言单片机期末试题及答案,单片机原理与应用期末试题及答案
  13. maven自动部署到tomcat9
  14. 仿ios网易支付登录特效
  15. Python 报错Process finished with exit code -1073740791 (0xC0000409)解决方法
  16. 根轨迹的基本概念与绘制
  17. 系统分析师学习笔记(六)
  18. loj #6046. 「雅礼集训 2017 Day8」爷
  19. python编程做联机游戏大全单机_如何将一款单机双人的游戏做成联机版?
  20. windows编程如何更改窗口图标和光标

热门文章

  1. 红外摄像机镜头的技术知识大全
  2. 不能创建Outlook邮件的解决办法
  3. 如何在Python上用jieba库分析TXT文件的词频
  4. 总结:二分法题目汇总 以及二分法模板
  5. Linux安装与硬盘分区
  6. [POJ3249]Test for Job [拓扑排序+DAG上的最长路径]
  7. JDK容器学习之ArrayList:底层存储和动态扩容
  8. HDoj-1042 大数阶乘
  9. linux $变量含义($0,$1,$2,$#,$@) ----linux 基础
  10. CSS外框高度自动适应