@@ -93,6 +93,10 @@ namespace orbit_fit
9393 // short arcs) and the fit is reported as weakly constrained (flag = 6).
9494 static constexpr double WEAK_NONGRAV_RCOND = 1e-8 ;
9595
96+ // Placeholder amplitude (au/day^2) used to keep a non-grav parameter's column
97+ // non-degenerate when its seed is zero; see the seeding loop in orbit_fit.
98+ static constexpr double NONGRAV_SEED_PLACEHOLDER = 1e-20 ;
99+
96100 // Arcseconds per radian (180*3600/pi). Converts astrometric/rate
97101 // uncertainties from arcseconds to radians and scales residuals for display.
98102 static constexpr double ARCSEC_PER_RAD = 206265.0 ;
@@ -1103,8 +1107,13 @@ namespace orbit_fit
11031107 // active[] holds the param indices (0=A1,1=A2,2=A3) in column order. ASSIST
11041108 // skips the non-grav block when A1=A2=A3=0, which would zero the param
11051109 // columns; seed each active param with a tiny nonzero value so its column
1106- // is non-degenerate (the partial is independent of the param's magnitude,
1107- // and 1e-15 au/day^2 is dynamically negligible).
1110+ // is non-degenerate. The partial does not depend on the seed's magnitude,
1111+ // so the seed only has to be small enough to be dynamically irrelevant.
1112+ // It was 1e-15 au/day^2, which is not: real Yarkovsky amplitudes are of
1113+ // that order, so on a long arc with precise data the placeholder is a
1114+ // sizeable fraction of the signal. On (6489) Golevka it is 6% of the true
1115+ // A2 and raises the starting chi-square from 12,888 to 138,416 before the
1116+ // first iteration. 1e-20 restores the gravity-only chi-square exactly.
11081117 std::vector<int > active;
11091118 for (int i = 0 ; i < 3 ; i++)
11101119 if (nongrav_mask & (1 << i))
@@ -1129,9 +1138,9 @@ namespace orbit_fit
11291138 for (int k = 0 ; k < nactive; k++)
11301139 {
11311140 if (a123[active[k]] == 0.0 )
1132- a123[active[k]] = 1e-15 ;
1141+ a123[active[k]] = NONGRAV_SEED_PLACEHOLDER ;
11331142 if (per_arc && a123b[active[k]] == 0.0 )
1134- a123b[active[k]] = 1e-15 ;
1143+ a123b[active[k]] = NONGRAV_SEED_PLACEHOLDER ;
11351144 }
11361145
11371146 // #419 sequential update: snapshot the prior mean x0 (= the seed state)
0 commit comments