|
| LDLT_factor () |
|
| LDLT_factor (const Eigen::Matrix< T, R, C > &A) |
|
void | compute (const Eigen::Matrix< T, R, C > &A) |
|
bool | success () const |
|
T | log_abs_det () const |
|
void | inverse (Eigen::Matrix< T, R, C > &invA) const |
|
template<typename Rhs > |
const Eigen::internal::solve_retval< Eigen::LDLT< Eigen::Matrix< T, R, C > >, Rhs > | solve (const Eigen::MatrixBase< Rhs > &b) const |
|
Eigen::Matrix< T, R, C > | solveRight (const Eigen::Matrix< T, R, C > &B) const |
|
Eigen::Matrix< T, Eigen::Dynamic, 1 > | vectorD () const |
|
Eigen::LDLT< Eigen::Matrix< T, R, C > > | matrixLDLT () const |
|
size_t | rows () const |
|
size_t | cols () const |
|
template<int R, int C, typename T>
class stan::math::LDLT_factor< T, R, C >
LDLT_factor is a thin wrapper on Eigen::LDLT to allow for reusing factorizations and efficient autodiff of things like log determinants and solutions to linear systems.
After the constructor and/or compute() is called users of LDLT_factor are responsible for calling success() to check whether the factorization has succeeded. Use of an LDLT_factor object (e.g., in mdivide_left_ldlt) is undefined if success() is false.
It's usage pattern is:
Eigen::Matrix<T, R, C> A1, A2;
LDLT_factor<T, R, C> ldlt_A1(A1);
LDLT_factor<T, R, C> ldlt_A2;
ldlt_A2.compute(A2);
Now, the caller should check that ldlt_A1.success() and ldlt_A2.success() are true or abort accordingly. Alternatively, call check_ldlt_factor().
Note that ldlt_A1 and ldlt_A2 are completely equivalent. They simply demonstrate two different ways to construct the factorization.
Now, the caller can use the LDLT_factor objects as needed. For instance
This class is conceptually similar to the corresponding Eigen class Any spd matrix A can be decomposed as LDL' where L is unit lower-triangular and D is diagonal with positive diagonal elements
Definition at line 56 of file LDLT_factor.hpp.