自己以前上过数值分析这门课,用的是[1]这本教材,三次样条插值这一节,当时似乎看明白了,但在实际碰到它时,总觉得很神秘,也很心虚。过了好几年之后,想彻底理解这个cubic spline,就翻开以前的书看,看了老半天才看明白,上面写着很多乱七八糟的公式(当然也是有意义的),应该会像以前很快忘掉它们。之前看过Andrew NG写过的机器学习讲义,上面把各个公式娓娓道来,感觉很自然,也就理解的更深。于是乎,自己就在网上找老外是怎么讲这个的,[3]wiki百科也讲的迷迷糊糊的,后来搜到[2],直接醍醐灌顶。

已知函数

r语言 多重插补 r语言三次样条插值_r语言 多重插补

在区间

r语言 多重插补 r语言三次样条插值_插值_02

上的

r语言 多重插补 r语言三次样条插值_插值_03

个节点

r语言 多重插补 r语言三次样条插值_样条_04

  上的值

r语言 多重插补 r语言三次样条插值_插值_05

,求插值函数

r语言 多重插补 r语言三次样条插值_样条_06

,使得:

  1.  ;
  2. 在每个小区间上是三次多项式,记为;
  3.  在 上二阶连续可微,

则函数

r语言 多重插补 r语言三次样条插值_样条_07

 称为

r语言 多重插补 r语言三次样条插值_边界条件_08

 的三次样条插值函数,

r语言 多重插补 r语言三次样条插值_边界条件_09

其中

r语言 多重插补 r语言三次样条插值_插值_10

是三次方函数,具有如下形式:

r语言 多重插补 r语言三次样条插值_样条_11

因此只要确定了这些系数

r语言 多重插补 r语言三次样条插值_边界条件_12

,就计算出了

r语言 多重插补 r语言三次样条插值_边界条件_13

,一共有

r语言 多重插补 r语言三次样条插值_算法 插值 三次样条 cubic spl_14

个系数需要确定。 首先根据

r语言 多重插补 r语言三次样条插值_算法 插值 三次样条 cubic spl_15

,可得:

r语言 多重插补 r语言三次样条插值_边界条件_16

  and 

r语言 多重插补 r语言三次样条插值_样条_17

则可得到

r语言 多重插补 r语言三次样条插值_样条_18

个方程:

r语言 多重插补 r语言三次样条插值_算法 插值 三次样条 cubic spl_19

    and   

r语言 多重插补 r语言三次样条插值_边界条件_20

另外根据

r语言 多重插补 r语言三次样条插值_算法 插值 三次样条 cubic spl_21

 在

r语言 多重插补 r语言三次样条插值_样条_22

 上二阶连续可微,我们需要在点

r语言 多重插补 r语言三次样条插值_插值_23

 上:

r语言 多重插补 r语言三次样条插值_r语言 多重插补_24


r语言 多重插补 r语言三次样条插值_样条_25

这两个方程可以写成:


r语言 多重插补 r语言三次样条插值_插值_26


r语言 多重插补 r语言三次样条插值_r语言 多重插补_27

这里有

r语言 多重插补 r语言三次样条插值_插值_28

个方程,加上之前的

r语言 多重插补 r语言三次样条插值_插值_29

个,目前总共有

r语言 多重插补 r语言三次样条插值_插值_30

个方程,而未知量有

r语言 多重插补 r语言三次样条插值_r语言 多重插补_31

个,这时就需要边界条件来提供两个方程,常用的边界条件有以下三种:

  1. 给定两端点处的导数值, 。特别地,当时,样条曲线在端点处呈水平状态。
  2. 给定两端点处的二阶导数值,   。特别地,当时,称为自然边界条件。
  3. 如果是以为周期的周期函数,则也应该是具有同样周期的周期函数,在端点处需要满足, 

值得注意的是,这

r语言 多重插补 r语言三次样条插值_插值_32

个方程是关于未知量的线性方程,因此很容易通过线性方程组进行求解。

这样以后想忘记都会很难,这里没有给出例子,如果有机会可以给出实现程序。