zoukankan      html  css  js  c++  java
  • 三次样条插值 cubic spline interpolation

    什么是三次样条插值

      插值(interpolation)是在已知部分数据节点(knots)的情况下,求解经过这些已知点的曲线,

    然后根据得到的曲线进行未知位置点函数值预测的方法(未知点在上述已知点自变量范围内)。

      样条(spline)是软尺(elastic ruler)的术语说法,在技术制图中,使用软尺连接两个相邻数据点,

    以达到连接曲线光滑的效果。

      样条插值是一种分段多项式(piecewise polynomial)插值法。数学上,曲线光滑需要在曲线上处处一阶导连续,

    因此,在节点处需要满足一阶导数相等。另外,为了使得曲线的曲率最小,要求曲线二阶导连续【1】

    在节点处需要二阶导相等。

      三次及以上多项式可以满足节点处光滑和曲率最小要求,但是次数高的曲线容易震荡,因此,就选用三次多项式即可。

    数学表述

      假设有n个已知节点:

          

      函数关系记为: 

      在区间  中插值多项式曲线: 

            

    注意,这里头曲线为,尾曲线为

      插值在节点处满足条件:

      (1)曲线经过节点:

        

      (2)曲线一阶导连续(光滑):

        

      (3)曲线二阶导连续(曲率最小):

        

      边界条件:对两端节点的约束。

      (B1)自然(natural (or free))边界条件

        

      (B2)固定(clamped)边界条件

        固定一阶导数:

         ,

        固定二阶导数:

        

      (B3)非节点边界(not-a-knot )

        要求在第二个节点  和倒数第二个节点 ,曲线的三阶导也连续:

        

        

    三次多样式函数的计算

      样条函数采用n-1个三次多项式,每个三次多项式有4个参数,一共是4n-4个参数,

    因此需要4n-4个方程。

        条件(1)n-1个曲线每个两端经过节点,提供2(n-1)=2n-2个方程;

        条件(2)n-1个曲线相邻一阶导连续,提供n-2个方程;

        条件(3)n-1个曲线相邻二阶导连续,提供n-2个方程;

      以上一共是4n-6个方程,还需要2个方程,这两个方程由边界条件提供,条件(B1), (B2), (B3)

    每个均提供2个方程,这样就凑够了4n-4个方程。

      

    计算的例子

      n个节点,n-1条曲线。在区间  内,令第i条曲线为:

        

      一二三阶导分别为:

        一阶:  

        二阶:  

        三阶:  

      接下来,套用节点条件和边界条件:

      先假设相邻节点横纵坐标的差值分别为: 

        条件(1):曲线  已经满足第一个式子:

        第二式 : 

          (I)    

        条件(2):

          (II)      

        条件(3):

          (III)           

        边界条件以非节点(Not-A_Knot)条件为例, 得:

          (IV)  

      联立方程(I)和(II), 分别消去  和  得:

        ,     

      带入方程(III)得:

        (V)    

      这里i的最大值应该取不到n-3,当i=n-3时,上式左边将出现 ,而参数a的范围是从0到n-2,

    所以不存在这项,此式一共是n-2个方程。

        另外,方程(II)和(III)都不支持 ,需要单独计算 

        由方程(I),(III)分别有:

          

          

        =>

          

          

      由边界条件方程(IV)中的  得:

        

      方程(V)取i=0有:

        

      与上式联立消去,得:

        (VI)  

      另由  得:

        (VII)   

       方程(V), (VI), (VII)联立,n-1个方程,n-1个未知数(),参数a得解,然后在算出参数b和c即可。

      

    References:

    [1] Wikipedia: spline interpolation

  • 相关阅读:
    2015年创业中遇到的技术问题:1-10(乱码-SpringMVC-jquery-JSON等)
    2015年创业中遇到的技术问题:1-10(乱码-SpringMVC-jquery-JSON等)
    热烈庆祝UE4完全免费Free---GitHub上源码的关联方法
    关于团队沟通,达成结论的一个看法
    关于团队沟通,达成结论的一个看法
    C++生成GIF小结
    最近交流创业-拉投资-谈合作的一些经验总结
    最近交流创业-拉投资-谈合作的一些经验总结
    微信开发学习日记(一):快速阅读5本书,掌握整体背景
    Netweaver和CloudFoundry里的trace开关
  • 原文地址:https://www.cnblogs.com/tlz888/p/11454772.html
Copyright © 2011-2022 走看看