Stan  1.3
probability, sampling & optimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Macros Pages
owens_t.hpp
Go to the documentation of this file.
1 #ifndef __STAN__AGRAD__REV__OWENS__T_HPP__
2 #define __STAN__AGRAD__REV__OWENS__T_HPP__
3 
4 #include <stan/agrad/rev/var.hpp>
9 #include <boost/math/special_functions/owens_t.hpp>
10 
11 namespace stan {
12  namespace agrad {
13 
14  namespace {
15 
16  using stan::math::pi;
17  class owens_t_vv_vari : public op_vv_vari {
18  public:
19  owens_t_vv_vari(vari* avi, vari* bvi) :
20  op_vv_vari(boost::math::owens_t(avi->val_, bvi->val_), avi, bvi) {
21  }
22  void chain() {
23  avi_->adj_ += adj_ * boost::math::erf(bvi_->val_ * avi_->val_ / std::sqrt(2.0)) * std::exp(-avi_->val_ * avi_->val_ / 2.0) * std::sqrt(pi() / 2.0) / (-2.0 * pi());
24  bvi_->adj_ += adj_ * std::exp(-0.5 * avi_->val_ * avi_->val_ * (1.0 + bvi_->val_ * bvi_->val_)) / ((1 + bvi_->val_ * bvi_->val_) * 2.0 * pi());
25  }
26  };
27 
28  class owens_t_vd_vari : public op_vd_vari {
29  public:
30  owens_t_vd_vari(vari* avi, double b) :
31  op_vd_vari(boost::math::owens_t(avi->val_, b), avi, b) {
32  }
33  void chain() {
34  avi_->adj_ += adj_ * boost::math::erf(bd_ * avi_->val_ / std::sqrt(2.0)) * std::exp(-avi_->val_ * avi_->val_ / 2.0) * std::sqrt(pi() / 2.0) / (-2.0 * pi());
35  }
36  };
37 
38  class owens_t_dv_vari : public op_dv_vari {
39  public:
40  owens_t_dv_vari(double a, vari* bvi) :
41  op_dv_vari(boost::math::owens_t(a, bvi->val_), a, bvi) {
42  }
43  void chain() {
44  bvi_->adj_ += adj_ * std::exp(-0.5 * ad_ * ad_ * (1.0 + bvi_->val_ * bvi_->val_)) / ((1 + bvi_->val_ * bvi_->val_) * 2.0 * pi());
45  }
46  };
47  }
48 
60  inline var owens_t(const var& h,
61  const var& a) {
62  return var(new owens_t_vv_vari(h.vi_, a.vi_));
63  }
64 
76  inline var owens_t(const var& h,
77  const double& a) {
78  return var(new owens_t_vd_vari(h.vi_, a));
79  }
80 
92  inline var owens_t(const double& h,
93  const var& a) {
94  return var(new owens_t_dv_vari(h, a.vi_));
95  }
96 
97  }
98 }
99 #endif

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