【问题标题】:Minimising interpolation error between two data sets最小化两个数据集之间的插值误差
【发布时间】:2010-11-29 18:59:35
【问题描述】:

在下图的顶部,我们可以看到一些值(y 轴)随时间(x 轴)的变化。

当发生这种情况时,我们会在不同且不可预测的时间对值进行采样,同时我们会在两个数据集之间交替采样,用红色和蓝色表示。

在任何时候计算值时,我们预计红色和蓝色数据集都会返回相似的值。然而,如三个较小的方框所示,情况并非如此。随着时间的推移,来自每个数据集(红色和蓝色)的值会出现分歧,然后收敛于原始值。

最初我使用线性插值来获得一个值,接下来我尝试使用 Catmull-Rom 插值。前者导致一个值靠近在一起,然后在每个数据点之间漂移;后者导致值保持更接近,但平均误差更大。

谁能提出另一种策略或插值方法来提供更大的平滑度(也许通过使用来自每个数据集的更多样本点)?

【问题讨论】:

  • 值得注意的是,我准备牺牲准确性来换取一致性。线性和 Catmull-Rom 插值都保证如果我要求一个恰好是采样点的时间值,它们将返回采样的精确值;我不需要这个保证。
  • 我有点不清楚这是否有帮助,但你知道quasi-random sampling 吗?它在通常使用随机抽样的情况下非常有用,例如整合概率分布。

标签: math compression interpolation sampling


【解决方案1】:

我相信您提出的问题是在没有进一步了解基础抽样过程的情况下没有直接答案的问题。就其本质而言,样本之间的函数值可以仅仅是anything,所以我认为没有办法保证两个样本数组的插值的收敛性。

也就是说,如果您对底层过程有先验知识,那么您可以在多种插值方法中进行选择,以最大限度地减少错误。例如,如果你测量阻力作为机翼速度的函数,你知道关系是平方的 (a*V^2)。然后你可以选择二阶多项式拟合,两个系列的插值匹配很好。

【讨论】:

  • 谢谢ysap,这些值实际上是位置向量的组成部分,因此它是一个连续函数。因此,Catmull-Rom 实际上是一种非常好的插值方法,只是它会在两个数据集之间产生描述的错误。
【解决方案2】:

尝试B-splines:Catmull-Rom 插值(遍历数据点),B 样条进行平滑。
例如,对于均匀间隔的数据(不是你的情况)

Bspline(t) = (data(t-1) + 4*data(t) + data(t+1)) / 6

当然,插值红/蓝曲线取决于红/蓝数据点的间距, 所以不能完美匹配。

【讨论】:

    【解决方案3】:

    我想引用 Introduction to Catmull-Rom Splines 来建议不要使用 Catmull-Rom 来执行此插值任务。

    Catmull-Rom 的功能之一 spline 是指定的曲线 将通过所有的控制 点-并非所有类型都如此 样条曲线。

    根据定义,您的红色插值曲线将通过 所有 个红色数据点,而您的蓝色插值曲线将通过 所有 个蓝色点。因此,您不会得到两个数据集的最佳拟合。

    您可以更改边界条件并使用两个数据集中的数据点进行分段近似,如这些slides 所示。

    【讨论】:

    • 你知道哪些样条线类型不能保证它们通过所有控制点吗?还要感谢幻灯片的链接,我应该注意,两组不一定来自同一个数据集(因此我们无法比较它们),认为它们相同以证明问题很有用。
    【解决方案4】:

    我同意 ysap 的观点,即无法如您预期的那样回答这个问题。可能有更好的插值方法,具体取决于您的模型动力学 - 与 ysap 一样,如果已知,我推荐使用底层动力学的方法。

    关于红色/蓝色样本,我认为您已经对采样和插值数据集进行了很好的观察,我会挑战您最初的期望:

    在任何时候计算值时,我们预计红色和蓝色数据集都会返回相似的值。

    我不希望这样。如果您假设您不能完美地插值 - 特别是如果插值误差与样本中的误差相比很大 - 那么您肯定会有一个连续误差函数,该函数从您的样本点中表现出最长(时间)的最大误差。因此,具有不同样本点的两个数据集应该表现出您看到的行为,因为远离红色样本点(及时)的点可能靠近(及时)蓝色样本点,反之亦然 - 如果您的点交错,这肯定是真的。因此,我希望您展示的内容是:

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

    (如果您没有关于基础动态的信息(频率内容除外),那么 Giacomo 的采样点是关键 - 但是,如果查看 Nyquist 下方的信息,则无需进行插值。)

    【讨论】:

      【解决方案5】:

      在对原始连续函数进行采样时,采样频率应符合Nyquist-Shannon sampling theorem,否则采样过程会引入错误(也称为aliasing)。两个数据集中的误差不同,因此在插值时会产生不同的值。

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

      【讨论】:

        猜你喜欢
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多