1 #ifndef STAN_MATH_REV_FUN_MODIFIED_BESSEL_SECOND_KIND_HPP
2 #define STAN_MATH_REV_FUN_MODIFIED_BESSEL_SECOND_KIND_HPP
3
4 #include <stan/math/rev/meta.hpp>
5 #include <stan/math/rev/core.hpp>
6 #include <stan/math/prim/fun/modified_bessel_second_kind.hpp>
7
8 namespace stan {
9 namespace math {
10
11 namespace internal {
12
13 class modified_bessel_second_kind_dv_vari : public op_dv_vari {
14 public:
modified_bessel_second_kind_dv_vari(int a,vari * bvi)15 modified_bessel_second_kind_dv_vari(int a, vari* bvi)
16 : op_dv_vari(modified_bessel_second_kind(a, bvi->val_), a, bvi) {}
chain()17 void chain() {
18 bvi_->adj_
19 -= adj_
20 * (ad_ * modified_bessel_second_kind(ad_, bvi_->val_) / bvi_->val_
21 + modified_bessel_second_kind(ad_ - 1, bvi_->val_));
22 }
23 };
24 } // namespace internal
25
modified_bessel_second_kind(int v,const var & a)26 inline var modified_bessel_second_kind(int v, const var& a) {
27 return var(new internal::modified_bessel_second_kind_dv_vari(v, a.vi_));
28 }
29
30 } // namespace math
31 } // namespace stan
32 #endif
33