【问题标题】:Finding intersections of curves that cannot be represented as y=f(x)查找不能表示为 y=f(x) 的曲线的交点
【发布时间】:2018-10-07 13:53:04
【问题描述】:

我有两对数据集,x1 vs y1 和 x2 vs y2。 x1, y1, x2, y2 的数据分布不均,如下图所示:

我的问题是确定两对数据集x1/y1和x2/y2的交集,如下图所示:

我尝试对数据点进行插值以使间距均匀,但由于 x1/y1 的无效区域存在相同 x 值的多个解决方案。

这是 x1/y1 和 x2/y2 关系的放大图,显示数据集中存在无法在任何方向上插值的节点:

【问题讨论】:

  • 看最后一张图片,如果你切换 xy 的情节(想象转置图像)你会得到曲线是适合插值......你试过吗?
  • 我有,但是y值也有多种解决方案,这也使得插值非常不稳定。
  • 看看你怎么说你的问题是最后一张图像中曲线的交点,如果你切换该图像中的水平轴和垂直轴,问题似乎就消失了(根据我) -我不再确定问题是什么......
  • 我刚刚添加了 x1/y1 与 x2/y2 绘图的放大图像。 x1/y1 数据集中存在无法在任何方向上插值的节点。
  • 运行时有问题吗?您可以成对检查每个线段,以查看哪些子线段相交。它很慢,但您可以通过启发式方法加快速度,例如仅检查具有最近点的段。

标签: matlab interpolation intersection line-intersection


【解决方案1】:

x2/y2 似乎是一条平滑曲线,因此您应该能够使用多项式对其进行分段插值,并获得不错的结果。当然,您不会希望对 x1/y1 执行此操作,因为您的数据很疯狂。我将最后两张图像中的自变量称为 t。您可以使用 matlab spline 函数从 t 和 x2/y2 值的数组中进行插值。在这种情况下,您的 t 值数组应该与您的 x2/y2 值集的大小相同。然后你可以循环你的 x1/y1 点,使用插值在相同的 t 值处估计 x2/y2。然后你可以减去这些值。当此值的符号在两个连续的 x1/y1 点上发生变化时,它们之间就有一个交点。然后在这两个 x1/y1 点之间执行线性插值,并找到该线与插值 x2/y2 函数的交点。代码可能会有点混乱,但它应该可以工作。您将需要查看 MATLAB spline 文档。

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多