Stan Math Library  2.20.0
reverse mode automatic differentiation
scaled_inv_chi_square_rng.hpp
Go to the documentation of this file.
1 #ifndef STAN_MATH_PRIM_SCAL_PROB_SCALED_INV_CHI_SQUARE_RNG_HPP
2 #define STAN_MATH_PRIM_SCAL_PROB_SCALED_INV_CHI_SQUARE_RNG_HPP
3 
8 #include <boost/random/chi_squared_distribution.hpp>
9 #include <boost/random/variate_generator.hpp>
10 
11 namespace stan {
12 namespace math {
13 
33 template <typename T_deg, typename T_scale, class RNG>
35 scaled_inv_chi_square_rng(const T_deg& nu, const T_scale& s, RNG& rng) {
36  using boost::random::chi_squared_distribution;
37  using boost::variate_generator;
38 
39  static const char* function = "scaled_inv_chi_square_rng";
40 
41  check_positive_finite(function, "Degrees of freedom parameter", nu);
42  check_positive_finite(function, "Scale parameter", s);
43  check_consistent_sizes(function, "Location parameter", nu, "Scale Parameter",
44  s);
45 
46  scalar_seq_view<T_deg> nu_vec(nu);
47  scalar_seq_view<T_scale> s_vec(s);
48  size_t N = max_size(nu, s);
50 
51  for (size_t n = 0; n < N; ++n) {
52  variate_generator<RNG&, chi_squared_distribution<> > chi_square_rng(
53  rng, chi_squared_distribution<>(nu_vec[n]));
54  output[n] = nu_vec[n] * s_vec[n] * s_vec[n] / chi_square_rng();
55  }
56 
57  return output.data();
58 }
59 
60 } // namespace math
61 } // namespace stan
62 #endif
scalar_seq_view provides a uniform sequence-like wrapper around either a scalar or a sequence of scal...
VectorBuilder< true, double, T_deg, T_scale >::type scaled_inv_chi_square_rng(const T_deg &nu, const T_scale &s, RNG &rng)
Return a scaled chi square random variate for the given number of degrees of freedom and scale using ...
void check_positive_finite(const char *function, const char *name, const T_y &y)
Check if y is positive and finite.
size_t max_size(const T1 &x1, const T2 &x2)
Definition: max_size.hpp:9
VectorBuilder allocates type T1 values to be used as intermediate values.
void check_consistent_sizes(const char *function, const char *name1, const T1 &x1, const char *name2, const T2 &x2)
Check if the dimension of x1 is consistent with x2.
VectorBuilder< true, double, T_deg >::type chi_square_rng(const T_deg &nu, RNG &rng)
Return a chi squared random variate with nu degrees of freedom using the specified random number gene...

     [ Stan Home Page ] © 2011–2018, Stan Development Team.