Published September 21, 2026 | Version v1

Supplementary Code: Identifiable Uniqueness of Impulsively Forced, Inert, and Stabilized Body Trajectories

  • 1. ROR icon World Bank Group

Description

Overview

This repository contains the code needed to reproduce the numerical illustration (Figures 1–2) and the finite-sample Monte Carlo tables in the paper. The paper asks when trajectory data can uniquely recover the dynamical class of a moving body among three reference regimes — impulsively forced motion (C), inert propagation (I), and active stabilization such as a controlled spacecraft (S) — and when the data instead leave a set of compatible classes. It formulates this as a classical identification problem: the regimes are told apart by the way their trajectories respond to disturbances, and identification succeeds only when the regimes leave distinct observable signatures and the data are precise enough to resolve the difference. The code follows the paper's diagnostic framework of four observables — O1 (forecast-residual regularity), O2 (disturbance attenuation), O3 (excess-kurtosis reduction), and O4 (impulse response) — referred to as O1–O4 throughout; the Mathematical Background section below gives each diagnostic's role in the two-stage identification.

All numerical experiments use synthetic data generated from fixed random seeds; no observational or experimental data are used or generated. The scripts here draw the two schematic/illustrative figures and run the Monte Carlo that documents the finite-sample behavior of the diagnostics.

Key Results

  • Three reference classes. Impulsively forced (C), inert propagation (I), and active stabilization (S), defined within specified reference models and relative to the sampling cadence.
  • Two-stage identification. Stage 1 excludes impulsive forcing (C) through the O3 excess-kurtosis gap; Stage 2 separates active stabilization (S) from inert propagation (I) using disturbance attenuation (O2), error-shape reduction (O3), and the O4b variance response.
  • Identifiable uniqueness vs. a compatible set. When the classes leave distinct signatures and a resolvability margin is met, a nearest-signature classifier consistently recovers the true class; when the margin fails, the estimate is set-identified to the inert–stabilized pair, and the criterion directs follow-up to the unresolved contrast.
  • Operational criterion. The identification result is expressed as a distance rule — classify to the nearest admitted signature within a tolerance — that can be automated.
  • Finite-sample behavior (Monte Carlo, arc lengths \(T = 60, 120, 250\)). The restricted residual-variance test holds approximately its nominal 5% size under the inert null, including a detect-then-test pipeline that re-runs a CUSUM change detector inside every bootstrap resample; power the within-object variance test has high power against stabilization (about 0.90 at the higher gain), roughly stable across arc length, while the cross-sectional level test's power rises with arc length, approaching one at \(T=250\) under the higher signal-to-noise setting; the clean-trajectory screen's leakage under impulsive forcing with additive outliers is quantified; and the O3 kurtosis restoration is confirmed negative under oracle standardization.

Repository Structure

File Role
make_all.py Runs the three generators, then verifies SHA256SUMS.
fig_authority.py Figure 1: actuator geometry and illustrative correction commands → fig_authority.pdf.
fig_regimes.py Figure 2 and macros_fig.tex: inert/stabilized reference-model panels.
mc_diagnostics.py Finite-sample Monte Carlo → macros_mc.tex.
fig_authority.pdf, fig_regimes.pdf Generated figures.
macros_fig.tex, macros_mc.tex Generated numerical macros consumed by the manuscript.
SHA256SUMS Integrity manifest over the files above.
LICENSE MIT license.

Figures

fig_authority.pdf — Figure 1: actuator geometry

Three planar unidirectional jets spaced at 120° produce zero net baseline force when fired equally; differential modulation around that baseline supplies correction authority, whose symmetric headroom depends on both the lower and upper actuator bounds (and is not maximized by firing at the upper bound).

Top row: disturbance rejection around a baseline command.
Bottom row: directional commands constructed by lowering individual jets.

Every arrow is computed from the three jet directions and nonnegative commands; the residual scales are schematic. Geometry alone supplies neither a stochastic covariance law, a centered control policy, nor an O1 (forecast-residual regularity) or O4 (impulse-response) diagnostic result — Figure 1 motivates the actuation model but does not stand in for the statistical arguments.

fig_regimes.pdf — Figure 2: illustrative inert and stabilized reference models

Panels (a)–(b): fixed-seed synthetic inputs with separate inert and platform disturbances — (a) input-innovation proxies (no observer is simulated, so these paths do not by themselves establish O1 covariance stationarity); (b) conditional-variance envelopes for the specified correction law.
Panel (c): generalized-error densities matched to the excess-kurtosis variance-share identity. These are illustrative densities, not exact convolutions; the enforced ordering concerns kurtosis, not the density value at every point.
Panels (d)–(e): the local level ramp (O4a) and the fixed-background variance response (O4b) to an isolated disturbance.

All parameters are illustrative; no observed object is fitted.

Analysis Scripts

Requirements: Python 3.10 or later with NumPy and Matplotlib. The reference build used Python 3.10.6, NumPy 2.2.6 and Matplotlib 3.10.x, and both generated macro files matched the deposited values byte for byte. Fixed random seeds and suppressed volatile PDF metadata support repeatability in a fixed environment; identical output across untested library versions is not promised.

fig_authority.py — Figure 1

Draws the actuator geometry and computed correction arrows. Key functions: sym_set / inradius (symmetric-headroom geometry of the nonnegative command set), jets_lower (directional commands built by lowering jets), draw_jets / panel (rendering). A built-in guard asserts no label overlaps plotted data.

