Exemple #1
0
 inline typename boost::math::tools::promote_args<T>::type
 log1m_exp(const T a) {
   if (a >= 0)
     return std::numeric_limits<double>::quiet_NaN();
   else if (a > -0.693147)
     return std::log(-boost::math::expm1(a)); //0.693147 is approximatelly equal to log(2)
   else
     return log1m(std::exp(a));
 }
Exemple #2
0
    Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>
    read_corr_L(const Eigen::Array<T, Eigen::Dynamic, 1>& CPCs,
                size_t K,
                T& log_prob) {
      Eigen::Matrix<T, Eigen::Dynamic, 1> values(CPCs.rows() - 1);
      size_t pos = 0;
      // no need to abs() because this Jacobian determinant
      // is strictly positive (and triangular)
      // see inverse of Jacobian in equation 11 of LKJ paper
      for (size_t k = 1; k <= (K - 2); k++)
        for (size_t i = k + 1; i <= K; i++) {
          values(pos) = (K - k - 1) * log1m(square(CPCs(pos)));
          pos++;
        }

      log_prob += 0.5 * sum(values);
      return read_corr_L(CPCs, K);
    }
Exemple #3
0
 inline fvar<T>
 log1m(const fvar<T>& x) {
   return fvar<T>(log1m(x.val_), -x.d_ / (1 - x.val_));
 }
Exemple #4
0
 static inline T fun(const T& x) {
   return log1m(x);
 }