Automatic Differentiation
 
Loading...
Searching...
No Matches
grad_inc_beta.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_REV_FUN_GRAD_INC_BETA_HPP
2#define STAN_MATH_REV_FUN_GRAD_INC_BETA_HPP
3
19
20#include <cmath>
21
22namespace stan {
23namespace math {
24
38inline void grad_inc_beta(var& g1, var& g2, const var& a, const var& b,
39 const var& z) {
40 var c1 = log(z);
41 var c2 = log1m(z);
42 var c3 = beta(a, b) * inc_beta(a, b, z);
43 var C = exp(a * c1 + b * c2) / a;
44 var dF1 = 0;
45 var dF2 = 0;
46 var dF3 = 0;
47 var dFz = 0;
48 if (value_of_rec(C)) {
49 std::forward_as_tuple(dF1, dF2, dF3, dFz)
50 = grad_2F1<true>(a + b, var(1.0), a + 1, z);
51 }
52 g1 = (c1 - 1.0 / a) * c3 + C * (dF1 + dF3);
53 g2 = c2 * c3 + C * dF1;
54}
55
56} // namespace math
57} // namespace stan
58#endif
double value_of_rec(const fvar< T > &v)
Return the value of the specified variable.
fvar< T > log(const fvar< T > &x)
Definition log.hpp:18
void grad_inc_beta(fvar< T > &g1, fvar< T > &g2, fvar< T > a, fvar< T > b, fvar< T > z)
Gradient of the incomplete beta function beta(a, b, z) with respect to the first two arguments.
fvar< T > inc_beta(const fvar< T > &a, const fvar< T > &b, const fvar< T > &x)
Definition inc_beta.hpp:19
var_value< double > var
Definition var.hpp:1187
fvar< T > log1m(const fvar< T > &x)
Definition log1m.hpp:12
fvar< T > beta(const fvar< T > &x1, const fvar< T > &x2)
Return fvar with the beta function applied to the specified arguments and its gradient.
Definition beta.hpp:51
fvar< T > exp(const fvar< T > &x)
Definition exp.hpp:15
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...