1

我有一组 GPS 站,我知道其坐标 (x,y,z),对于每个站,我也有一个错误 (e)。这些站当然间隔不均匀,否则就太容易了。问题是,为了计算一个站的误差 e,我只使用了该站,但我也想考虑其他站。

我的问题是:给定一组不均匀间隔的 (x,y,z,e) 点,我如何根据点之间的空间距离对 e 进行插值?插值不需要精确,因为我在已经拥有它的点上重新计算 e。另外,我正在寻找比反距离或类似的东西更清洁的东西。例如,样条曲线会很好。

根据我的阅读, scipy.interpolate 包的 splev 函数似乎可以解决问题,但我无法理解它是如何工作的,或者我应该将它作为参数提供什么。

我有人可以解释这应该如何工作,或者向我指出另一种方法,这会很棒。

4

1 回答 1

1

如果我正确理解了您的问题,那么您在空间中有一个点 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 问题。)

于 2014-06-15T22:25:26.690 回答