半径测量值肯定会出现误差。我希望误差量与半径本身成正比。让我们假设测量在其他方面是无偏的。合理的解决方案然后使用加权非线性最小二乘拟合,权重与平方半径成反比。
这是在现有标准的东西(除其他事项外)的Python, R
,数学,许多功能齐全的统计软件包,所以我只是说明它。以下是通过测量到设备位置周围五个随机访问点的距离(相对误差为10%)获得的一些数据:
Mathematica只需要一行代码,而没有可测量的CPU时间来计算拟合度:
fit = NonlinearModelFit[data, Norm[{x, y} - {x0, y0}], {x0, y0}, {x, y}, Weights -> 1/observations^2]
编辑 -
对于大半径,仅通过用Norm[{x, y} - {x0, y0}]
计算球形或椭圆形距离的函数替换欧几里得距离,就可以找到更准确的(球形或椭圆形)解。在Mathematica中,例如,可以通过
fit = NonlinearModelFit[data, GeoDistance[{x, y}, {x0, y0}], {x0, y0}, {x, y},
Weights -> 1/observations^2]
-编辑结束
使用这样的统计技术的一个优势是,它可以为参数(即设备的坐标)生成置信区间,甚至可以为设备位置生成同时置信椭圆。
ellipsoid = fit["ParameterConfidenceRegion", ConfidenceLevel -> 0.95];
fit["ParameterConfidenceIntervalTable", ConfidenceLevel -> 0.95]
绘制数据和解决方案很有帮助:
Graphics[{Opacity[0.2], EdgeForm[Opacity[0.75]], White, Disk[Most[#], Last[#]] & /@ data,
Opacity[1], Red, ellipsoid,
PointSize[0.0125], Blue, Point[source], Red, Point[solution],
PointSize[0.0083], White, Point @ points},
Background -> Black, ImageSize -> 600]
在这种情况下,椭圆的形状是令人感兴趣的:沿NW-SE线的位置不确定性最大。在这里,到三个接入点(到NE和SW)的距离几乎没有变化,并且在到另外两个接入点(到北和东南)的距离之间要权衡误差。
(在某些系统中,可以作为似然函数的轮廓获得更准确的置信区域;此椭圆只是对该轮廓的二阶近似。)
如果无误差地测量半径,则所有圆将至少具有一个相互相交的点,并且-如果该点是唯一的,则它将是唯一的解决方案。
此方法适用于两个或多个访问点。需要三个或更多来获取置信区间。当只有两个可用时,它将找到一个相交点(如果存在);否则,它将找到一个相交点。否则,它将在两个访问点之间选择一个合适的位置。