【问题标题】:calculate distance between curves计算曲线之间的距离
【发布时间】:2013-03-03 15:00:57
【问题描述】:

我需要计算曲线之间的某种距离。

这些是一般曲线,可能不是函数 - 也就是说,x 的某些值可能映射到多个值。

编辑

  • 曲线以 X、Y 对列表的形式给出,逻辑曲线是按给定顺序通过所有点的线。一个典型的数据集将包含大约 1000 个点

  • 如上所述,曲线可能不是函数,但通常类似于函数

这个问题我们是什么阻止使用 interp1 或曲线拟合工具箱(在 Matlab 中)

我在考虑曲线之间区域面积的距离度量 - 但任何合理的替代方案都可以。

编辑 to 曲线的示例图,以及我要计算的区域

首选 Matlab 解决方案,但其他语言也可以。

【问题讨论】:

  • 精确距离测量不重要的原因是它被用作误差函数。只要我能根据足够接近的结果计算出经验阈值,我不关心确切的函数
  • 是的,但还没有告诉我们足够的信息来为您提供任何有建设性的信息。

标签: matlab curve-fitting spline


【解决方案1】:

如果您有 y = f(x) 类型的函数并且它们定义在同一个域中,那么查找“距离”的常用方法是使用 L2 范数,如此处 http://en.wikipedia.org/wiki/L2_norm#p-norm 所述。这只是函数平方差的绝对值的积分。如果你有参数曲线,那么你不能直接使用这种方法。如果 L2 规范不足以满足您的要求,那么您将需要对“距离”的含义提供更具体的定义。如果您不清楚您需要什么,请尝试查看不同类型的数学范数,看看是否有任何常用的是您需要的(即 L1 范数,统一范数)。上面的维基百科链接是一个很好的起点。如果 L2 足够好,那么你需要一种方法来计算你所拥有的积分 - 那里有很多数值积分技术,我建议 google 是你的朋友(或一本好的数值分析教科书)。

如果您确实有参数类型曲线,那么这是非常重要的。使用曲线之间的“区域”不是一个好主意,因为没有明确的方法来定义该区域,并且在您可以拥有自相交曲线的一般情况下会变得更加复杂。如果您的曲线以相同的方式参数化,您可以尝试一些非常粗略的测量,您可以在参数范围内以等距值评估每条曲线上的点,然后计算每条曲线之间的距离长度,求和并将平均值作为概念的“亲近”。即将您的参数范围划分为一组 {u_0, ... , u_n} 并为每个 i 评估 curve1(u_i) 和 curve2(u_i) 以生成一组 n 配对点。然后将每对点之间的欧几里得距离相加。

虽然这非常非常粗糙,如果参数化不同,那么它不会有太大用处。

【讨论】:

    【解决方案2】:

    您需要定义曲线之间的距离是什么意思。如果它是两条一般曲线之间最接近的方法,那么解决这个问题就变得相当困难了。

    如果“曲线”甚至不能表示为 x 的单值函数,那么它会变得更加复杂。

    仅仅告诉我们您需要定义“某种距离”过于宽泛,无法成为此处的主题,而且它表示您还没有考虑到您希望解决的问题。

    如果您只想告诉我们这些曲线是两条完全通用的参数曲线,它们可能是闭合的,也可能不是闭合的,或者它们甚至可能不在同一个域上,那么这个问题就变得完全不适定了无法回答。在这种情况下,两条曲线之间的面积是多少?

    如果曲线是在 SAME 支持上定义的,那么减去它们并积分绝对值或差的平方就足够了。但是您已经告诉我们,这些“曲线”可能是多值的。在这种情况下,基本上不可能按照您的要求去做。

    【讨论】:

      猜你喜欢
      • 2013-07-17
      • 2021-05-16
      • 2019-09-25
      • 2014-01-28
      • 2021-04-26
      • 1970-01-01
      • 2011-07-10
      • 2014-11-29
      • 2021-08-02
      相关资源
      最近更新 更多