1 #ifndef STAN_MATH_PRIM_MAT_FUN_LDLT_FACTOR_HPP 2 #define STAN_MATH_PRIM_MAT_FUN_LDLT_FACTOR_HPP 7 #include <boost/shared_ptr.hpp> 62 template <
typename T,
int R,
int C>
65 typedef Eigen::Matrix<T, Eigen::Dynamic, 1>
vector_t;
67 typedef Eigen::LDLT<matrix_t>
ldlt_t;
84 if (
ldltP_->info() != Eigen::Success)
86 if (!(
ldltP_->isPositive()))
88 vector_t ldltP_diag(
ldltP_->vectorD());
89 for (
int i = 0; i < ldltP_diag.size(); ++i)
90 if (ldltP_diag(i) <= 0 ||
is_nan(ldltP_diag(i)))
96 return ldltP_->vectorD().array().log().sum();
99 inline void inverse(matrix_t& invA)
const {
100 invA.setIdentity(
N_);
101 ldltP_->solveInPlace(invA);
104 #if EIGEN_VERSION_AT_LEAST(3, 3, 0) 105 template <
typename Rhs>
106 inline const Eigen::Solve<ldlt_t, Rhs>
107 solve(
const Eigen::MatrixBase<Rhs>& b)
const {
111 template <
typename Rhs>
112 inline const Eigen::internal::solve_retval<ldlt_t, Rhs>
113 solve(
const Eigen::MatrixBase<Rhs>& b)
const {
127 return ldltP_->matrixLDLT();
130 inline size_t rows()
const {
return N_; }
131 inline size_t cols()
const {
return N_; }
ldlt_t matrixLDLT() const
Eigen::Matrix< T, R, C > matrix_t
matrix_t solveRight(const matrix_t &B) const
void inverse(matrix_t &invA) const
const Eigen::internal::solve_retval< ldlt_t, Rhs > solve(const Eigen::MatrixBase< Rhs > &b) const
void compute(const matrix_t &A)
LDLT_factor is a thin wrapper on Eigen::LDLT to allow for reusing factorizations and efficient autodi...
LDLT_factor(const matrix_t &A)
boost::shared_ptr< ldlt_t > ldltP_
void check_square(const char *function, const char *name, const Eigen::Matrix< T_y, Eigen::Dynamic, Eigen::Dynamic > &y)
Check if the specified matrix is square.
Eigen::Matrix< T, Eigen::Dynamic, 1 > vector_t
int is_nan(const fvar< T > &x)
Returns 1 if the input's value is NaN and 0 otherwise.
Eigen::LDLT< matrix_t > ldlt_t
Eigen::Matrix< T, C, R > transpose(const Eigen::Matrix< T, R, C > &m)