MATLAB中的三次样条插值

MATLAB中的三次样条插值,matlab,interpolation,spline,Matlab,Interpolation,Spline,我正在使用MATLAB中的interp1函数对信号中的一些缺失数据进行插值,它的工作方式很有魅力。但是,我想知道这个函数是如何工作的 我检查了函数interp1的代码,该函数使用函数样条曲线。函数样条曲线的代码对我来说非常难理解,所以我在谷歌和维基百科上搜索了它,我知道(一般)它是如何工作的,自由度,以及函数如何使用多项式(通常是三阶)来生成曲线的缺失部分 如果我有一个由20个数字组成的数组,那么8-12将丢失(零): 45 2 3 5 4 3 0 0 0 0 4 5 2 4 3 4 3 该函数

我正在使用MATLAB中的
interp1
函数对信号中的一些缺失数据进行插值,它的工作方式很有魅力。但是,我想知道这个函数是如何工作的

我检查了函数
interp1
的代码,该函数使用函数
样条曲线。函数<代码>样条曲线的代码对我来说非常难理解,所以我在谷歌和维基百科上搜索了它,我知道(一般)它是如何工作的,自由度,以及函数如何使用多项式(通常是三阶)来生成曲线的缺失部分

如果我有一个由20个数字组成的数组,那么8-12将丢失(零):

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

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


我不是在寻找数学解释,我只是想知道它是如何发挥魔力的:)

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

我会尽量清晰易懂,所以为了简单起见,我可能会有意留下一些(可能是重要的)细节

有时,人们不知道函数的解析表达式,却知道函数在一组点上的值。知道函数在不在集合中的点上的值的任务称为插值/外推。插值的基本原理是从函数在最近邻点的值计算所需点的值

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

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

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

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


如果这个答案不实用或过于简单,我将删除它

如果我理解正确,你想知道三次样条曲线是如何工作的,对吗?如果我没有弄错的话,样条曲线插值是两个相邻节点之间的多项式,多项式的一阶导数和二阶导数是连续的。也许在@Aabaz处回答这个问题会更好-是的,除了在第一个和最后一个节点,它可以采用不同的边界条件(不一定是相切的)。“breaks”也有变化,但现在可以讨论他是想把它看作两条样条线还是一种特殊的类型。@Aabaz-就math.SE而言,我从OP的最后一句话中猜测,他不需要数学解释。谢谢你花时间解释,我想现在已经清楚了。如果线性插值只是在两个已知点之间绘制一条直线,则样条曲线使用一个三阶多项式来填充间隙,并且为了使其成为一条平滑线,它使用该多项式的导数来计算最佳拟合。再次感谢!