Stan
2.5.0
probability, sampling & optimization
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
src
stan
agrad
fwd
functions
binomial_coefficient_log.hpp
Go to the documentation of this file.
1
#ifndef STAN__AGRAD__FWD__FUNCTIONS__BINOMIAL_COEFFICIENT_LOG_HPP
2
#define STAN__AGRAD__FWD__FUNCTIONS__BINOMIAL_COEFFICIENT_LOG_HPP
3
4
#include <
stan/agrad/fwd/fvar.hpp
>
5
#include <
stan/meta/traits.hpp
>
6
#include <boost/math/special_functions/digamma.hpp>
7
#include <
stan/math/functions/binomial_coefficient_log.hpp
>
8
9
namespace
stan {
10
11
namespace
agrad {
12
13
template
<
typename
T>
14
inline
15
fvar<T>
16
binomial_coefficient_log
(
const
fvar<T>
& x1,
const
fvar<T>
& x2) {
17
using
boost::math::digamma
;
18
using
std::log
;
19
using
stan::math::binomial_coefficient_log
;
20
const
double
cutoff = 1000;
21
if
((x1.
val_
< cutoff) || (x1.
val_
- x2.
val_
< cutoff)) {
22
return
fvar<T>
(
binomial_coefficient_log
(x1.
val_
, x2.
val_
),
23
x1.
d_
*
digamma
(x1.
val_
+ 1)
24
- x2.
d_
*
digamma
(x2.
val_
+ 1)
25
- (x1.
d_
- x2.
d_
) *
digamma
(x1.
val_
- x2.
val_
+ 1));
26
}
else
{
27
return
fvar<T>
(
binomial_coefficient_log
(x1.
val_
, x2.
val_
),
28
x2.
d_
*
log
(x1.
val_
- x2.
val_
)
29
+ x2.
val_
* (x1.
d_
- x2.
d_
) / (x1.
val_
- x2.
val_
)
30
+ x1.
d_
*
log
(x1.
val_
/ (x1.
val_
- x2.
val_
))
31
+ (x1.
val_
+ 0.5) / (x1.
val_
/ (x1.
val_
- x2.
val_
))
32
* (x1.
d_
* (x1.
val_
- x2.
val_
) - (x1.
d_
- x2.
d_
) * x1.
val_
)
33
/ ((x1.
val_
- x2.
val_
) * (x1.
val_
- x2.
val_
))
34
- x1.
d_
/ (12.0 * x1.
val_
* x1.
val_
)
35
- x2.
d_
36
+ (x1.
d_
- x2.
d_
) / (12.0 * (x1.
val_
- x2.
val_
)
37
* (x1.
val_
- x2.
val_
))
38
-
digamma
(x2.
val_
+ 1) * x2.
d_
);
39
}
40
}
41
42
template
<
typename
T>
43
inline
44
fvar<T>
45
binomial_coefficient_log
(
const
fvar<T>
& x1,
const
double
x2) {
46
using
boost::math::digamma
;
47
using
std::log
;
48
using
stan::math::binomial_coefficient_log
;
49
const
double
cutoff = 1000;
50
if
((x1.
val_
< cutoff) || (x1.
val_
- x2 < cutoff)) {
51
return
fvar<T>
(
binomial_coefficient_log
(x1.
val_
, x2),
52
x1.
d_
*
digamma
(x1.
val_
+ 1)
53
- x1.
d_
*
digamma
(x1.
val_
- x2 + 1));
54
}
else
{
55
return
fvar<T>
(
binomial_coefficient_log
(x1.
val_
, x2),
56
x2 * x1.
d_
/ (x1.
val_
- x2)
57
+ x1.
d_
*
log
(x1.
val_
/ (x1.
val_
- x2))
58
+ (x1.
val_
+ 0.5) / (x1.
val_
/ (x1.
val_
- x2))
59
* (x1.
d_
* (x1.
val_
- x2) - x1.
d_
* x1.
val_
)
60
/ ((x1.
val_
- x2) * (x1.
val_
- x2))
61
- x1.
d_
/ (12.0 * x1.
val_
* x1.
val_
)
62
+ x1.
d_
/ (12.0 * (x1.
val_
- x2) * (x1.
val_
- x2)));
63
}
64
}
65
66
template
<
typename
T>
67
inline
68
fvar<T>
69
binomial_coefficient_log
(
const
double
x1,
const
fvar<T>
& x2) {
70
using
boost::math::digamma
;
71
using
std::log
;
72
using
stan::math::binomial_coefficient_log
;
73
const
double
cutoff = 1000;
74
if
((x1 < cutoff) || (x1 - x2.
val_
< cutoff)) {
75
return
fvar<T>
(
binomial_coefficient_log
(x1, x2.
val_
),
76
-x2.
d_
*
digamma
(x2.
val_
+ 1)
77
- x2.
d_
*
digamma
(x1 - x2.
val_
+ 1));
78
}
else
{
79
return
fvar<T>
(
binomial_coefficient_log
(x1, x2.
val_
),
80
x2.
d_
*
log
(x1 - x2.
val_
)
81
+ x2.
val_
* -x2.
d_
/ (x1 - x2.
val_
)
82
- x2.
d_
83
- x2.
d_
/ (12.0 * (x1 - x2.
val_
) * (x1 - x2.
val_
))
84
+ x2.
d_
* (x1 + 0.5) / (x1 - x2.
val_
)
85
-
digamma
(x2.
val_
+ 1) * x2.
d_
);
86
}
87
}
88
}
89
}
90
#endif
stan::agrad::fvar
Definition:
fvar.hpp:13
stan::math::binomial_coefficient_log
boost::math::tools::promote_args< T_N, T_n >::type binomial_coefficient_log(const T_N N, const T_n n)
Return the log of the binomial coefficient for the specified arguments.
Definition:
binomial_coefficient_log.hpp:63
traits.hpp
fvar.hpp
stan::agrad::binomial_coefficient_log
fvar< T > binomial_coefficient_log(const fvar< T > &x1, const fvar< T > &x2)
Definition:
binomial_coefficient_log.hpp:16
stan::agrad::digamma
fvar< T > digamma(const fvar< T > &x)
Definition:
digamma.hpp:16
binomial_coefficient_log.hpp
stan::agrad::fvar::d_
T d_
Definition:
fvar.hpp:16
stan::agrad::log
fvar< T > log(const fvar< T > &x)
Definition:
log.hpp:15
stan::agrad::fvar::val_
T val_
Definition:
fvar.hpp:15
[
Stan Home Page
]
© 2011–2014, Stan Development Team.