1 #ifndef __STAN__AGRAD__REV__MATRIX__DETERMINANT_HPP__
2 #define __STAN__AGRAD__REV__MATRIX__DETERMINANT_HPP__
20 class determinant_vari :
public vari {
26 determinant_vari(
const Eigen::Matrix<var,R,C> &A)
27 : vari(determinant_vari_calc(A)),
30 _A((double*)stan::agrad::
memalloc_.alloc(sizeof(double)
38 _A[pos] = A(i,j).val();
44 double 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.determinant();
51 virtual void chain() {
55 adjA = (adj_ * val_) *
56 Map<Matrix<double,R,C> >(
_A,
_rows,
_cols).inverse().transpose();
67 template <
int R,
int C>
70 return var(
new determinant_vari<R,C>(m));