Stan  2.5.0
probability, sampling & optimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
log_sum_exp.hpp
Go to the documentation of this file.
1 #ifndef STAN__AGRAD__FWD__MATRIX__LOG_SUM_EXP_HPP
2 #define STAN__AGRAD__FWD__MATRIX__LOG_SUM_EXP_HPP
3 
4 #include <vector>
10 
11 namespace stan{
12 
13  namespace agrad{
14 
15  // FIXME: cut-and-paste from fwd/log_sum_exp.hpp; should
16  // be able to generalize
17  template <typename T, int R, int C>
18  fvar<T>
19  log_sum_exp(const Eigen::Matrix<fvar<T>,R,C>& v) {
22  using stan::agrad::exp;
23  using std::exp;
24  using stan::agrad::log;
25  using std::log;
26 
27  Eigen::Matrix<T,1,Eigen::Dynamic> vals(v.size());
28  for (int i = 0; i < v.size(); ++i)
29  vals[i] = v(i).val_;
30  T deriv(0.0);
31  T denominator(0.0);
32  for (size_t i = 0; i < v.size(); ++i) {
33  T exp_vi = exp(vals[i]);
34  denominator += exp_vi;
35  deriv += v(i).d_ * exp_vi;
36  }
37  return fvar<T>(log_sum_exp(vals), deriv / denominator);
38  }
39 
40  }
41 }
42 #endif
fvar< T > log_sum_exp(const fvar< T > &x1, const fvar< T > &x2)
Definition: log_sum_exp.hpp:15
boost::math::tools::promote_args< T1, T2 >::type log_sum_exp(const T2 &a, const T1 &b)
Calculates the log sum of exponetials without overflow.
Definition: log_sum_exp.hpp:49
fvar< T > log(const fvar< T > &x)
Definition: log.hpp:15
fvar< T > exp(const fvar< T > &x)
Definition: exp.hpp:16

     [ Stan Home Page ] © 2011–2014, Stan Development Team.