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>
15 class owens_t_vv_vari :
public op_vv_vari {
17 owens_t_vv_vari(vari* avi, vari* bvi) :
18 op_vv_vari(boost::math::
owens_t(avi->val_, bvi->val_), avi, bvi) {
21 const double neg_avi_sq_div_2 = -
square(avi_->val_) * 0.5;
22 const double one_p_bvi_sq = 1.0 +
square(bvi_->val_);
26 bvi_->adj_ += adj_ *
std::exp(neg_avi_sq_div_2 * one_p_bvi_sq)
27 / (one_p_bvi_sq * 2.0 *
pi());
31 class owens_t_vd_vari :
public op_vd_vari {
33 owens_t_vd_vari(vari* avi,
double b) :
34 op_vd_vari(boost::math::
owens_t(avi->val_, b), avi, b) {
43 class owens_t_dv_vari :
public op_dv_vari {
45 owens_t_dv_vari(
double a, vari* bvi) :
46 op_dv_vari(boost::math::
owens_t(a, bvi->val_), a, bvi) {
49 const double one_p_bvi_sq = 1.0 +
square(bvi_->val_);
51 / (one_p_bvi_sq * 2.0 *
pi());
67 return var(
new owens_t_vv_vari(h.
vi_, a.
vi_));
81 return var(
new owens_t_vd_vari(h.
vi_, a));
95 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.