1 #ifndef STAN__AGRAD__REV__MATRIX__LOG_DETERMINANT_HPP
2 #define STAN__AGRAD__REV__MATRIX__LOG_DETERMINANT_HPP
19 class log_determinant_vari :
public vari {
25 log_determinant_vari(
const Eigen::Matrix<var,R,C> &A)
26 : vari(log_determinant_vari_calc(A)),
29 A_((double*)stan::agrad::
memalloc_.alloc(sizeof(double)
37 A_[pos] = A(i,j).val();
43 double log_determinant_vari_calc(
const Eigen::Matrix<var,R,C> &A)
45 Eigen::Matrix<double,R,C> Ad(A.rows(),A.cols());
48 Ad(i,j) = A(i,j).val();
49 return Ad.fullPivHouseholderQr().logAbsDeterminant();
51 virtual void chain() {
68 template <
int R,
int C>
71 return var(
new log_determinant_vari<R,C>(m));
Eigen::Matrix< fvar< T >, R, C > inverse(const Eigen::Matrix< fvar< T >, R, C > &m)
memory::stack_alloc memalloc_
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic >::Index size_type
size_t rows(const Eigen::Matrix< T, R, C > &m)
size_t cols(const Eigen::Matrix< T, R, C > &m)
Independent (input) and dependent (output) variables for gradients.
fvar< T > log_determinant(const Eigen::Matrix< fvar< T >, R, C > &m)
bool check_square(const char *function, const Eigen::Matrix< T_y, Eigen::Dynamic, Eigen::Dynamic > &y, const char *name, T_result *result)
Return true if the specified matrix is square.