如果我正确理解了您的问题,那么您在空间中有一个点 x,y,z,并且您想通过从已知站点进行插值来计算误差。您还建议错误读数的有效性取决于距已知错误点的距离。
因此,对于点 x,y,z,您可以计算它与每个已知接收站的距离。然后你有一些从这些距离中计算出来的权重函数。最后,您通过权重函数取加权平均值(或者可能做一些其他技巧来消除异常值)。
这个怎么样:
# known station coordinates (number of rows matching number of stations)
coords = array([
(x1, y1, z1),
(x2, y2, z2),
... ])
# respective error values (number of items matching number of stations)
err_values = array([
e1,
e2),
... ])
# p is a three-element array representing our coordinates
# distances will contain the spatial euclidian distances to the stations
distances = numpy.linalg.norm(coords - p[None,:], axis=1)
# get the weights somehow
weights = my_weight_function(distances)
# return the weighted average
return numpy.average(err_values, weights=weights)
还有一个技巧可能很有用,尤其是在这种情况下。最后一条语句可以替换为:
return numpy.sum(err_values * weights) / (eps + numpy.sum(weights))
eps
基本上是一个加权和,但在分母上加了一个小数。这里的要点是,当我们谈论一个错误时,它应该在离已知点很远的地方为零。否则,我们通常会将已知误差的平均值作为地球另一端的误差,这是不合理的。唯一合理的假设是误差在远处为零。它不是,但我们不知道更好,因此零是最好的猜测。
如果我以错误的方式理解您的问题,请告诉我。(如果您将插值问题视为提高地球表面精度的一种方法,那么实际上地球表面存在 2d 问题,而不是真正的 3D 问题。)