1 #ifndef STAN_MATH_REV_SCAL_FUN_OWENS_T_HPP
2 #define STAN_MATH_REV_SCAL_FUN_OWENS_T_HPP
8 #include <boost/math/special_functions/owens_t.hpp>
12 #include <boost/math/special_functions/erf.hpp>
20 class owens_t_vv_vari :
public op_vv_vari {
22 owens_t_vv_vari(vari* avi, vari* bvi) :
23 op_vv_vari(boost::math::
owens_t(avi->val_, bvi->val_), avi, bvi) {
26 const double neg_avi_sq_div_2 = -
square(avi_->val_) * 0.5;
27 const double one_p_bvi_sq = 1.0 +
square(bvi_->val_);
31 bvi_->adj_ += adj_ *
std::exp(neg_avi_sq_div_2 * one_p_bvi_sq)
32 / (one_p_bvi_sq * 2.0 *
pi());
36 class owens_t_vd_vari :
public op_vd_vari {
38 owens_t_vd_vari(vari* avi,
double b) :
39 op_vd_vari(boost::math::
owens_t(avi->val_, b), avi, b) {
48 class owens_t_dv_vari :
public op_dv_vari {
50 owens_t_dv_vari(
double a, vari* bvi) :
51 op_dv_vari(boost::math::
owens_t(a, bvi->val_), a, bvi) {
54 const double one_p_bvi_sq = 1.0 +
square(bvi_->val_);
56 / (one_p_bvi_sq * 2.0 *
pi());
72 return var(
new owens_t_vv_vari(h.
vi_, a.
vi_));
86 return var(
new owens_t_vd_vari(h.
vi_, a));
100 return var(
new owens_t_dv_vari(h, a.
vi_));
const double INV_SQRT_TWO_PI
fvar< T > erf(const fvar< T > &x)
Independent (input) and dependent (output) variables for gradients.
fvar< T > square(const fvar< T > &x)
fvar< T > owens_t(const fvar< T > &x1, const fvar< T > &x2)
const double INV_SQRT_2
The value of 1 over the square root of 2, .
fvar< T > exp(const fvar< T > &x)
vari * vi_
Pointer to the implementation of this variable.
double pi()
Return the value of pi.