两个拟合多项式之间最小距离的Python脚本

时间:2017-11-24 17:36:36

标签: python-3.x optimization computational-geometry polynomial-math

我有两个三维点数组,我需要一个函数来告诉我一个数组到下一个数组之间的最小距离。

我尝试使用np.linalg.norm来计算曲线上一个点与另一个曲线上每个点之间的距离,然后取最小值,但运行时间非常长,而且&# 39;不是很优雅。

结果,我试图将n次多项式拟合到两个数组并将它们转换为多项式函数。

此处the link to the polynomial fit

这里[指向rawdata的链接](
https://storage.googleapis.com/pythonstackflowquestion/TestData.csv

列WB标记单独的数组。

我希望得到这样的功能

def间距(WB1,WB2)        return(间距)

其中WB1是n乘3阵列,WB2是z乘3阵列,间距是n乘1阵列。

如果我要说间距(WB2,WB1)

然后我希望将间距作为m乘1的数组。

1 个答案:

答案 0 :(得分:0)

根据你所说的我推断你是拟合三次多项式(在3D中)并且想要最小化两个立方弧之间的距离。

如果参数方程分别为P(u)Q(v),您希望最小化|P(u)-Q(u)|²,这是uv中度数为6的多项式。要在单位平方中最小化它,您需要考虑角点(离散值),沿边缘(1D最小化)和域内(2D最小化)的值。

2D最小化问题是最难的。它需要确定系统的解决方案

P'(u).(P(u) - Q(v) = 0
Q'(v).(P(u) - Q(v) = 0

(其中.是点积)。

这是一个令人不安的数值问题,与直接解决两个点集上的初始问题相比,我认为没有真正的好处。

我建议使用最近邻搜索加速器(如kD树)组织一条曲线的点,并计算到第二条曲线的所有点的最短距离。通过使用加速设备,可以将复杂度从O(N²)降低到大约O(N Log N)。

在计算几何中,在点集中找到最近邻居对的问题是众所周知的,并且在时间O(N Log N)中的最坏情况最优解是经典的。

在你的情况下,你正在寻找最接近的一对,成员在两个不同的子集中。在计算几何中,这可能被称为“最接近的红黑点对”问题或类似问题。我找不到它的痕迹。