Computes formal covariance (H^T·H)^{-1} via LAPACK dpotrf_/dpotri_
after DC convergence. Returns upper-triangle array (21 elements for
6-state, 28 for 7-state with B*), condition number from SVD, and
nstate count. Covariance is computed even for perfect-seed fits.
Bumps extension to v0.5.0 with full install SQL and migration path.
63 lines
3.3 KiB
SQL
63 lines
3.3 KiB
SQL
-- pg_orrery 0.4.0 -> 0.5.0 migration
|
|
--
|
|
-- Adds multi-observer support, IOD bootstrap (seed-free fitting),
|
|
-- and covariance output for uncertainty estimation.
|
|
--
|
|
-- Covariance changes the return type of tle_from_eci and
|
|
-- tle_from_topocentric (5 → 8 OUT params), which requires
|
|
-- DROP + re-CREATE.
|
|
|
|
-- ============================================================
|
|
-- Drop old 5-column OD functions
|
|
-- ============================================================
|
|
|
|
DROP FUNCTION IF EXISTS tle_from_eci(eci_position[], timestamptz[], tle, boolean, int4);
|
|
DROP FUNCTION IF EXISTS tle_from_topocentric(topocentric[], timestamptz[], observer, tle, boolean, int4);
|
|
|
|
-- ============================================================
|
|
-- Re-create with 8-column output (adds covariance)
|
|
-- ============================================================
|
|
|
|
CREATE FUNCTION tle_from_eci(
|
|
positions eci_position[], times timestamptz[],
|
|
seed tle DEFAULT NULL, fit_bstar boolean DEFAULT false,
|
|
max_iter int4 DEFAULT 15,
|
|
OUT fitted_tle tle, OUT iterations int4,
|
|
OUT rms_final float8, OUT rms_initial float8, OUT status text,
|
|
OUT condition_number float8, OUT covariance float8[], OUT nstate int4
|
|
) RETURNS RECORD
|
|
AS 'MODULE_PATHNAME' LANGUAGE C STABLE PARALLEL SAFE;
|
|
COMMENT ON FUNCTION tle_from_eci(eci_position[], timestamptz[], tle, boolean, int4) IS
|
|
'Fit a TLE from ECI position/velocity observations via differential correction. Returns fitted TLE, iteration count, RMS residuals, convergence status, condition number, and formal covariance matrix.';
|
|
|
|
CREATE FUNCTION tle_from_topocentric(
|
|
observations topocentric[], times timestamptz[],
|
|
obs observer,
|
|
seed tle DEFAULT NULL, fit_bstar boolean DEFAULT false,
|
|
max_iter int4 DEFAULT 15,
|
|
OUT fitted_tle tle, OUT iterations int4,
|
|
OUT rms_final float8, OUT rms_initial float8, OUT status text,
|
|
OUT condition_number float8, OUT covariance float8[], OUT nstate int4
|
|
) RETURNS RECORD
|
|
AS 'MODULE_PATHNAME' LANGUAGE C STABLE PARALLEL SAFE;
|
|
COMMENT ON FUNCTION tle_from_topocentric(topocentric[], timestamptz[], observer, tle, boolean, int4) IS
|
|
'Fit a TLE from topocentric (az/el/range) observations via differential correction. Returns fitted TLE, RMS residuals, convergence status, condition number, and formal covariance matrix.';
|
|
|
|
-- ============================================================
|
|
-- Multi-observer topocentric fitting (new overload)
|
|
-- ============================================================
|
|
|
|
CREATE FUNCTION tle_from_topocentric(
|
|
observations topocentric[], times timestamptz[],
|
|
observers observer[], observer_ids int4[],
|
|
seed tle DEFAULT NULL, fit_bstar boolean DEFAULT false,
|
|
max_iter int4 DEFAULT 15,
|
|
OUT fitted_tle tle, OUT iterations int4,
|
|
OUT rms_final float8, OUT rms_initial float8, OUT status text,
|
|
OUT condition_number float8, OUT covariance float8[], OUT nstate int4
|
|
) RETURNS RECORD
|
|
AS 'MODULE_PATHNAME', 'tle_from_topocentric_multi'
|
|
LANGUAGE C STABLE PARALLEL SAFE;
|
|
COMMENT ON FUNCTION tle_from_topocentric(topocentric[], timestamptz[], observer[], int4[], tle, boolean, int4) IS
|
|
'Fit a TLE from topocentric observations collected by multiple ground stations. observer_ids[i] indexes into observers[]. Returns convergence status, condition number, and formal covariance matrix.';
|