Skip to content
Snippets Groups Projects
Commit 03d046cd authored by Jesse Mapel's avatar Jesse Mapel Committed by Jesse Mapel
Browse files

Fixed covariance clalculations

parent 592d0cf7
No related branches found
No related tags found
No related merge requests found
import numpy as np import numpy as np
import math import math
def compute_covariance(lat, lon, rad, latsigma=10., lonsigma=10., radsigma=15., semimajor_axis=1737400.0): def compute_covariance(lat, lon, rad, latsigma=10., lonsigma=10., radsigma=15., semimajor_axis=None):
""" """
Given geospatial coordinates, desired accuracy sigmas, and an equitorial radius, compute a 2x3 Given geospatial coordinates, desired accuracy sigmas, and an equitorial radius, compute a 2x3
sigma covariange matrix. sigma covariange matrix.
...@@ -27,7 +27,8 @@ def compute_covariance(lat, lon, rad, latsigma=10., lonsigma=10., radsigma=15., ...@@ -27,7 +27,8 @@ def compute_covariance(lat, lon, rad, latsigma=10., lonsigma=10., radsigma=15.,
The desired radius accuracy in meters (Defualt: 15.0) The desired radius accuracy in meters (Defualt: 15.0)
semimajor_axis : float semimajor_axis : float
The semi-major or equitorial radius in meters (Default: 1737400.0 - Moon) The semi-major or equitorial radius in meters. If not entered,
the local radius will be used.
Returns Returns
------- -------
...@@ -38,11 +39,14 @@ def compute_covariance(lat, lon, rad, latsigma=10., lonsigma=10., radsigma=15., ...@@ -38,11 +39,14 @@ def compute_covariance(lat, lon, rad, latsigma=10., lonsigma=10., radsigma=15.,
lat = math.radians(lat) lat = math.radians(lat)
lon = math.radians(lon) lon = math.radians(lon)
if semimajor_axis is None:
semimajor_axis = rad
# SetSphericalSigmasDistance # SetSphericalSigmasDistance
scaled_lat_sigma = latsigma / semimajor_axis scaled_lat_sigma = latsigma / semimajor_axis
# This is specific to each lon. # This is specific to each lon.
scaled_lon_sigma = lonsigma * math.cos(lat) / semimajor_axis scaled_lon_sigma = lonsigma / (math.cos(lat) * semimajor_axis)
# SetSphericalSigmas # SetSphericalSigmas
cov = np.eye(3,3) cov = np.eye(3,3)
......
...@@ -14,6 +14,6 @@ def test_compute_covariance(): ...@@ -14,6 +14,6 @@ def test_compute_covariance():
sigmarad = 25.0 sigmarad = 25.0
semimajor_rad = 1737400.0 semimajor_rad = 1737400.0
cov = covariance.compute_covariance(lat, lon, rad, sigmalat, sigmalon, sigmarad, semimajor_rad) cov = covariance.compute_covariance(lat, lon, rad, sigmalat, sigmalon, sigmarad, semimajor_rad)
expected = np.array([[132.97888775695, -111.55453178747, -20.08405416233], expected = np.array([[225.85120968, -0.84930178, -20.08405416233],
[93.588991760138, 16.848822261184, 623.27512692323]]) [225.55132129, 16.848822261184, 623.27512692323]])
np.testing.assert_almost_equal(cov, expected) np.testing.assert_almost_equal(cov, expected)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment