20#ifndef CCGSL_RANDIST_HPP
21#define CCGSL_RANDIST_HPP
24#ifdef __GXX_EXPERIMENTAL_CXX0X__
28#include<gsl/gsl_randist.h>
47 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
63 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
75 template<typename ARRAY>
79 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
233#ifdef __GXX_EXPERIMENTAL_CXX0X__
246 return gsl_ran_bernoulli( r.
get(), p ); }
254 return gsl_ran_bernoulli_pdf( k, p ); }
262 inline double beta(
rng const& r,
double const a,
double const b ){
263 return gsl_ran_beta( r.
get(),
a,
b ); }
271 inline double beta_pdf(
double const x,
double const a,
double const b ){
272 return gsl_ran_beta_pdf( x,
a,
b ); }
280 inline unsigned int binomial(
rng const& r,
double p,
unsigned int n ){
281 return gsl_ran_binomial( r.
get(), p,
n ); }
290 return gsl_ran_binomial_knuth( r.
get(), p,
n ); }
299 return gsl_ran_binomial_tpe( r.
get(), p,
n ); }
307 inline double binomial_pdf(
unsigned int const k,
double const p,
unsigned int const n ){
308 return gsl_ran_binomial_pdf( k, p,
n ); }
316 return gsl_ran_exponential( r.
get(), mu ); }
324 return gsl_ran_exponential_pdf( x, mu ); }
332 inline double exppow(
rng const& r,
double const a,
double const b ){
333 return gsl_ran_exppow( r.
get(),
a,
b ); }
341 inline double exppow_pdf(
double const x,
double const a,
double const b ){
342 return gsl_ran_exppow_pdf( x,
a,
b ); }
350 return gsl_ran_cauchy( r.
get(),
a ); }
358 return gsl_ran_cauchy_pdf( x,
a ); }
365 inline double chisq(
rng const& r,
double const nu ){
366 return gsl_ran_chisq( r.
get(), nu ); }
373 inline double chisq_pdf(
double const x,
double const nu ){
374 return gsl_ran_chisq_pdf( x, nu ); }
382 inline void dirichlet(
rng const& r,
size_t const K,
double const alpha[],
double theta[] ){
383 gsl_ran_dirichlet( r.
get(), K, alpha, theta ); }
391 inline double dirichlet_pdf(
size_t const K,
double const alpha[],
double const theta[] ){
392 return gsl_ran_dirichlet_pdf( K, alpha, theta ); }
400 inline double dirichlet_lnpdf(
size_t const K,
double const alpha[],
double const theta[] ){
401 return gsl_ran_dirichlet_lnpdf( K, alpha, theta ); }
409 inline double erlang(
rng const& r,
double const a,
double const n ){
410 return gsl_ran_erlang( r.
get(),
a,
n ); }
418 inline double erlang_pdf(
double const x,
double const a,
double const n ){
419 return gsl_ran_erlang_pdf( x,
a,
n ); }
427 inline double fdist(
rng const& r,
double const nu1,
double const nu2 ){
428 return gsl_ran_fdist( r.
get(), nu1, nu2 ); }
436 inline double fdist_pdf(
double const x,
double const nu1,
double const nu2 ){
437 return gsl_ran_fdist_pdf( x, nu1, nu2 ); }
445 inline double flat(
rng const& r,
double const a,
double const b ){
446 return gsl_ran_flat( r.
get(),
a,
b ); }
454 inline double flat_pdf(
double x,
double const a,
double const b ){
455 return gsl_ran_flat_pdf( x,
a,
b ); }
463 inline double gamma(
rng const& r,
double const a,
double const b ){
464 return gsl_ran_gamma( r.
get(),
a,
b ); }
472 return gsl_ran_gamma_int( r.
get(),
a ); }
480 inline double gamma_pdf(
double const x,
double const a,
double const b ){
481 return gsl_ran_gamma_pdf( x,
a,
b ); }
490 return gsl_ran_gamma_mt( r.
get(),
a,
b ); }
499 return gsl_ran_gamma_knuth( r.
get(),
a,
b ); }
507 return gsl_ran_gaussian( r.
get(), sigma ); }
515 return gsl_ran_gaussian_ratio_method( r.
get(), sigma ); }
523 return gsl_ran_gaussian_ziggurat( r.
get(), sigma ); }
531 return gsl_ran_gaussian_pdf( x, sigma ); }
538 return gsl_ran_ugaussian( r.
get() ); }
545 return gsl_ran_ugaussian_ratio_method( r.
get() ); }
552 return gsl_ran_ugaussian_pdf( x ); }
561 return gsl_ran_gaussian_tail( r.
get(),
a, sigma ); }
570 return gsl_ran_gaussian_tail_pdf( x,
a, sigma ); }
578 return gsl_ran_ugaussian_tail( r.
get(),
a ); }
586 return gsl_ran_ugaussian_tail_pdf( x,
a ); }
598 double rho,
double* x,
double* y ){
599 gsl_ran_bivariate_gaussian( r.
get(), sigma_x, sigma_y, rho, x, y ); }
610 inline void bivariate_gaussian( rng const& r, double sigma_x, double sigma_y,
611 double rho,
double& x,
double& y ){
612 gsl_ran_bivariate_gaussian( r.get(), sigma_x, sigma_y, rho, &x, &y ); }
623 double const sigma_y,
double const rho ){
624 return gsl_ran_bivariate_gaussian_pdf( x, y, sigma_x, sigma_y, rho ); }
631 return gsl_ran_landau( r.
get() ); }
637 inline double landau_pdf(
double const x ){
return gsl_ran_landau_pdf( x ); }
645 return gsl_ran_geometric( r.
get(), p ); }
653 return gsl_ran_geometric_pdf( k, p ); }
662 inline unsigned int hypergeometric(
rng const& r,
unsigned int n1,
unsigned int n2,
unsigned int t ){
663 return gsl_ran_hypergeometric( r.
get(), n1, n2, t ); }
673 unsigned int const n2,
unsigned int t ){
674 return gsl_ran_hypergeometric_pdf( k, n1, n2, t ); }
683 return gsl_ran_gumbel1( r.
get(),
a,
b ); }
691 inline double gumbel1_pdf(
double const x,
double const a,
double const b ){
692 return gsl_ran_gumbel1_pdf( x,
a,
b ); }
701 return gsl_ran_gumbel2( r.
get(),
a,
b ); }
709 inline double gumbel2_pdf(
double const x,
double const a,
double const b ){
710 return gsl_ran_gumbel2_pdf( x,
a,
b ); }
718 return gsl_ran_logistic( r.
get(),
a ); }
726 return gsl_ran_logistic_pdf( x,
a ); }
735 return gsl_ran_lognormal( r.
get(),
zeta, sigma ); }
744 return gsl_ran_lognormal_pdf( x,
zeta, sigma ); }
752 return gsl_ran_logarithmic( r.
get(), p ); }
760 return gsl_ran_logarithmic_pdf( k, p ); }
770 double const p[],
unsigned int n[] ){
771 gsl_ran_multinomial( r.
get(), K, N, p,
n ); }
780 return gsl_ran_multinomial_pdf( K, p,
n ); }
789 return gsl_ran_multinomial_lnpdf( K, p,
n ); }
798 return gsl_ran_negative_binomial( r.
get(), p,
n ); }
807 return gsl_ran_negative_binomial_pdf( k, p,
n ); }
815 inline unsigned int pascal(
rng const& r,
double p,
unsigned int n ){
816 return gsl_ran_pascal( r.
get(), p,
n ); }
824 inline double pascal_pdf(
unsigned int const k,
double const p,
unsigned int n ){
825 return gsl_ran_pascal_pdf( k, p,
n ); }
834 return gsl_ran_pareto( r.
get(),
a,
b ); }
842 inline double pareto_pdf(
double const x,
double const a,
double const b ){
843 return gsl_ran_pareto_pdf( x,
a,
b ); }
851 return gsl_ran_poisson( r.
get(), mu ); }
860 gsl_ran_poisson_array( r.
get(),
n,
array, mu ); }
867 inline double poisson_pdf(
unsigned int const k,
double const mu ){
868 return gsl_ran_poisson_pdf( k, mu ); }
876 return gsl_ran_rayleigh( r.
get(), sigma ); }
884 return gsl_ran_rayleigh_pdf( x, sigma ); }
893 return gsl_ran_rayleigh_tail( r.
get(),
a, sigma ); }
902 return gsl_ran_rayleigh_tail_pdf( x,
a, sigma ); }
909 inline double tdist(
rng const& r,
double const nu ){
910 return gsl_ran_tdist( r.
get(), nu ); }
917 inline double tdist_pdf(
double const x,
double const nu ){
918 return gsl_ran_tdist_pdf( x, nu ); }
926 return gsl_ran_laplace( r.
get(),
a ); }
934 return gsl_ran_laplace_pdf( x,
a ); }
942 inline double levy(
rng const& r,
double const c,
double const alpha ){
943 return gsl_ran_levy( r.
get(), c, alpha ); }
952 inline double levy_skew(
rng const& r,
double const c,
double const alpha,
double const beta ){
953 return gsl_ran_levy_skew( r.
get(), c, alpha,
beta ); }
962 return gsl_ran_weibull( r.
get(),
a,
b ); }
970 inline double weibull_pdf(
double const x,
double const a,
double const b ){
971 return gsl_ran_weibull_pdf( x,
a,
b ); }
979 inline void dir_2d(
rng const& r,
double* x,
double* y ){
980 gsl_ran_dir_2d( r.
get(), x, y ); }
988 inline void dir_2d( rng const& r, double& x, double& y ){
989 gsl_ran_dir_2d( r.get(), &x, &y ); }
998 gsl_ran_dir_2d_trig_method( r.
get(), x, y ); }
1006 inline void dir_2d_trig_method( rng const& r, double& x, double& y ){
1007 gsl_ran_dir_2d_trig_method( r.get(), &x, &y ); }
1016 inline void dir_3d(
rng const& r,
double* x,
double* y,
double* z ){
1017 gsl_ran_dir_3d( r.
get(), x, y, z ); }
1026 inline void dir_3d( rng const& r, double& x, double& y, double& z ){
1027 gsl_ran_dir_3d( r.get(), &x, &y, &z ); }
1035 inline void dir_nd(
rng const& r,
size_t n,
double* x ){
1036 gsl_ran_dir_nd( r.
get(),
n, x ); }
1043 template<typename DATA>
1045 gsl_ran_dir_nd( r.
get(), x.size(), x.data() ); }
1054 inline void shuffle(
rng const& r,
void* base,
size_t nmembm,
size_t size ){
1055 gsl_ran_shuffle( r.
get(), base, nmembm,
size ); }
1062 template<typename ARRAY>
1064 gsl_ran_shuffle( r.
get(), base.data(), base.size(),
1065 sizeof(
typename ARRAY::value_type ) ); }
1077 inline int choose(
rng const& r,
void* dest,
size_t k,
void* src,
size_t n,
size_t size ){
1078 return gsl_ran_choose( r.
get(), dest, k, src,
n,
size ); }
1087 template<typename ARRAY1, typename ARRAY2>
1088 inline int choose(
rng const& r, ARRAY1& dest, ARRAY2& src ){
1089#ifdef __GXX_EXPERIMENTAL_CXX0X__
1090 if( not std::is_same<typename ARRAY1::value_type,typename ARRAY2::value_type>::value )
1093 return gsl_ran_choose( r.
get(), dest.data(), dest.size(), src.data(), src.size(),
1094 sizeof(
typename ARRAY1::value_type ) ); }
1105 inline void sample(
rng const& r,
void* dest,
size_t k,
void* src,
size_t n,
size_t size ){
1106 gsl_ran_sample( r.
get(), dest, k, src,
n,
size ); }
1114 template<typename ARRAY1, typename ARRAY2>
1115 inline void sample(
rng const& r, ARRAY1& dest, ARRAY2& src ){
1116#ifdef __GXX_EXPERIMENTAL_CXX0X__
1117 if( not std::is_same<typename ARRAY1::value_type,typename ARRAY2::value_type>::value )
1118 throw std::invalid_argument(
"ran::sample: arrays hold different types of data." );
1120 gsl_ran_sample( r.
get(), dest.data(), dest.size(), src.data(), src.size(),
1121 sizeof(
typename ARRAY1::value_type ) ); }
1129 return gsl_ran_discrete( r.
get(), g.
get() ); }
1137 return gsl_ran_discrete_pdf( k, g.
get() ); }
Class for walker algorithm.
discrete_t(gsl_ran_discrete_t *v)
Could construct from a gsl_ran_discrete_t.
bool operator<(discrete_t const &v) const
A container needs to define an ordering for sorting.
bool operator==(discrete_t const &v) const
Two discrete_t are identically equal if their elements are identical.
gsl_ran_discrete_t * get() const
Get the gsl_ran_discrete_t.
discrete_t & operator=(discrete_t const &v)
The assignment operator.
discrete_t(discrete_t const &v)
The copy constructor.
void swap(discrete_t &v)
Swap two discrete_t.
bool operator!=(discrete_t const &v) const
Two discrete_t are different equal if their elements are not identical.
bool operator<=(discrete_t const &v) const
A container needs to define an ordering for sorting.
gsl_ran_discrete_t * ccgsl_pointer
The shared pointer.
bool unique() const
Find if this is the only object sharing the gsl_ran_discrete_t.
~discrete_t()
The destructor only deletes the pointers if count reaches zero.
bool operator>=(discrete_t const &v) const
A container needs to define an ordering for sorting.
size_t use_count() const
Find how many discrete_t objects share this pointer.
discrete_t()
The default constructor is only really useful for assigning to.
bool empty() const
Find if the discrete_t is empty.
size_t * count
The shared reference count.
bool operator>(discrete_t const &v) const
A container needs to define an ordering for sorting.
discrete_t(ARRAY const &P)
The standard constructor creates a new discrete_t.
gsl_rng * get() const
Get the gsl_rng.
size_t size(series const &cs)
C++ version of gsl_cheb_size().
void dir_2d_trig_method(rng const &r, double &x, double &y)
C++ version of gsl_ran_dir_2d_trig_method().
double geometric_pdf(unsigned int const k, double const p)
C++ version of gsl_ran_geometric_pdf().
double dirichlet_lnpdf(size_t const K, double const alpha[], double const theta[])
C++ version of gsl_ran_dirichlet_lnpdf().
double gumbel2_pdf(double const x, double const a, double const b)
C++ version of gsl_ran_gumbel2_pdf().
double gamma_knuth(rng const &r, double const a, double const b)
C++ version of gsl_ran_gamma_knuth().
int choose(rng const &r, ARRAY1 &dest, ARRAY2 &src)
C++ version of gsl_ran_choose().
double landau(rng const &r)
C++ version of gsl_ran_landau().
unsigned int bernoulli(rng const &r, double p)
C++ version of gsl_ran_bernoulli().
double exppow(rng const &r, double const a, double const b)
C++ version of gsl_ran_exppow().
double gaussian_pdf(double const x, double const sigma)
C++ version of gsl_ran_gaussian_pdf().
double fdist_pdf(double const x, double const nu1, double const nu2)
C++ version of gsl_ran_fdist_pdf().
double gaussian(rng const &r, double const sigma)
C++ version of gsl_ran_gaussian().
double negative_binomial_pdf(unsigned int const k, double const p, double n)
C++ version of gsl_ran_negative_binomial_pdf().
double pareto_pdf(double const x, double const a, double const b)
C++ version of gsl_ran_pareto_pdf().
double exppow_pdf(double const x, double const a, double const b)
C++ version of gsl_ran_exppow_pdf().
double levy(rng const &r, double const c, double const alpha)
C++ version of gsl_ran_levy().
double binomial_pdf(unsigned int const k, double const p, unsigned int const n)
C++ version of gsl_ran_binomial_pdf().
unsigned int hypergeometric(rng const &r, unsigned int n1, unsigned int n2, unsigned int t)
C++ version of gsl_ran_hypergeometric().
double cauchy(rng const &r, double const a)
C++ version of gsl_ran_cauchy().
double tdist_pdf(double const x, double const nu)
C++ version of gsl_ran_tdist_pdf().
double flat(rng const &r, double const a, double const b)
C++ version of gsl_ran_flat().
double erlang_pdf(double const x, double const a, double const n)
C++ version of gsl_ran_erlang_pdf().
double pascal_pdf(unsigned int const k, double const p, unsigned int n)
C++ version of gsl_ran_pascal_pdf().
double weibull(rng const &r, double const a, double const b)
C++ version of gsl_ran_weibull().
double cauchy_pdf(double const x, double const a)
C++ version of gsl_ran_cauchy_pdf().
void dir_nd(rng const &r, DATA &x)
C++ version of gsl_ran_dir_nd().
double gumbel1(rng const &r, double const a, double const b)
C++ version of gsl_ran_gumbel1().
double beta(rng const &r, double const a, double const b)
C++ version of gsl_ran_beta().
size_t discrete(rng const &r, discrete_t const &g)
C++ version of gsl_ran_discrete().
double multinomial_lnpdf(size_t const K, double const p[], unsigned int const n[])
C++ version of gsl_ran_multinomial_lnpdf().
unsigned int binomial_tpe(rng const &r, double p, unsigned int n)
C++ version of gsl_ran_binomial_tpe().
double dirichlet_pdf(size_t const K, double const alpha[], double const theta[])
C++ version of gsl_ran_dirichlet_pdf().
double rayleigh_pdf(double const x, double const sigma)
C++ version of gsl_ran_rayleigh_pdf().
void sample(rng const &r, ARRAY1 &dest, ARRAY2 &src)
C++ version of gsl_ran_sample().
double chisq_pdf(double const x, double const nu)
C++ version of gsl_ran_chisq_pdf().
double rayleigh_tail_pdf(double const x, double const a, double const sigma)
C++ version of gsl_ran_rayleigh_tail_pdf().
double levy_skew(rng const &r, double const c, double const alpha, double const beta)
C++ version of gsl_ran_levy_skew().
double gaussian_tail(rng const &r, double const a, double const sigma)
C++ version of gsl_ran_gaussian_tail().
double poisson_pdf(unsigned int const k, double const mu)
C++ version of gsl_ran_poisson_pdf().
double rayleigh(rng const &r, double const sigma)
C++ version of gsl_ran_rayleigh().
double erlang(rng const &r, double const a, double const n)
C++ version of gsl_ran_erlang().
double gaussian_ratio_method(rng const &r, double const sigma)
C++ version of gsl_ran_gaussian_ratio_method().
double beta_pdf(double const x, double const a, double const b)
C++ version of gsl_ran_beta_pdf().
double landau_pdf(double const x)
C++ version of gsl_ran_landau_pdf().
void poisson_array(rng const &r, size_t n, unsigned int array[], double mu)
C++ version of gsl_ran_poisson_array().
double lognormal(rng const &r, double const zeta, double const sigma)
C++ version of gsl_ran_lognormal().
double hypergeometric_pdf(unsigned int const k, unsigned int const n1, unsigned int const n2, unsigned int t)
C++ version of gsl_ran_hypergeometric_pdf().
double gaussian_ziggurat(rng const &r, double const sigma)
C++ version of gsl_ran_gaussian_ziggurat().
double gamma_int(rng const &r, unsigned int const a)
C++ version of gsl_ran_gamma_int().
double ugaussian_tail(rng const &r, double const a)
C++ version of gsl_ran_ugaussian_tail().
double weibull_pdf(double const x, double const a, double const b)
C++ version of gsl_ran_weibull_pdf().
double laplace(rng const &r, double const a)
C++ version of gsl_ran_laplace().
unsigned int geometric(rng const &r, double const p)
C++ version of gsl_ran_geometric().
void multinomial(rng const &r, size_t const K, unsigned int const N, double const p[], unsigned int n[])
C++ version of gsl_ran_multinomial().
double logistic(rng const &r, double const a)
C++ version of gsl_ran_logistic().
double gamma(rng const &r, double const a, double const b)
C++ version of gsl_ran_gamma().
unsigned int binomial(rng const &r, double p, unsigned int n)
C++ version of gsl_ran_binomial().
double exponential(rng const &r, double const mu)
C++ version of gsl_ran_exponential().
double rayleigh_tail(rng const &r, double const a, double const sigma)
C++ version of gsl_ran_rayleigh_tail().
void dirichlet(rng const &r, size_t const K, double const alpha[], double theta[])
C++ version of gsl_ran_dirichlet().
double ugaussian_tail_pdf(double const x, double const a)
C++ version of gsl_ran_ugaussian_tail_pdf().
unsigned int logarithmic(rng const &r, double const p)
C++ version of gsl_ran_logarithmic().
unsigned int poisson(rng const &r, double mu)
C++ version of gsl_ran_poisson().
unsigned int negative_binomial(rng const &r, double p, double n)
C++ version of gsl_ran_negative_binomial().
double gaussian_tail_pdf(double const x, double const a, double const sigma)
C++ version of gsl_ran_gaussian_tail_pdf().
void dir_2d(rng const &r, double &x, double &y)
C++ version of gsl_ran_dir_2d().
double lognormal_pdf(double const x, double const zeta, double const sigma)
C++ version of gsl_ran_lognormal_pdf().
double exponential_pdf(double const x, double const mu)
C++ version of gsl_ran_exponential_pdf().
void dir_3d(rng const &r, double &x, double &y, double &z)
C++ version of gsl_ran_dir_3d().
double bivariate_gaussian_pdf(double const x, double const y, double const sigma_x, double const sigma_y, double const rho)
C++ version of gsl_ran_bivariate_gaussian_pdf().
double tdist(rng const &r, double const nu)
C++ version of gsl_ran_tdist().
double gamma_pdf(double const x, double const a, double const b)
C++ version of gsl_ran_gamma_pdf().
unsigned int pascal(rng const &r, double p, unsigned int n)
C++ version of gsl_ran_pascal().
double logarithmic_pdf(unsigned int const k, double const p)
C++ version of gsl_ran_logarithmic_pdf().
double bernoulli_pdf(unsigned int const k, double p)
C++ version of gsl_ran_bernoulli_pdf().
double chisq(rng const &r, double const nu)
C++ version of gsl_ran_chisq().
double ugaussian_ratio_method(rng const &r)
C++ version of gsl_ran_ugaussian_ratio_method().
void shuffle(rng const &r, ARRAY &base)
C++ version of gsl_ran_shuffle().
double pareto(rng const &r, double a, double const b)
C++ version of gsl_ran_pareto().
double flat_pdf(double x, double const a, double const b)
C++ version of gsl_ran_flat_pdf().
void bivariate_gaussian(rng const &r, double sigma_x, double sigma_y, double rho, double &x, double &y)
C++ version of gsl_ran_bivariate_gaussian().
double logistic_pdf(double const x, double const a)
C++ version of gsl_ran_logistic_pdf().
unsigned int binomial_knuth(rng const &r, double p, unsigned int n)
C++ version of gsl_ran_binomial_knuth().
double ugaussian(rng const &r)
C++ version of gsl_ran_ugaussian().
double gamma_mt(rng const &r, double const a, double const b)
C++ version of gsl_ran_gamma_mt().
double discrete_pdf(size_t k, discrete_t const &g)
C++ version of gsl_ran_discrete_pdf().
double gumbel1_pdf(double const x, double const a, double const b)
C++ version of gsl_ran_gumbel1_pdf().
double ugaussian_pdf(double const x)
C++ version of gsl_ran_ugaussian_pdf().
double fdist(rng const &r, double const nu1, double const nu2)
C++ version of gsl_ran_fdist().
double multinomial_pdf(size_t const K, double const p[], unsigned int const n[])
C++ version of gsl_ran_multinomial_pdf().
double gumbel2(rng const &r, double const a, double const b)
C++ version of gsl_ran_gumbel2().
double laplace_pdf(double const x, double const a)
C++ version of gsl_ran_laplace_pdf().
size_t n(workspace const &w)
C++ version of gsl_rstat_n().
double P(double phi, double k, double n, mode_t mode)
C++ version of gsl_sf_ellint_P().
int array(int const nmax, double const x, DATA &result_array)
C++ version of gsl_sf_hermite_array().
double b(int order, double qq)
C++ version of gsl_sf_mathieu_b().
double a(int order, double qq)
C++ version of gsl_sf_mathieu_a().
double zeta(double const s)
C++ version of gsl_sf_zeta().
The gsl package creates an interface to the GNU Scientific Library for C++.