Skip to content

Lambert Solver

lambert(r1, r2, tof, mu=None, prograde=None)

Solve Lambert's problem using Izzo's algorithm (2015).

Given two position vectors and a time of flight, find the velocity vectors for transfer orbits connecting them.

Parameters:

Name Type Description Default
r1 NDArray[float64]

3-element numpy array — departure position (meters)

required
r2 NDArray[float64]

3-element numpy array — arrival position (meters)

required
tof float

Time of flight in seconds (must be positive)

required
mu float | None

Gravitational parameter in m³/s² (default: Earth µ = 3.986e14)

None
prograde bool | None

If True (default), prograde transfer; if False, retrograde

None

Returns:

Type Description
list[tuple[NDArray[float64], NDArray[float64]]]

List of (v1, v2) tuples. Each v1 and v2 is a 3-element numpy array

list[tuple[NDArray[float64], NDArray[float64]]]

in m/s. The first element is the zero-revolution solution; additional

list[tuple[NDArray[float64], NDArray[float64]]]

elements are multi-revolution solutions if they exist.

Raises:

Type Description
ValueError

If inputs are invalid (negative tof, zero position, etc.)

Example
import satkit
import numpy as np

r1 = np.array([7000e3, 0, 0])
r2 = np.array([0, 7000e3, 0])
solutions = satkit.lambert(r1, r2, 3600.0)
v1, v2 = solutions[0]