adam_core.orbit_determination.least_squares module

class adam_core.orbit_determination.least_squares.LeastSquares(use_central_difference: bool)[source]

Bases: ABC

EXPERIMENTAL! Orbit refinement using least squares differential correction

In general, assume we are only fitting ra and dec in the observations. Some methods may work for other observation sets as well.

least_squares(initial_orbit: FittedOrbits | Orbits, observations: OrbitDeterminationObservations, prop: Propagator, perturbation_initial_fraction: float = 1e-06, perturbation_multiplier: float = 0.5, rms_epsilon: float = 0.001, max_iterations: float = 20, debug_info: Dict[str, Any] | None = None) Orbits | None[source]

Run least squares to refine the initial orbit. Assumes observations and ephemeris are in Spherical coordinates and only have RA and DEC, and we have only one orbit. Follows Vallado.

Parameters:

initial_orbit: FittedOrbits | Orbits (length 1)

the initial orbit to refine

observations: OrbitDeterminationObservations (length N)

observations to use for refinement, use RA and DEC only

prop: Propagator

propagator to use for ephemerides of perturbed orbits

perturbation_initial_fraction: float, default 1e-6,

initial fraction of parameter value to use for perturbation when computing partial derivatives

perturbation_multiplier: float, default 0.5,

multiplier of the perturbation fraction when RMS change overshoots

rms_epsilon: float, default 1e-3

limit for relative change of RMS between iteration to declare convergence

max_iterations: float, default 20

maximum number of iterations before giving up

debug_info: Dict[str, Any] | None

if provided, this dictionary is populated with debug information

Returns:

Improved orbit (length 1) or None, if no improvement was found.