Source code for astrodynx.twobody._lagrange

import jax.numpy as jnp
from jax.typing import ArrayLike
from jax import Array

"""Lagrange coefficients for two-body orbital mechanics."""


[docs] def lagrange_F(U2: ArrayLike, r0_mag: ArrayLike = 1) -> ArrayLike: r"""The Lagrange F function Args: U2: The universal function U2. r0_mag: The radius at the initial time. Returns: The value of the Lagrange F function. Notes: The Lagrange F function is defined as: $$ F = 1 - \frac{U_2}{r_0} $$ where $U_2$ is the universal function U2 and $r_0$ is the radius at the initial time. References: Battin, 1999, pp.179. Examples: A simple example: >>> import jax.numpy as jnp >>> import astrodynx as adx >>> U2 = 1.0 >>> r0 = 1.0 >>> adx.twobody.lagrange_F(U2, r0) 0.0 With broadcasting: >>> U2 = jnp.array([1.0, 2.0]) >>> r0 = jnp.array([1.0, 1.0]) >>> adx.twobody.lagrange_F(U2, r0) Array([ 0., -1.], dtype=float32) """ return 1 - U2 / r0_mag
[docs] def lagrange_G( U1: ArrayLike, U2: ArrayLike, sigma0: ArrayLike = 0, r0_mag: ArrayLike = 1, mu: ArrayLike = 1, ) -> Array: r"""The Lagrange G function Args: U1: The universal function U1. U2: The universal function U2. sigma0: The sigma function at the initial time. r0_mag: The radius at the initial time. mu: The gravitational parameter. Returns: The value of the Lagrange G function. Notes: The Lagrange G function is defined as: $$ G = \frac{r_0 U_1 + \sigma_0 U_2}{\sqrt{\mu}} $$ where $U_1$ is the universal function U1, $U_2$ is the universal function U2, $\sigma_0$ is the sigma function at the initial time, $r_0$ is the radius at the initial time, and $\mu$ is the gravitational parameter. References: Battin, 1999, pp.179. Examples: A simple example: >>> import jax.numpy as jnp >>> import astrodynx as adx >>> U1 = 1.0 >>> U2 = 1.0 >>> sigma0 = 0.0 >>> r0 = 1.0 >>> mu = 1.0 >>> adx.twobody.lagrange_G(U1, U2, sigma0, r0, mu) Array(1., dtype=float32, weak_type=True) With broadcasting: >>> U1 = jnp.array([1.0, 2.0]) >>> U2 = jnp.array([1.0, 1.0]) >>> sigma0 = jnp.array([0.0, 0.0]) >>> r0 = jnp.array([1.0, 1.0]) >>> mu = jnp.array([1.0, 1.0]) >>> adx.twobody.lagrange_G(U1, U2, sigma0, r0, mu) Array([1., 2.], dtype=float32) """ return (r0_mag * U1 + sigma0 * U2) / jnp.sqrt(mu)
[docs] def lagrange_Ft( U1: ArrayLike, r_mag: ArrayLike, r0_mag: ArrayLike = 1, mu: ArrayLike = 1 ) -> Array: r"""The Lagrange Ft function Args: U1: The universal function U1. r_mag: The radius at the current time. r0_mag: The radius at the initial time. mu: The gravitational parameter. Returns: The value of the Lagrange Ft function. Notes: The Lagrange Ft function is defined as: $$ F_t = -\frac{\sqrt{\mu}}{r r_0} U_1 $$ where $U_1$ is the universal function U1, $r$ is the radius at the current time, $r_0$ is the radius at the initial time, and $\mu$ is the gravitational parameter. References: Battin, 1999, pp.179. Examples: A simple example: >>> import jax.numpy as jnp >>> import astrodynx as adx >>> U1 = 1.0 >>> r = 1.0 >>> r0 = 1.0 >>> mu = 1.0 >>> adx.twobody.lagrange_Ft(U1, r, r0, mu) Array(-1., dtype=float32, weak_type=True) With broadcasting: >>> U1 = jnp.array([1.0, 2.0]) >>> r = jnp.array([1.0, 1.0]) >>> r0 = jnp.array([1.0, 1.0]) >>> mu = jnp.array([1.0, 1.0]) >>> adx.twobody.lagrange_Ft(U1, r, r0, mu) Array([-1., -2.], dtype=float32) """ return -jnp.sqrt(mu) / r_mag * U1 / r0_mag
[docs] def lagrange_Gt(U2: ArrayLike, r_mag: ArrayLike) -> ArrayLike: r"""The Lagrange Gt function Args: U2: The universal function U2. r_mag: The radius at the current time. Returns: The value of the Lagrange Gt function. Notes: The Lagrange Gt function is defined as: $$ G_t = 1 - \frac{U_2}{r} $$ where $U_2$ is the universal function U2 and $r$ is the radius at the current time. References: Battin, 1999, pp.179. Examples: A simple example: >>> import jax.numpy as jnp >>> import astrodynx as adx >>> U2 = 1.0 >>> r = 1.0 >>> adx.twobody.lagrange_Gt(U2, r) 0.0 With broadcasting: >>> U2 = jnp.array([1.0, 2.0]) >>> r = jnp.array([1.0, 1.0]) >>> adx.twobody.lagrange_Gt(U2, r) Array([ 0., -1.], dtype=float32) """ return 1 - U2 / r_mag