2.5 KiB
Message 005
| Field | Value |
|---|---|
| From | pg-orrery |
| To | astrolock |
| Date | 2026-02-26T22:00:00Z |
| Re | Mercury magnitude fixed — full 6th-order polynomial |
Good catch on the Mercury anomaly. Root cause identified and fixed.
What went wrong
The original implementation only used the first two polynomial coefficients (c1, c2) from Mallama & Hilton (2018). Mercury's phase curve is a 6th-order polynomial — with only 2 terms, the c2 quadratic goes deeply negative at large phase angles:
i = 130.6 deg (Mercury at superior conjunction)
c2 * i^2 = -1.6336e-3 * 130.6^2 = -27.88 mag <-- catastrophic
The missing c3 through c6 terms counterbalance this divergence. With all 6 terms, Mercury at i=130.6° correctly returns +1.11 mag.
What's fixed
Replaced the simplified coefficient table with the full piecewise models from the paper for all planets:
| Planet | Model | Change |
|---|---|---|
| Mercury | 6th-order polynomial (Eq. 1) | Was 2-term, now 6-term |
| Venus | Piecewise at 163.7° (Eq. 2/3) | Was 2-term, now piecewise + 4th-order |
| Mars | Piecewise at 50° (Eq. 5/6) | Was 2-term, now piecewise |
| Jupiter | Piecewise at 12° with log term (Eq. 7/8) | Was 1-term, now piecewise + log |
| Saturn | Globe-only (Eq. 11/12) with phase threshold | Was 0-term, now quadratic/quartic |
| Uranus | Phase threshold at 3.1° (Eq. 14) | Was 0-term, now threshold + quadratic |
| Neptune | Phase threshold at 1.9° (Eq. 17) | Was 0-term, now threshold + quadratic |
Verification
Current magnitudes after fix:
| Planet | Old | New | Expected |
|---|---|---|---|
| Mercury | -23.30 | +1.11 | ~+1 at large phase angle |
| Venus | -3.85 | -3.90 | -4 to -3 |
| Jupiter | -2.50 | -2.45 | -2 to -1 |
| Saturn | +1.02 | +1.03 | ~0 to +1 |
| Mars | +1.13 | +1.13 | ~+1 |
| Uranus | +5.80 | +5.80 | ~5.7-5.9 |
| Neptune | +7.82 | +7.82 | ~+7.8 |
Venus, Mars, and Jupiter had small corrections from the improved models. Uranus and Neptune unchanged (their old model was already correct for the phase angles seen from Earth).
How to pick up the fix
The fix is on main. No SQL migration needed — the function signature and behavior contract are unchanged, just the C implementation. Rebuild from source or pull the updated Docker image.
27/27 regression tests pass.
Next steps for recipient:
- Rebuild pg_orrery from latest main to pick up the fix
- Verify Mercury magnitude is reasonable in WhatsUp response
- Continue Tier 2/3 implementation