Purpose and learning objectives
L03 · Kepler propagation, ephemeris vectors, and frames. This investigation develops a numerical method and tests its output against a declared benchmark, invariant, uncertainty model, or independent implementation.
- Run a specified scientific workflow from the pinned environment.
- Measure an explicit numerical or statistical diagnostic with units and provenance.
- Separate numerical error from physical model discrepancy and interpret a limitation.
Preparation, setup, and inputs
Software: CPython 3.14.6; dependencies in requirements.txt. From repository root run .venv/Scripts/python.exe materials/ASTR474/src/astr474_computations.py. Then use the corresponding CSV/JSON under materials/ASTR474/data/generated/. Required data: generated/jpl_earth_vectors.csv.
Apparatus: computer with local CPU, terminal, text editor, and browser; no telescope, GPU, network account, or paid service is required. Preserve the generated input files and record file hash/version.
Model scope: The ideal circular-orbit sweep is synthetic. The embedded JPL Horizons DE441 vector values are level-2 published ephemeris data not live-verified this session; see the request trace and checksum.
Procedure
- Read the two vector rows and use the data README's traceable request record for target 399, Sun center 10, TDB epochs, J2000 ecliptic frame, vector type, correction convention, and AU/AU-day units.
- Set REBOUND units before adding particles; use Astropy GM_sun and M_earth; transform the initial state consistently and propagate one day with WHFast and IAS15.
- Compare Sun-relative Earth position with the Jan 2 vector row; record residual in AU and km.
- Run the circular two-body timestep sweep; tabulate energy, angular momentum, and one-period endpoint errors.
- Explain why the ephemeris residual is not a pure integrator error and name omitted dynamics/frame assumptions.
Measurement record
| Quantity | Value or field | Unit/convention | Source/method |
|---|---|---|---|
| Input configuration | Record solver, version, seed, timestep/grid/tolerance | As defined by the experiment | Command line and source file |
| Primary diagnostic | Record every resolution/sample/fit row, not just the preferred result | State units and normalization | Generated CSV/JSON |
| Independent reference | Using Astropy GM_sun, the circular 1-AU Kepler period is 365.25690 d. After one day, REBOUND and independent SciPy two-body runs differ from the DE441 Earth-center vector by 126.0 km and 126.1 km respectively; the residual is model/frame scope, not an accuracy claim. | As stated in the generated example | Analytic/JPL/invariant cross-check |
| Uncertainty/sensitivity | Repeat with changed resolution, seed, parameter, or method | Report interval or relative change | Student analysis |
Analysis and uncertainty
Separate floating-point/integration sensitivity from physical model discrepancy; vary timestep and compare REBOUND against independent SciPy DOP853.
Plot the diagnostic against the controlled parameter; label axes, units, normalization, and reference. Explain any non-monotonic point rather than smoothing or dropping it. If propagating independent errors, state why independence is plausible; preserve correlated/common-mode terms separately.
Deliverables and assessment
- Runnable source or notebook export with command, package versions, and all input/output paths.
- One scientific figure plus a machine-readable table of measurements and convergence/sampling/residual diagnostics.
- A 700-1000 word technical report describing model, method, validation, uncertainty categories, and one failed assumption.
- A short claim-evidence table separating result, numerical check, and domain limitation.
Rubric: 30% correct method and setup; 25% validation and numerical diagnostics; 20% uncertainty/provenance; 15% physical interpretation; 10% clarity and reproducibility. Revisions and resubmissions are encouraged under the syllabus mastery policy.
Data and source provenance
The ideal circular-orbit sweep is synthetic. The embedded JPL Horizons DE441 vector values are level-2 published ephemeris data not live-verified this session; see the request trace and checksum. Provenance levels, request records, and source verification limits are documented in reference-log.md; generated files and seeds are documented in data/README.md.
References:
- NumPy 2.5 documentation, random Generator
- SciPy 1.18 documentation, solve_ivp
- SciPy 1.18 documentation, least_squares
- Astropy 8.0.1 documentation, units and constants
- REBOUND documentation, WHFast and units
- NASA/JPL Horizons API documentation
- Rein & Liu 2012, REBOUND: An open-source multi-purpose N-body code for collisional dynamics, A&A 537, A128
- Rein & Tamayo 2015, WHFast, MNRAS 452, 376-388