Automatic Differentiation
 
Loading...
Searching...
No Matches
hypergeometric_2F1.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_FWD_FUN_HYPERGEOMETRIC_2F1_HPP
2#define STAN_MATH_FWD_FUN_HYPERGEOMETRIC_2F1_HPP
3
9
10namespace stan {
11namespace math {
12
30template <typename Ta1, typename Ta2, typename Tb, typename Tz,
31 require_all_stan_scalar_t<Ta1, Ta2, Tb, Tz>* = nullptr,
32 require_any_fvar_t<Ta1, Ta2, Tb, Tz>* = nullptr>
34 const Ta2& a2,
35 const Tb& b,
36 const Tz& z) {
38
39 auto a1_val = value_of(a1);
40 auto a2_val = value_of(a2);
41 auto b_val = value_of(b);
42 auto z_val = value_of(z);
43
44 auto grad_tuple = grad_2F1(a1, a2, b, z);
45
46 typename fvar_t::Scalar grad = 0;
47
49 grad += forward_as<fvar_t>(a1).d() * std::get<0>(grad_tuple);
50 }
52 grad += forward_as<fvar_t>(a2).d() * std::get<1>(grad_tuple);
53 }
55 grad += forward_as<fvar_t>(b).d() * std::get<2>(grad_tuple);
56 }
58 grad += forward_as<fvar_t>(z).d() * std::get<3>(grad_tuple);
59 }
60
61 return fvar_t(hypergeometric_2F1(a1_val, a2_val, b_val, z_val), grad);
62}
63
64} // namespace math
65} // namespace stan
66#endif
typename return_type< Ts... >::type return_type_t
Convenience type for the return type of the specified template parameters.
T value_of(const fvar< T > &v)
Return the value of the specified variable.
Definition value_of.hpp:18
return_type_t< Ta1, Ta1, Tb, Tz > hypergeometric_2F1(const Ta1 &a1, const Ta2 &a2, const Tb &b, const Tz &z)
Returns the Gauss hypergeometric function applied to the input arguments: .
static void grad()
Compute the gradient for all variables starting from the end of the AD tape.
Definition grad.hpp:26
auto grad_2F1(const T1 &a1, const T2 &a2, const T3 &b1, const T_z &z, double precision=1e-14, int max_steps=1e6)
Calculate the gradients of the hypergeometric function (2F1) as the power series stopping when the se...
Definition grad_2F1.hpp:271
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...
Metaprogramming struct to detect whether a given type is constant in the mathematical sense (not the ...