Stan  2.5.0
probability, sampling & optimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
log_diff_exp.hpp
Go to the documentation of this file.
1 #ifndef STAN__AGRAD__REV__FUNCTIONS__LOG_DIFF_EXP_HPP
2 #define STAN__AGRAD__REV__FUNCTIONS__LOG_DIFF_EXP_HPP
3 
4 #include <stan/agrad/rev/var.hpp>
13 #include <boost/math/special_functions/expm1.hpp>
14 
15 namespace stan {
16  namespace agrad {
17 
18  namespace {
19  class log_diff_exp_vv_vari : public op_vv_vari {
20  public:
21  log_diff_exp_vv_vari(vari* avi, vari* bvi) :
22  op_vv_vari(stan::math::log_diff_exp(avi->val_, bvi->val_),
23  avi, bvi) {
24  }
25  void chain() {
26  avi_->adj_ += adj_ * calculate_chain(avi_->val_, val_);
27  bvi_->adj_ -= adj_ / boost::math::expm1(avi_->val_ - bvi_->val_);
28  }
29  };
30  class log_diff_exp_vd_vari : public op_vd_vari {
31  public:
32  log_diff_exp_vd_vari(vari* avi, double b) :
33  op_vd_vari(stan::math::log_diff_exp(avi->val_, b),
34  avi, b) {
35  }
36  void chain() {
37  avi_->adj_ += adj_ * calculate_chain(avi_->val_, val_);
38  }
39  };
40  class log_diff_exp_dv_vari : public op_dv_vari {
41  public:
42  log_diff_exp_dv_vari(double a, vari* bvi) :
43  op_dv_vari(stan::math::log_diff_exp(a, bvi->val_),
44  a, bvi) {
45  }
46  void chain() {
47  bvi_->adj_ -= adj_ / boost::math::expm1(ad_ - bvi_->val_);
48  }
49  };
50  }
51 
56  const stan::agrad::var& b) {
57  return var(new log_diff_exp_vv_vari(a.vi_, b.vi_));
58  }
63  const double& b) {
64  return var(new log_diff_exp_vd_vari(a.vi_, b));
65  }
69  inline var log_diff_exp(const double& a,
70  const stan::agrad::var& b) {
71  return var(new log_diff_exp_dv_vari(a, b.vi_));
72  }
73 
74  }
75 }
76 #endif
fvar< T > log_diff_exp(const fvar< T > &x1, const fvar< T > &x2)
vari * vi_
Pointer to the implementation of this variable.
Definition: var.hpp:40
fvar< T > expm1(const fvar< T > &x)
Definition: expm1.hpp:15
double calculate_chain(const double &x, const double &val)
Independent (input) and dependent (output) variables for gradients.
Definition: var.hpp:27

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