pygeoinf.data_assimilation.pendulum.double package¶
Submodules¶
pygeoinf.data_assimilation.pendulum.double.physics module¶
physics.py
Hamiltonian dynamics, coordinate transformations, and linearised models specifically for the Double Pendulum (4D state space).
State vector: y = [theta1, theta2, p1, p2] Convention: 0 is vertically DOWN. Rotation is Counter-Clockwise.
- pygeoinf.data_assimilation.pendulum.double.physics.eom(t: float, y: ndarray, L1: float = 1.0, L2: float = 1.0, m1: float = 1.0, m2: float = 1.0, g: float = 1.0) List[float][source]¶
Hamilton’s Equations of Motion for the Double Pendulum. Compatible with core.solve_trajectory.
- pygeoinf.data_assimilation.pendulum.double.physics.eom_linear(t: float, y: ndarray, A: ndarray) ndarray[source]¶
Linearised EOM given pre-computed A matrix.
- pygeoinf.data_assimilation.pendulum.double.physics.eom_tangent_linear(t: float, state_aug: ndarray, L1: float = 1.0, L2: float = 1.0, m1: float = 1.0, m2: float = 1.0, g: float = 1.0) ndarray[source]¶
Coupled ODE for Reference (Non-linear) + Perturbation (Linear). State vector (8D): [y (4D), delta_y (4D)]
- pygeoinf.data_assimilation.pendulum.double.physics.get_coords(th1: float | ndarray, th2: float | ndarray, L1: float = 1.0, L2: float = 1.0) Tuple[float | ndarray, ...][source]¶
Converts angles to Cartesian coordinates for both bobs. Convention: (0,0) is the pivot, +y is Up, +x is Right.
- pygeoinf.data_assimilation.pendulum.double.physics.get_jacobian(y: ndarray, L1: float = 1.0, L2: float = 1.0, m1: float = 1.0, m2: float = 1.0, g: float = 1.0) ndarray[source]¶
Computes the Exact Analytic Jacobian Matrix J(y) = df/dy (4x4). Crucial for Extended Kalman Filters (EKF).
pygeoinf.data_assimilation.pendulum.double.visualisation module¶
visualisation.py
Visualisation tools for the Double Pendulum. Focuses on Chaotic Sensitivity (Divergence) and Ensemble particle clouds.
- pygeoinf.data_assimilation.pendulum.double.visualisation.animate_ensemble_phase_space(t_points: ndarray, ensemble_trajectories: ndarray) FuncAnimation[source]¶
Animates the ensemble of particles moving in the two phase planes: (Theta1 vs P1) and (Theta2 vs P2).
- Parameters:
t_points – Time array.
ensemble_trajectories – Array of shape (N_samples, 4, N_time).
- pygeoinf.data_assimilation.pendulum.double.visualisation.animate_pendulum(t_points: ndarray, solution: ndarray, L1: float = 1.0, L2: float = 1.0, trail_len: int = 50) FuncAnimation[source]¶
Physical space animation for the Double Pendulum. Includes a fading trail for the second bob to visualize chaotic paths.
- pygeoinf.data_assimilation.pendulum.double.visualisation.plot_ensemble_phase_space(ensemble_trajectories: ndarray, t_points: ndarray, time_idx: int = -1) None[source]¶
Plots the ensemble particles projected onto (th1, p1) and (th2, p2) planes. Uses generic core scatter tools but configured for the 4D Double Pendulum.
- Parameters:
ensemble_trajectories – Shape (N_samples, 4, N_time).
t_points – Time array.
time_idx – Index of time to plot.
- pygeoinf.data_assimilation.pendulum.double.visualisation.plot_sensitivity_divergence(t_points: ndarray, traj_ref: ndarray, traj_pert: ndarray, title: str = 'Sensitivity to Initial Conditions') None[source]¶
Plots the divergence between two trajectories to demonstrate chaos. Top panel: Time series comparison of Theta 1 & 2. Bottom panel: Log-scale Euclidean distance between states.
- Parameters:
t_points – Time array.
traj_ref – Reference trajectory (4, N_time).
traj_pert – Perturbed trajectory (4, N_time).
Module contents¶
Double Pendulum Submodule.
Focuses on chaotic dynamics, phase space visualisation, and Ensemble (particle) experiments.
- pygeoinf.data_assimilation.pendulum.double.animate_ensemble_phase_space(t_points: ndarray, ensemble_trajectories: ndarray) FuncAnimation[source]¶
Animates the ensemble of particles moving in the two phase planes: (Theta1 vs P1) and (Theta2 vs P2).
- Parameters:
t_points – Time array.
ensemble_trajectories – Array of shape (N_samples, 4, N_time).
- pygeoinf.data_assimilation.pendulum.double.animate_pendulum(t_points: ndarray, solution: ndarray, L1: float = 1.0, L2: float = 1.0, trail_len: int = 50) FuncAnimation[source]¶
Physical space animation for the Double Pendulum. Includes a fading trail for the second bob to visualize chaotic paths.
- pygeoinf.data_assimilation.pendulum.double.eom(t: float, y: ndarray, L1: float = 1.0, L2: float = 1.0, m1: float = 1.0, m2: float = 1.0, g: float = 1.0) List[float][source]¶
Hamilton’s Equations of Motion for the Double Pendulum. Compatible with core.solve_trajectory.
- pygeoinf.data_assimilation.pendulum.double.eom_linear(t: float, y: ndarray, A: ndarray) ndarray[source]¶
Linearised EOM given pre-computed A matrix.
- pygeoinf.data_assimilation.pendulum.double.eom_tangent_linear(t: float, state_aug: ndarray, L1: float = 1.0, L2: float = 1.0, m1: float = 1.0, m2: float = 1.0, g: float = 1.0) ndarray[source]¶
Coupled ODE for Reference (Non-linear) + Perturbation (Linear). State vector (8D): [y (4D), delta_y (4D)]
- pygeoinf.data_assimilation.pendulum.double.get_coords(th1: float | ndarray, th2: float | ndarray, L1: float = 1.0, L2: float = 1.0) Tuple[float | ndarray, ...][source]¶
Converts angles to Cartesian coordinates for both bobs. Convention: (0,0) is the pivot, +y is Up, +x is Right.
- pygeoinf.data_assimilation.pendulum.double.get_jacobian(y: ndarray, L1: float = 1.0, L2: float = 1.0, m1: float = 1.0, m2: float = 1.0, g: float = 1.0) ndarray[source]¶
Computes the Exact Analytic Jacobian Matrix J(y) = df/dy (4x4). Crucial for Extended Kalman Filters (EKF).
- pygeoinf.data_assimilation.pendulum.double.get_linear_matrix(L1: float = 1.0, L2: float = 1.0, m1: float = 1.0, m2: float = 1.0, g: float = 1.0) ndarray[source]¶
Returns the linearised system matrix A for the equilibrium state (0,0,0,0). d/dt(y) = A * y
- pygeoinf.data_assimilation.pendulum.double.get_linear_propagator(dt: float, L1: float = 1.0, L2: float = 1.0, m1: float = 1.0, m2: float = 1.0, g: float = 1.0) ndarray[source]¶
Returns the discrete-time propagator P = exp(A * dt).
- pygeoinf.data_assimilation.pendulum.double.plot_ensemble_phase_space(ensemble_trajectories: ndarray, t_points: ndarray, time_idx: int = -1) None[source]¶
Plots the ensemble particles projected onto (th1, p1) and (th2, p2) planes. Uses generic core scatter tools but configured for the 4D Double Pendulum.
- Parameters:
ensemble_trajectories – Shape (N_samples, 4, N_time).
t_points – Time array.
time_idx – Index of time to plot.
- pygeoinf.data_assimilation.pendulum.double.plot_sensitivity_divergence(t_points: ndarray, traj_ref: ndarray, traj_pert: ndarray, title: str = 'Sensitivity to Initial Conditions') None[source]¶
Plots the divergence between two trajectories to demonstrate chaos. Top panel: Time series comparison of Theta 1 & 2. Bottom panel: Log-scale Euclidean distance between states.
- Parameters:
t_points – Time array.
traj_ref – Reference trajectory (4, N_time).
traj_pert – Perturbed trajectory (4, N_time).