Expand description
Verified interval Gauss-Newton (a.k.a. Gauss-Newton-Krawczyk) contraction
for over-determined, zero-residual-at-the-root systems F: R² → Rᴹ.
This is the linear-algebra core of the technique described in the
geop-core-geometry curve-curve-intersection algorithm that uses it
([geop_core_geometry::intersection::curve_curve_intersect_gnk], not
visible from here — this crate has no dependency on it): two unknowns
(s, t), M residual equations (M = 3 for a plain curve-curve
coincidence C1(s) - C2(t) = 0 in R³, M = 6 once a tangential root is
deflated with the cross-product condition C1'(s) × C2'(t) = 0). The
shape of the math is identical either way — only M changes — so it
lives here once, generic over M, rather than being duplicated per
deflation stage.
§Why Gauss-Newton, not a square Krawczyk operator
A genuine curve intersection is exactly-determined in a geometric sense
(one point on each curve) but over-determined algebraically (2 unknowns,
M > 2 equations) — there is no square Jacobian to invert. The standard
fix is the normal equations: approximate the Moore-Penrose pseudoinverse
Y ≈ (JᵀJ)⁻¹Jᵀ (a 2×M matrix) and run Krawczyk with Y in place of
J⁻¹:
K(X) = x̂ − Y·F(x̂) + (I − Y·J(X))·(X − x̂)Because a real intersection has F(x*) = 0 exactly (not merely
minimized, as in a least-squares fit), Neumaier’s convergence theory for
verified interval Gauss-Newton on zero-residual over-determined systems
applies directly: the contraction stays quadratic, exactly as for a
square Krawczyk step.
§What X and x̂ are here
Every enclosure in this codebase is carried by the scalar type itself
(ScalInF64/ScalInFPA64 are [lo, hi] intervals — see
scalars::Scalar), so a “box” in (s, t) is just a Vector<S, 2>, one
interval component per unknown. x̂ is the (sharp) midpoint of that box
— a single evaluation point standing in for “the current best guess”,
exactly as Scalar::sharpen/Scalar::midpoint are used elsewhere for
the same purpose (see Scalar::sharpen’s own doc comment). J, J(X)
are Matrix<S, M, 2> — M rows (one per residual component), 2 columns
(∂/∂s, ∂/∂t).
Structs§
- Krawczyk
Step - Outcome of one
gauss_newton_krawczyk_stepcontraction.
Functions§
- gauss_
newton_ krawczyk_ step - One Gauss-Newton-Krawczyk contraction of the box
x_box = (s_box, t_box)againstF(s, t) ∈ Rᴹ.