曲线坐标系与直角坐标系转换(二)——基础:三次样条插值原理(cubic spline)

一、引入

上一篇提到插值多项式,几次函数就称为几次样条函数如,

二次样条函数为:f(x) = a*x^2 + b*x + c

三次样条函数为:f(x) = a*x^3 + b^x^2 + c*x +d

x=[1,3,5,7,9];

y=[2,4,6,8,10];有5个节点,4个区间

      对于二次样条函数,需要求4*3 = 12个参数,根据已知端点(1,5):2个方程;中间曲线方程在节点处的值必须相等(2,3,4):3*2 = 6个方程;中间节点处的一阶导数的值必须相等(2,3,4):3个方程;假设第一个方程的二阶导数为0,即a1=0,1个方程;一共 2+6+3+1=12个方程。

对于三次样条函数4*4=16个参数,也就是找出16个方程就解决了问题,除与上面相同外,中间的二阶导相等,3个方程,假设第一个方程的二阶导数为0,即a1=0,b1=0,2个方程,一共16个方程。

二、原理

简而言之,就是依然对每一个小区间进行插值(每一个区间都是一个三次多项式),但是我们不需要依赖于导数的已知;由于我们要做的就是使得端点出满足某种条件的光滑(一般来说,三次样条插值就是要满足二阶导数连续),根据这个要求,我们就可以在未知导数的情况下推导出样条函数。具体方法看下面

样条函数确定:

N个区间上,每个区间求三次样条插值函数,显然一共需要4n个条件

依然按照第一部分的方法,对中间点区间段,端点,这里分为对中间的节点部分显示条件,隐式条件

1. 显式条件

对于给定节点:image

函数值:image

对于样条函数S(x),满足:image

则n个区间各有2个条件,共2n个。

2. 隐式条件:

三次样条插值,一次导数连续且二次导数连续,即满足:

image

这样,n个区间可以找出n-1对导数相等条件。至此,可以找出2n+2(n-1) = 4n-2个条件。

3. 边界条件:

一般来说,在整个插值区间[a,b]上,会对边界[a,b]端点有状态的要求。这就是边界条件,有了这两个边界条件,就得到了需要的4n个条件。

边界条件一般有三种:

1) 一阶条件

    即,给出端点处的一阶导数值。

2) 二阶条件

    即,给出端点处的二阶导数值。

3) 循环(周期)条件

    即,f(x)是一个周期函数时,端点a,b处的一阶导数值、二阶导数值分别相等。

具体解法:

设分段样条函数s(x)在0到n个节点处的二阶导数值,为:

image

那么,在区间image上,image显然是线性函数,且知:

image

那么,显然可以由线性插值,得到每一区间image的线性表达式。

积分两次,就可以得到每一个image

积分,得:每一区间上的样条函数 :

image

对于引入的两个常数c1,c2,使用两个边界条件,自然可以求解得到:

image

对所有区间,整理后得到关于Mj-1,Mj,Mj+1的方程:

image

其中:

clip_image106

这称作“三弯矩方程”。

最终,由着n-1个方程,再加两个边界条件(这里我使用一阶条件),直接带入,联立n+1个方程,得到:

clip_image107

至此,样条插值变为求解此矩阵形式的方程组。

可以看到,系数矩阵严格对角占优,矩阵可逆,方程组存在唯一解,从而可以解出M0…Mn。而此方程组的解法并不困难,计算非常快捷

三、三次样条插值总结

根据上述求解系数方程总结为矩阵形式

算法总结

参考:

 三次样条插值: https://blog.csdn.net/flyingleo1981/article/details/53008931/

各种插值方法及原理:https://www.cnblogs.com/duye/p/8671820.html

栗子:https://blog.csdn.net/deramer1/article/details/79034201

猜你喜欢

转载自blog.csdn.net/qinze5857/article/details/86012233
今日推荐