Automatic Differentiation
 
Loading...
Searching...
No Matches
digamma.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_REV_FUN_DIGAMMA_HPP
2#define STAN_MATH_REV_FUN_DIGAMMA_HPP
3
8
9namespace stan {
10namespace math {
11
19inline var digamma(const var& a) {
20 return make_callback_var(digamma(a.val()), [a](auto& vi) {
21 a.adj() += vi.adj() * trigamma(a.val());
22 });
23}
24
33template <typename T, require_var_matrix_t<T>* = nullptr>
34inline auto digamma(const T& a) {
35 return make_callback_var(
36 a.val()
37 .array()
38 .unaryExpr([](auto& x) { return digamma(x); })
39 .matrix()
40 .eval(),
41 [a](auto& vi) mutable {
42 a.adj().array()
43 += vi.adj().array()
44 * a.val().array().unaryExpr([](auto& x) { return trigamma(x); });
45 });
46}
47
48} // namespace math
49} // namespace stan
50#endif
var_value< plain_type_t< T > > make_callback_var(T &&value, F &&functor)
Creates a new var initialized with a callback_vari with a given value and reverse-pass callback funct...
fvar< T > digamma(const fvar< T > &x)
Return the derivative of the log gamma function at the specified argument.
Definition digamma.hpp:23
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...