Automatic Differentiation
 
Loading...
Searching...
No Matches
grad_inc_beta.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_FWD_FUN_GRAD_INC_BETA_HPP
2#define STAN_MATH_FWD_FUN_GRAD_INC_BETA_HPP
3
14#include <cmath>
15
16namespace stan {
17namespace math {
18
33template <typename T>
35 fvar<T> c1 = log(z);
36 fvar<T> c2 = log1m(z);
37 fvar<T> c3 = beta(a, b) * inc_beta(a, b, z);
38
39 fvar<T> C = exp(a * c1 + b * c2) / a;
40
41 fvar<T> dF1 = 0;
42 fvar<T> dF2 = 0;
43 fvar<T> dF3 = 0;
44 fvar<T> dFz = 0;
45
46 if (value_of_rec(C)) {
47 std::forward_as_tuple(dF1, dF2, dF3, dFz)
48 = grad_2F1<true>(a + b, fvar<T>(1.0), a + 1, z);
49 }
50
51 g1 = (c1 - 1.0 / a) * c3 + C * (dF1 + dF3);
52 g2 = c2 * c3 + C * dF1;
53}
54
55} // namespace math
56} // namespace stan
57#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
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 ...
This template class represents scalars used in forward-mode automatic differentiation,...
Definition fvar.hpp:40