Skip to main content

Module interval_newton

Module interval_newton 

Source
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§

KrawczykStep
Outcome of one gauss_newton_krawczyk_step contraction.

Functions§

gauss_newton_krawczyk_step
One Gauss-Newton-Krawczyk contraction of the box x_box = (s_box, t_box) against F(s, t) ∈ Rᴹ.