鉴于学习需要,最近在看三次样条插值有关内容,仅以此作为学习记录,还请大佬们不吝赐教!
目 录
第I型边界
自然边界【Natural Spline】
第II型边界、夹持边界、固定边界【Clamped Spline】
非扭结边界(非节点边界)【Not-A-Knot Spline】
混合边界
循环边界
MATLAB库函数
不同边界情况对比结果
1.第I型边界
即给定两端点的二阶导数值分别为A和B,即:
2.自然边界【Natural Spline】
当左右两端点的二阶导数值为零,即:
上述I型边界退变为自然边界。即该点的曲率为零,曲率计算公式为:
3.第II型边界、夹持边界、固定边界【Clamped Spline】
给定两端点的一阶导数值分别为A和B,即:
4.非扭结边界(非节点边界)【Not-A-Knot Spline】
强制第一个插值点的三阶导数值等于第二个点的三阶导数值,最后第一个点的三阶导数值等于 最后第二个点的三阶导数值,即:
5.混合边界:即将第I型边界和第II型边界混合起来,也分两种情况:
①第一种情况
②第二种情况
6.循环边界:端点处的一阶导和二阶导相等的边界条件,适用于封闭或循环的图形。
MATLAB库函数
目前MATLAB中实现样条插值的函数主要包括有两个函数:
- spline函数
其调用格式如下所示,其返回值是一个结构体变量,其包括我们所需要的三次样条系数。
调用形式:
该函数的默认边界条件是非扭结边界条件,除此之外,其还可以实现第II型边界条件,同时 可以实现一维或者高维的曲线插值。第II型边界条件实现:
- csape函数
默认边界条件是自然边界,即为两端点的二阶导数值为零。
不同边界情况对比结果:
1.自然边界:
cs3=csape(s',xy','variational'); % 自然边界,二阶导数值为0
结果如下:
2.夹持边界
cs3=csape(s',xy','complete',[[1;1],[-0.012;-0.03]]); % 一阶边界条件
结果如下:
3.非扭结边界
cs3=csape(s',xy','not-a-knot'); % 非扭结边界条件
结果如下: