MATLAB中的三次样条插值

时间:2011-10-27 12:37:19

标签: matlab interpolation spline

我在MATLAB中使用interp1函数来插入信号中的一些缺失数据,它就像一个魅力。但是,我想知道该功能是如何工作的。

我检查了函数interp1的代码,该函数使用函数spline。函数spline的代码对我来说非常难以理解,所以我用Google搜索并维基百科,我知道(一般)它是如何工作的,具有自由度,以及函数如何使用多项式(通常是第3阶段)来生成曲线的缺失部分。

如果我有一个包含20个数字的数组,并且缺少8 - 12个(零):

  

4 5 2 3 5 4 3 0 0 0 0 0 4 5 2 4 3 5 4 3

该功能如何确定哪些数字适合?它是一个移动数据的特定宽度的窗口,如处理[1-5],[2-6],[3-7]等?或者它是否在缺失数据的左侧和右侧使用2或3个数字?

我不是在寻找数学解释,我只是想知道它是如何产生它的魔力的。)

1 个答案:

答案 0 :(得分:2)

我仍然不知道这是否会回答你的问题,但我会试着看。

我会尽量清楚易懂,因此为了简单起见,我可能会将一些(可能很重要的)细节分开。

有时人们在不知道其解析表达式的情况下知道一组点的函数值。知道函数值在不在集合中的点的任务称为插值/外推。插值的基本原理是根据最近邻居的值计算所需点处函数的值。

您能想到的最简单的方法是线性插值。未知函数在给定点的值是最近邻值的距离加权平均值。这仅仅意味着如果关注点位于A点的距离1和距离B的距离9,则此时函数的值将为10%B和90%A。这相当于在每个点之间绘制直线你知道函数的价值。

这种方法的问题在于它产生功能的不连续估计。当描述自然现象的函数建模时,这很烦人,因为这些函数通常是连续的。

在其他插值方法中,三次样条插值可以解决这个问题。原理保持相同,除了在每个点之间有一条线,你有一个三阶多项式。对多项式的一些约束使其唯一:即其一阶和二阶导数必须与相邻多项式连续。这确保了插值函数的“平滑性”。

所以对我来说,三次样条插值的“魔力”来自于“平滑度”的假设,它允许这种方法正确地插入描述自然现象的函数。

如果这个答案没用或太简单,我会删除它。