8 auto SchurComplementSolver::checkDecomposition() const ->
void
15 case Eigen::NumericalIssue:
16 assert(0 &&
"SchurComplementSolver found Eigen::NumericalIssue.");
19 case Eigen::NoConvergence:
20 assert(0 &&
"SchurComplementSolver found Eigen::NoConvergence.");
23 case Eigen::InvalidInput:
24 assert(0 &&
"SchurComplementSolver found Eigen::InvalidInput.");
28 assert(0 &&
"SchurComplementSolver failed.");
34 const Eigen::VectorXd &Fq,
const Eigen::VectorXd &Fp)
35 :
llt(KQQ),
pplu(KPQ *
llt.solve(KPQ.transpose()))
39 L =
pplu.solve(KPQ *
llt.solve(Fq) - Fp);
40 X =
llt.solve(Fq - KPQ.transpose() *
L);
44 const Eigen::VectorXd &Fq)
45 :
llt(KQQ),
pplu(KPQ *
llt.solve(KPQ.transpose()))
50 X =
llt.solve(Fq - KPQ.transpose() *
L);
const Eigen::LLT< Eigen::MatrixXd > llt
The LLT decomposition of KQQ.
const Eigen::PartialPivLU< Eigen::MatrixXd > pplu
the partial-pivot LU decomposition of KPQ*inv(KQQ)*KPQ^T
Eigen::VectorXd X
The solution vector.
SchurComplementSolver(const Eigen::MatrixXd &KQQ, const Eigen::MatrixXd &KPQ, const Eigen::VectorXd &Fq, const Eigen::VectorXd &Fp)
Eigen::VectorXd L
The vector of Lagrange multipliers.