方程组的求解本文不做介绍。
一、三次样条插值
1. 定义
三次样条插值(Cublic Spline Interpolation),简称 Spline 插值,是通过一系列样本点的光滑曲线,数学上通过求解三弯矩方程组得出曲线函数组。
(参考:三次样条插值)
2. 解决什么问题?
通过采集数据,通常有两种做法:拟合或差值。拟合不要求曲线通过所有的样本点,讲究神似,即整体趋势一致;插值讲究形似,即要求曲线穿过每个样本点。插值生成的高阶曲线很容易出现龙格库塔现象,所以一般采用分段插值。三次样条插值就是分段插值的一种方式。
二、原理详解
假设在区间 [a, b] 上有 n+1 个样本点,即 [a, b] 区间被划分成 n 个区间 ,其中两个端点
,则有如下:
1. 三次样条方程条件
(1)在每个分段区间上,插值函数都是一个三次方程;
(2)满足插值条件,即每个样本点都被某段插值函数穿过;
(3)曲线光滑,即插值函数二阶及二阶以下导函数连续。
如果 S(x) 是 f(x) 的三次样条插值函数,则必须满足:
(1)插值条件:
(2)连续性条件:
(3)一阶导数连续条件:
(4)二阶导数连续条件:
(参考:三次样条插值算法详解.ppt)
2. 三次样条方程组
每个子区间内有 4 个未知数,一共有 n 个区间,所以一共有 4n 个未知数需要求解,则至少需要 4n 个约束条件。
(1)一阶导数连续
除了两个端点,所有 n-1 个内部点的一阶导数连续,即左右两个三次函数的一阶导数在当前样本点处的值相等,即满足 ,共有 n-1 个方程。
(2)二阶导数连续
除了两个端点,所有 n-1 个内部点的二阶导数连续,即左右两个三次函数的二阶导数在当前样本点处的值相等,即满足 ,共有 n-1 个方程。
(3)每个样本点处连续
a. 除了两个端点,所有 n-1 个内部点都满足 ,共有 2(n-1) 个方程;
b. 两个端点分别满足第一个和最后一个三次函数方程,共有 2 个方程。
(4)边界条件
以上三个条件共有 4n-2 个限制条件了,还差 2 个条件即可求解方程参数,这两个方程我们通过边界条件得到。
有三种边界条件:自然边界、固定边界、非节点处边界。
自然边界:端点二阶导数为零,即 。
(参考:三次样条(cubic spline)插值)
三、和线性插值对比
(1)线性插值
平面上两个点可以确定一条直线,这就是线性插值的原理。所以线性插值生成的曲线是折线,即每相邻两点之间均是直线。
缺点:曲线不够光滑,会导致函数的一阶导函数不连续。
Matlab 命令是 interp1。
(参考:MATLAB插值函数interp1)
(参考:interp1)
(2)三次样条插值
三次样条插值是用三次函数曲线来代替线性插值的直线,即每相邻两点之间均是表达式为 的三次函数曲线。
Matlab 命令是 spline。
优点:高次插值不收敛且不稳定;低次插值既收敛又稳定,但是低次插值光滑性差,如分段线性插值一阶导数不存在。总之,m 次样条函数最优。
(参考:三次样条插值法)
(参考:spline)
(参考:三次样条插值算法详解.ppt)
(参考:Matlab数值分析实例:三次样条插值)
(参考:Python实现线性插值和三次样条插值)