无论是牛顿插值还是拉格朗日插值,都只能保证在节点处的函数值没有误差。hermite插值更加复杂,可以保证一阶导数也连续,目前常用的是三次样条插值
一、三次样条插值概念
- 不超过3次
- 节点处无误差
- 一阶导数和二阶导数节点处无误差
如果函数值和函数在点的倒数值是已知的,也就是我们有一下的已知条件
这不就是hermite插值的已知条件吗,我们可以利用Hermite插值先进行一次插值:
但是此时其实我们是不知道
m
i
m_i
mi的值的,所以我们需要求出他,而现在我们只剩下了一个条件,端点处二阶导数连续:令
h
i
h_i
hi表示
i
−
i
+
1
i-i+1
i−i+1区间的长度,将
s
(
x
)
s(x)
s(x)转化成下面的形式
然后我们求一个二阶导数:
因为我们的二阶导数需要在端点处连续,也就是说在
[
x
i
,
x
i
−
1
]
[x_i,x_{i-1}]
[xi,xi−1]区间的
s
′
′
(
x
i
)
s''(x_i)
s′′(xi)要等于区间
[
x
i
−
1
,
x
i
]
[x_{i-1},x_i]
[xi−1,xi]上二阶导数的对
x
i
x_i
xi的值,所以我们将上式的下标
i
i
i换成
i
−
1
i-1
i−1,
此时我们根据区间端点处二阶导数连续的定义,得到下面的等式:
变化不复杂,就是简单的移相合并而已
画圈的部分是我们必须化为1的部分,只有这样我们才能吧
m
i
m_i
mi单独拿出来,进行一系列的化简:
这不就是一个关于
m
i
m_i
mi的方程组🐴,把它写成下面的形式就更直观了:
共有𝑛 + 1个未知数,𝑛 − 1个方程,好像不能解,所以我们仍然需要其他的计算条件,不妨考虑一下边界(
x
0
,
x
n
x_0,x_n
x0,xn)的情况:(注意
m
i
m_i
mi的定义,他表示的是一阶导数值),以下是可能给出的两种边界条件,只要有任意一种边界条件给出,我们就可以多出两个等式,就可以解了。tips:注意我们上面有两个二阶导数的公式,一个的参数是
x
−
x^-
x−,另一个是
x
+
x^+
x+,对
x
0
x_0
x0而言我们要带入
s
′
′
(
x
0
+
)
s''(x_0^+)
s′′(x0+),只能在
x
0
x_0
x0的右端点计算二阶导数。相反对于
x
n
x_n
xn,我们只能带入
s
′
′
(
x
n
−
)
s''(x_n^-)
s′′(xn−)也就是在左端点处计算二阶倒数。(
x
n
x_n
xn再往右就没有定义了)
具体带入的过程:
然后我们就能得到一个可解的方程组“
然后我们用 追赶法求解三对角方程组
算法总结