fig_regimes.py — Figure 2 (and macros_fig.tex)

Draws the inert/stabilized reference-model panels and emits the figure/caption macros. Key functions: pulse_draw (fixed-seed disturbance draws), ged_pdf / ged_kurt / ged_lam (generalized-error densities matched by kurtosis to the variance-share identity), mix_big (component scaling for unit total variance).

mc_diagnostics.py — Monte Carlo (and macros_mc.tex)

Simulates the three reference structures at arc lengths \(T = 60, 120, 250\) and writes one \newcommand per reported number. Key functions:

  • vh_test — restricted residual-bootstrap test on the accumulated conditional-variance response, with the null \(v_h = 0\) imposed in the resampling (size under the inert limit I).
  • cusum_t0 — CUSUM mean-shift detector that locates the disturbance onset.
  • vh_detect_full — the full detect-then-test pipeline that re-runs the detector inside every resample, so the selection effect enters both the observed statistic and the null distribution.
  • adf_t / adf_robust — Dickey-Fuller clean-trajectory screen and its outlier-robust variant (leakage under impulsive forcing C, the Franses–Haldrup spurious-rejection effect).
  • levelshift_flag, xsec_flag — level-shift and cross-sectional detection flags.

make_all.py

Runs the three generators from the package root, then strictly verifies SHA256SUMS.

Mathematical Background

Reference classes

The three admitted regimes are impulsively forced motion (C), inert propagation without correction (I), and active corrective stabilization (S). Classification is relative to the specified reference models and the sampling cadence: the inert label is a cadence-relative operational class, since a sufficiently slow modulation is indistinguishable from inert propagation at a fixed sampling rate.

The two-stage identification and the four diagnostics

Diagnostic What it measures Role
O1 forecast-residual regularity regularity (stationarity) of the one-step prediction errors shared regularity precondition for I and S; does not by itself exclude C
O2 disturbance attenuation event-versus-quiet variance against an uncorrected twin separates S from I; its variance contrast is shared by I and C, so it does not by itself exclude C
O3 excess-kurtosis reduction change in the peakedness (fourth cumulant) of the errors Stage 1: excludes C through the excess-kurtosis gap; also separates S from I
O4 impulse response level (O4a) and variance (O4b) response to an isolated disturbance Stage 2: separates S from I through O4b when the variance and shape comparisons are uninformative; O4a is a shared local ramp used as a guard

Stage 1 excludes impulsive forcing (C) via the O3 excess-kurtosis gap; Stage 2 then distinguishes active stabilization (S) from inert propagation (I).

Resolvability margin and identifiable uniqueness

Two conditions must both hold for a unique recovery: the classes must leave distinct observable signatures (separability), and the data must be precise enough to resolve that difference (a resolvability margin — the separation between the true signature and the nearest competing one must exceed the achievable estimation tolerance, and the detection margin must exceed the observation noise). When both hold, the nearest-signature classifier is consistent for the true class. When the margin fails, the result is set-identification: the estimate belongs to the inert–stabilized compatible pair, and the criterion flags the unresolved contrast for targeted follow-up rather than forcing a unique label.

Reproducibility

Run in an extracted copy, because generation overwrites the figures and macros:

  1. Install Python 3.10+ with the required packages:
    pip install numpy matplotlib
  2. Run the master script:
    python make_all.py
    The Monte Carlo can take a few minutes. Any missing or changed manifest entry fails the run.
  3. To check integrity without regenerating:
    python -c "from pathlib import Path; from make_all import verify_manifest; verify_manifest(Path('.'), Path('SHA256SUMS'))"

The generated macro files (macros_fig.tex, macros_mc.tex) and figures reproduce byte-identically in a fixed environment.

Citation

The paper and this software archive are separate works; please cite both.

Paper:

Andrée, B. P. J. (2026). Identifiable Uniqueness of Impulsively Forced, Inert, and Stabilized Body Trajectories. Working paper.

Software (this package):

Andrée, B. P. J. (2026). Identifiable Uniqueness of Impulsively Forced, Inert, and Stabilized Body Trajectories — replication code. Zenodo. https://doi.org/10.5281/zenodo.22876267

License

This project is licensed under the Creative Commons Attribution 4.0 International License. See the LICENSE file for details.

Files

fig_authority.pdf

Files (151.7 kB)

Name Size
md5:967184dd6f7b760f47bc141bf4f8f041
27.4 kB Preview Download
md5:84d3a2626d10af020e4f8052b98345c1
11.8 kB Download
md5:39d610360792e8a057e0e3ecffd94f30
33.3 kB Preview Download
md5:138fe9941191c416fd70e2e0eb20d8d7
20.7 kB Download
md5:b96fb6f355d65c1d9bba1fad1db45c4e
1.1 kB Download
md5:a0ab75ac4432491c963e7658fbcad9a5
280 Bytes Download
md5:977e832420981a31ca9f7732a5490403
3.1 kB Download
md5:200217e28fdd4b39a5aa174c7e80fc75
2.6 kB Download
md5:2873bfa09cd895e1219d49a193edf33a
23.3 kB Download
md5:8dabd07f027446a5cd2cea5052bd88e5
15.6 kB Download
md5:1b35376e6349788635b2cf0d480e7760
11.7 kB Preview Download
md5:e5e5bf6fc0cda74a8f44f704491d6b7d
881 Bytes Download

Additional details

Dates

Created
2026-09-21

Software

Programming language
Python