最小化两个数据集之间的插值误差

4
在下面的图表顶部,我们可以看到一些数值(y轴)随着时间(x轴)而变化。在这个过程中,我们会在不同且无法预测的时间对该值进行取样,并在红色和蓝色两个数据集之间交替取样。
当计算任何时刻的值时,我们期望红色和蓝色数据集都将返回类似的值。然而,正如三个较小的框所示,事实并非如此。随着时间的推移,每个数据集(红色和蓝色)的值将会分散然后重新汇聚到原始值周围。
最初我使用线性插值来获取值,接下来我尝试使用Catmull-Rom插值。前者导致值在每个数据点之间趋于接近然后漂离;后者导致值保持更近,但平均误差更大。
是否有人能够提出另一种策略或插值方法,能够提供更大的平滑度(也许通过使用更多来自每个数据集的采样点)?

值得注意的是,我准备为了一致性而牺牲准确性。线性和Catmull-Rom插值都保证如果我请求一个时间值,恰好是采样点,它们将返回精确的采样值;但我并不需要这个保证。 - davetapley
我有点不确定这是否有帮助,但您是否了解准随机抽样?在集成概率分布等通常使用随机抽样的情况下,它可以非常有帮助。 - Mike Dunlavey
5个回答

2

我认为您所问的问题没有一个直接的答案,需要更多了解样本过程的基础知识。由于其本质,样本之间的函数值可以是任何内容,因此我认为没有办法保证两个样本数组的插值收敛。

话虽如此,如果您事先了解底层过程,那么您可以选择几种插值方法来最小化误差。例如,如果您以机翼速度为函数测量阻力力,则知道其关系是平方(a*V^2)。然后,您可以选择二次多项式拟合,在两个序列的插值之间有相当好的匹配程度。


感谢ysap,这些值实际上将成为位置向量的组成部分,因此它是一个连续函数。因此,Catmull-Rom实际上是一种非常好的插值方法,但它会在两个数据集之间产生所描述的误差。 - davetapley

1

我想引用Catmull-Rom样条曲线介绍来建议不要在这个插值任务中使用Catmull-Rom。

Catmull-Rom样条曲线的一个特点是指定曲线将通过所有控制点,而并非所有类型的样条曲线都具备此特性。

根据定义,您的红色插值曲线将经过所有红色数据点,蓝色插值曲线将经过所有蓝色数据点。因此,您无法获得两个数据集的最佳拟合。

您可以改变边界条件,并使用两个数据集中的数据点进行分段逼近,如这些幻灯片所示。


你知道有哪些样条类型不保证通过所有控制点吗?另外感谢提供幻灯片的链接,我应该注意到这两组数据可能不来自同一数据集(因此我们不能进行比较),但将它们视为相同以演示问题是很有用的。 - davetapley

1

我同意ysap的观点,认为这个问题不能像你期望的那样回答。根据模型动态性质,可能有更好的插值方法 - 正如ysap所说,如果已知底层动态性质,则建议使用这些方法。

关于红色/蓝色样本,我认为您对采样和插值数据集做出了很好的观察,并且我要挑战您最初的期望:

在计算任何时间的值时,我们希望红色和蓝色数据集返回类似的值。

我不指望这样。如果您假设您无法完美地进行插值 - 特别是如果插值误差与样本误差相比较大 - 那么您肯定会有一个连续的误差函数,该函数在离样本点最远(时间)的地方表现出最大的误差。因此,具有不同采样点的两个数据集应该表现出您所看到的行为,因为距离红色采样点较远(时间上),可能接近蓝色采样点(时间上),反之亦然 - 如果像您的点一样错开,这肯定是真实的。因此,我期望您所展示的情况:

随着时间的推移,每个数据集(红色和蓝色)的值将呈现出分歧,然后收敛于原始值。

(如果您没有关于底层动态的信息(除了频率内容),那么Giacomo在采样方面的观点是关键的 - 但是,如果查看低于奈奎斯特的信息,则无需插值。)


1
尝试使用B样条:Catmull-Rom插值(穿过数据点),B样条进行平滑处理。
例如,对于均匀间隔的数据(不是您的情况)
Bspline(t) = (data(t-1) + 4*data(t) + data(t+1)) / 6

当然,插值的红色/蓝色曲线取决于红色/蓝色数据点的间距,因此无法完全匹配。

0

在对原始连续函数进行采样时,采样频率应符合Nyquist-Shannon采样定理,否则采样过程会引入误差(也称为混叠)。由于两个数据集中的误差不同,因此插值时会得到不同的值。

因此,您需要知道原始函数的最高频率B,然后以至少2B的频率收集样本。如果您的函数具有非常高的频率,并且无法快速采样,则应尝试在采样之前将它们滤除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接