数值计算一对一映射

计算科学 算法 最近邻
2021-12-02 17:42:26

我有一组由它们的坐标定义的点(x1,y1)在更改了问题的一些参数后,我获得了由它们的坐标定义的第二组点(x2,y2). 这两组点之间存在一对一的映射关系。有没有一种标准的方法来获得这两组点之间最可能的映射?考虑以下点集合:(蓝色、红色和绿色是不同的集合)

3组点。

我想获得从蓝色到红色到绿色的映射: 显示正确映射的 3 组点。

我解决这个问题的第一个想法是计算每个红点的蓝点最近邻,按距离对这些最近邻进行排序,删除最近匹配,重新计算最近邻,然后重复。但是,很容易想到该算法不起作用的情况。(我认为它不适用于上面的点集。)

背景:

我正在解决一个大的特征值问题,并尝试在改变参数时跟踪特征值。

1个回答

要尝试的一件事是修改您的想法:

for x in blue-points:
  for y in red-points, sorted by distance to x:
    find all green points z "close enough" to y + (y-x)
    if angle between vectors (y-x) and (z-y) is "small enough":
      return (x,y,z) as the guess

基本上,您可以尝试使用您的怀疑,即这些点以大致(“局部”)恒定速度沿着平滑曲线移动。任何平滑的曲线都近似接近一条直线,曲线的连续弦之间的夹角很可能很小。在您的情节中,“足够小”的角度可能意味着类似<30.

这不是特定于特征值的;你可以对具有时变系数的多项式的根做同样的事情(这也更容易测试)。有很多点,你需要一个聪明的数据结构来有效地实现它,但你似乎没有很多。

这样做的另一个数学理由是弦之间的角度与曲线的曲率有关(如在 Frenet-Serret 公式中)。所以在某种意义上,这种方法试图最小化或限制它找到的曲线的曲率。