我使用MATLAB中的interp1函数对信号中的一些缺失数据进行插值,它的工作原理就像一种魅力。但是,我想知道这个函数是如何工作的。
我检查了函数interp1的代码,它使用函数spline。函数spline的代码非常难理解,所以我搜索了它,维基百科对它进行了搜索,我(通常)知道它是如何工作的,自由度,以及函数如何使用多项式(通常是三阶)来生成曲线中缺失的部分。
如果我有一个由20个数字组成的数组,而8-12将丢失(零):
4 5 2 3 5 4 3 0 0 0 4 2 4 3
这个函数是如何确定哪些数字合适的呢?它是否是一个特定宽度的窗口,在数据上移动,比如处理1-5、2-6、3-7等等?还是使用丢失数据的左边和右边的2或3个数字?
我不是在寻找数学解释,我只是想知道它是如何发挥它的魔力的:)
发布于 2011-10-27 15:28:51
我仍然不知道这是否会回答你的问题,但我会尽力看看。
我将尽量清楚易懂,所以为了简单起见,我可能会故意把一些(也许是重要的)细节搁置一边。
有时人们不知道函数的解析表达式,就知道函数在一组点上的价值。在一个不在集合的点上知道函数的值的任务称为内插/外推。插值的基本原理是从它在最近邻处的值计算函数在期望点处的值。
你能想到的最简单的方法是线性插值。给定点上未知函数的值是最近相邻值的距离加权平均值。这仅仅意味着,如果兴趣点在A点的距离1,与点B的距离9,则此时的函数值为10 %B和90 %A,这相当于在每个点之间画直线,其中你知道函数的值。
这种方法的问题在于它产生了函数的不连续估计。当对描述自然现象的函数建模时,这是很烦人的,因为这些函数通常是连续的。
在其它插值方法中,三次样条插值可以解决这一问题。原理是相同的,除了在每一点之间有一条线外,你有一个三次多项式。对多项式的一些约束使得多项式具有唯一性:即它的第一和第二导数必须与相邻多项式连续。这保证了插值函数的“光滑性”。
因此,对我来说,三次样条插值的“魔力”来自于“光滑性”的假设,即这种方法可以正确地插值描述自然现象的函数。
如果这个答案没有用或者过于简单化,我会删除它。
https://stackoverflow.com/questions/7915921
复制相似问题