我需要计算曲线之间的某种距离。
这些是一般曲线,可能不是函数 - 也就是说,x的某些值可能会映射到多个值。
修改
曲线以X,Y对列表的形式给出,逻辑曲线是按给定顺序通过所有点的线。一个典型的数据集将包括大约1000点
如上所述,曲线可能不是函数,但通常类似于函数
这个问题我们阻止使用interp1或曲线拟合工具箱(在Matlab中)
距离测量我正在考虑曲线之间区域的区域 - 但任何合理的替代方案都可以。
修改 曲线的示例说明以及我想要计算的区域
首选Matlab解决方案,但其他语言也不错。
答案 0 :(得分:1)
如果你有y = f(x)
类型的函数并且它们是在同一个域中定义的,那么找到"距离"的常用方法是使用这里解释的L2范数http://en.wikipedia.org/wiki/L2_norm#p-norm。这只是函数平方之差的绝对值的积分。如果您有参数曲线,则无法直接采用此方法。如果L2规范不能满足您的要求,那么您需要提供更具体的定义,即"距离"。如果您不清楚需要什么,请尝试查看不同类型的数学规范,看看是否有任何常用的数学规范(即L1规范,统一规范)。上面的wikepedia链接是一个很好的起点。如果L2足够好,那么你需要一种方法来计算你所拥有的积分 - 那里有很多数值积分技术,我建议google是你的朋友(或者一本好的数值分析教科书)。
如果你有参数类型曲线,那么这非常重要。使用"区域"在曲线之间不是一个好主意,因为没有明确的方法来定义这个区域,并且在你可以有自相交曲线的一般情况下会变得更加复杂。如果您的曲线以相同的方式进行参数化,您可以尝试一些非常粗略的测量,其中您在参数范围内以等间距值评估每条曲线上的点,然后计算每个曲线之间的距离长度,总和并将平均值作为概念"亲近"。即将您的参数范围划分为集合{u_0,...,u_n}并评估每个i
的curve1(u_i)和curve2(u_i)以生成一组n
成对点。然后求出每对点之间的欧氏距离。
这是非常粗糙的,如果参数化不同,那么它将不会有太多用处。
答案 1 :(得分:0)
您需要定义曲线之间距离的含义。如果它是两条一般曲线之间最接近的方法,则解决问题变得非常困难。
如果“曲线”甚至不能表示为x的单值函数,那么它就变得更加复杂了。
仅仅告诉我们你需要定义“某种距离”这里的陈述过于宽泛,而且它说你还没有想到要解决的问题。
如果您愿意告诉我们的是曲线是两条完全一般的参数曲线,可能是否关闭,或者它们甚至可能不在同一个域上,那么这个问题就变得如此完全不合适了无法回答。在这种情况下,两条曲线之间的区域是多少?
如果曲线是在SAME支持上定义的,那么减去它们并积分差值的绝对值或平方就足够了。但是你已经告诉我们这些“曲线”可能是多值的。在这种情况下,基本上不可能按照你的要求去做。