Loading [MathJax]/extensions/TeX/AMSmath.js
Automatic Differentiation
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
grad_reg_inc_beta.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_PRIM_FUN_GRAD_REG_INC_BETA_HPP
2#define STAN_MATH_PRIM_FUN_GRAD_REG_INC_BETA_HPP
3
7#include <cmath>
8
9namespace stan {
10namespace math {
11
34template <typename T>
35void grad_reg_inc_beta(T& g1, T& g2, const T& a, const T& b, const T& z,
36 const T& digammaA, const T& digammaB,
37 const T& digammaSum, const T& betaAB) {
38 using std::exp;
39
40 T c1 = log(z);
41 T c2 = log1m(z);
42 T c3 = betaAB * inc_beta(a, b, z);
43 T C = exp(a * c1 + b * c2) / a;
44 T dF1 = 0;
45 T dF2 = 0;
46 T dF3 = 0;
47 T dFz = 0;
48 if (value_of_rec(C)) {
49 std::forward_as_tuple(dF1, dF2, dF3, dFz)
50 = grad_2F1<true>(a + b, 1.0, a + 1, z);
51 }
52
53 T dBda = (c1 - 1.0 / a) * c3 + C * (dF1 + dF3);
54 T dBdb = c2 * c3 + C * dF1;
55
56 g1 = (dBda - c3 * (digammaA - digammaSum)) / betaAB;
57 g2 = (dBdb - c3 * (digammaB - digammaSum)) / betaAB;
58}
59
60} // namespace math
61} // namespace stan
62#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_reg_inc_beta(T &g1, T &g2, const T &a, const T &b, const T &z, const T &digammaA, const T &digammaB, const T &digammaSum, const T &betaAB)
Computes the gradients of the regularized incomplete beta function.
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 > 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 ...