Skip to main content

Module low_rank_aug_system_solver

Module low_rank_aug_system_solver 

Source
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):

  1. inner solver factors K (the aug system with Wdiag in place of W) and back-substitutes for csol_diag = K⁻¹ rhs.
  2. If Utilde2_ is set, apply csol += Utilde2 · J2⁻¹ J2⁻ᵀ · Utilde2ᵀ rhs.
  3. If Vtilde1_ is set, apply csol −= 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.

Structs§

AugSysCache
LowRankAugSystemSolver