Expand description
Low-rank augmented system solver — port of
Algorithm/IpLowRankAugSystemSolver.{hpp,cpp}.
Wraps another AugSystemSolver and exploits a LowRankUpdateSymMatrix
Hessian via the Sherman-Morrison-Woodbury identity. The wrapped
solver factorizes the diagonal part B0; this solver applies the
rank-(nV + nU) correction using cached
Vtilde1 = K⁻¹ V and Utilde2 = K⁻¹ U − Vtilde1·(J1^{-T}J1^{-1}·Vtilde1ᵀU)
plus their dense Cholesky factors J1 = chol(I + Vtilde1ᵀ V) and
J2 = chol(I − Utilde2ᵀ U).
The augmented-system solution comes from upstream’s recipe
(IpLowRankAugSystemSolver.cpp:179-228):
- inner solver factors
K(the aug system withWdiagin place ofW) and back-substitutes forcsol_diag = K⁻¹ rhs. - If
Utilde2_is set, applycsol += Utilde2 · J2⁻¹ J2⁻ᵀ · Utilde2ᵀ rhs. - If
Vtilde1_is set, applycsol −= Vtilde1 · J1⁻¹ J1⁻ᵀ · Vtilde1ᵀ rhs.
Vtilde1 and Utilde2 are stored as four separate per-block
MultiVectorMatrixes (x, s, c, d) — the same data that upstream
packs into a 4-component CompoundVector of dense columns. This
keeps the SMW arithmetic in dense linalg without needing a
compound-vector storage class.