我在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个数字?
我不是在寻找数学解释,我只是想知道它是如何产生它的魔力的。)
答案 0 :(得分:2)
我仍然不知道这是否会回答你的问题,但我会试着看。
我会尽量清楚易懂,因此为了简单起见,我可能会将一些(可能很重要的)细节分开。
有时人们在不知道其解析表达式的情况下知道一组点的函数值。知道函数值在不在集合中的点的任务称为插值/外推。插值的基本原理是根据最近邻居的值计算所需点处函数的值。
您能想到的最简单的方法是线性插值。未知函数在给定点的值是最近邻值的距离加权平均值。这仅仅意味着如果关注点位于A点的距离1和距离B的距离9,则此时函数的值将为10%B和90%A。这相当于在每个点之间绘制直线你知道函数的价值。
这种方法的问题在于它产生功能的不连续估计。当描述自然现象的函数建模时,这很烦人,因为这些函数通常是连续的。
在其他插值方法中,三次样条插值可以解决这个问题。原理保持相同,除了在每个点之间有一条线,你有一个三阶多项式。对多项式的一些约束使其唯一:即其一阶和二阶导数必须与相邻多项式连续。这确保了插值函数的“平滑性”。
所以对我来说,三次样条插值的“魔力”来自于“平滑度”的假设,它允许这种方法正确地插入描述自然现象的函数。
如果这个答案没用或太简单,我会删除它。