我有一系列距离点。我希望找到一个最符合
条件的观点for (point_i, distance_i) in pointArray:
abs(point - point_i) = distance_i
我认为这可以通过某种回归或最小二乘法来解决,但我在问题表达方面遇到了麻烦。
如果有人可以提供帮助,我们将不胜感激
答案 0 :(得分:4)
您需要定义“最佳”才能回答问题。
您可能想要做的是定义某种错误函数,以确定从给定点开始关闭的程度,然后尝试最小化错误的总和。要使用的错误功能取决于您的实际问题。例如,您可能想要使用(length(point-point_i) - distance) 2 。这将是最小的方块。但也许你并不在乎距离偏离的绝对数量,只关心它们的距离与你预期的距离之间的比例。所以你可以使用(length(point-point_i)/ distance - 1) 2 。也许你得到了一堆传感器的点数和距离。在这种情况下,使用适当的误差函数反映了您测量距离的不确定性。
选择了适当的错误功能后,您需要找到一种优化它的方法。最简单的方法是计算误差函数的梯度,并使用它来跟踪路径查找算法到最低点。如果您的错误函数表现良好,这应该可行,但不是那么快。如果你雄心勃勃,你可以使用多变量Newton-Raphson方法来找到这一点。这会对您的错误函数做出更多假设,并且会有很多工作,但会更快地收敛
。答案 1 :(得分:1)
这个问题通常用线性代数来解决,通过求解“最小二乘法”,最小化误差的平方。
这就是gps接收器如何找到“最适合”来给出坐标。它们将所有不同卫星的“嘈杂”距离集合起来,并找到一组新的距离,这些距离满足单个点,它具有“嘈杂”距离的最小,平方误差。
有许多线性代数库(最主要的是linpack),它们应具有解决这些类型问题的功能。