Go to the documentation of this file.
6 #ifdef DROPPINGTHISINRPACKAGE
10 #include <Eigen/Dense>
37 m_rng{
static_cast<std::uint32_t
>(std::chrono::high_resolution_clock::now().time_since_epoch().count())}
55 template<
typename float_t>
111 template<
typename float_t>
121 template<
typename float_t>
131 template<
typename float_t>
138 template<
typename float_t>
145 template<
typename float_t>
148 return m_mu + m_sigma * m_z_gen(m_rng);
159 template<
typename float_t>
194 template<
typename float_t>
202 template<
typename float_t>
205 return m_t_gen(m_rng);
216 template<
typename float_t>
248 void setMu(float_t mu);
272 template<
typename float_t>
282 template<
typename float_t>
292 template<
typename float_t>
299 template<
typename float_t>
306 template<
typename float_t>
309 return std::exp(m_mu + m_sigma * m_z_gen(m_rng));
320 template<
typename float_t>
361 template<
typename float_t>
364 , m_gamma_gen(alpha, beta)
369 template<
typename float_t>
372 return m_gamma_gen(m_rng);
383 template<
typename float_t>
424 template<
typename float_t>
427 , m_gamma_gen(1.0, 1.0)
432 template<
typename float_t>
435 , m_gamma_gen(alpha, beta)
440 template<
typename float_t>
443 return 1.0/m_gamma_gen(m_rng);
458 template<
typename float_t>
501 template<
typename float_t>
516 template<
typename float_t>
520 bool accepted =
false;
523 proposal = m_mu + m_sigma*m_z_gen(this->m_rng);
524 if((m_lower <= proposal) & (proposal <= m_upper))
538 template<
typename float_t,
typename int_t>
579 template<
typename float_t,
typename int_t>
586 template<
typename float_t,
typename int_t>
593 template<
typename float_t,
typename int_t>
596 m_p_gen.param(
typename decltype(m_p_gen)::param_type(lambda));
600 template<
typename float_t,
typename int_t>
603 return m_p_gen(m_rng);
614 template<
typename float_t,
typename int_t>
638 void setP(float_t p);
658 template<
typename float_t,
typename int_t>
665 template<
typename float_t,
typename int_t>
672 template<
typename float_t,
typename int_t>
679 template<
typename float_t,
typename int_t>
682 return (m_B_gen(m_rng)) ? 1 : 0;
694 template<
size_t dim,
typename float_t>
700 using Vec = Eigen::Matrix<float_t,dim,1>;
702 using Mat = Eigen::Matrix<float_t,dim,dim>;
756 template<
size_t dim,
typename float_t>
766 template<
size_t dim,
typename float_t>
776 template<
size_t dim,
typename float_t>
779 Eigen::SelfAdjointEigenSolver<Mat> eigenSolver(covMat);
780 m_scale_mat = eigenSolver.eigenvectors() * eigenSolver.eigenvalues().cwiseMax(0).cwiseSqrt().asDiagonal();
784 template<
size_t dim,
typename float_t>
791 template<
size_t dim,
typename float_t>
795 for (
size_t i=0; i< dim; ++i)
797 Z(i) = m_z_gen(this->m_rng);
799 return m_mean + m_scale_mat * Z;
811 template<
typename float_t>
844 template<
typename float_t>
847 , m_unif_gen(0.0, 1.0)
852 template<
typename float_t>
855 , m_unif_gen(lower, upper)
860 template<
typename float_t>
863 return m_unif_gen(m_rng);
876 template<
size_t N,
typename float_t>
891 std::array<unsigned int, N>
sample(
const std::array<float_t, N> &logWts);
895 template<
size_t N,
typename float_t>
899 template<
size_t N,
typename float_t>
910 std::array<float_t, N> w;
911 float_t m = *std::max_element(logWts.begin(), logWts.end());
912 std::transform(logWts.begin(), logWts.end(), w.begin(),
913 [&m](float_t d) -> float_t { return std::exp(d-m); } );
914 std::discrete_distribution<> kGen(w.begin(), w.end());
917 std::array<unsigned int, N> ks;
918 for(
size_t i = 0; i < N; ++i){
919 ks[i] = kGen(this->m_rng);
966 template<
typename float_t>
1011 template<
typename float_t>
1014 , m_first_gamma_gen(alpha, 1.0)
1015 , m_second_gamma_gen(beta, 1.0)
1020 template<
typename float_t>
1023 float_t first = m_first_gamma_gen(m_rng);
1024 float_t second = m_second_gamma_gen(m_rng);
1025 return first / (first + second);
void setMean(const Vec &meanVec)
sets the mean vector of the sampler.
Definition: rv_samp.h:785
float_t m_sigma
sigma
Definition: rv_samp.h:267
Eigen::Matrix< float_t, dim, dim > Mat
Definition: rv_samp.h:702
std::student_t_distribution< float_t > m_t_gen
makes t random variates
Definition: rv_samp.h:189
A class that performs sampling from a truncated univariate Normal distribution.
Definition: rv_samp.h:459
PoissonSampler()
Default-constructor sets up for Poisson random variate generation with lambda = 1.
Definition: rv_samp.h:580
float_t m_mu
the mean
Definition: rv_samp.h:103
Mat m_scale_mat
covariance matrix
Definition: rv_samp.h:748
std::gamma_distribution< float_t > m_gamma_gen
makes gamma random variates that we take the reciprocal of
Definition: rv_samp.h:413
std::poisson_distribution< int_t > m_p_gen
makes normal random variates
Definition: rv_samp.h:575
UnivLogNormSampler()
Default-constructor sets up for standard Normal random variate generation.
Definition: rv_samp.h:273
std::normal_distribution< float_t > m_z_gen
makes normal random variates
Definition: rv_samp.h:745
void setMean(float_t mu)
sets the mean of the sampler.
Definition: rv_samp.h:132
float_t sample()
draws a random number.
Definition: rv_samp.h:441
void setP(float_t p)
sets the parameter p.
Definition: rv_samp.h:673
float_t m_alpha
mu
Definition: rv_samp.h:353
k_gen()
default constructor. only one available.
Definition: rv_samp.h:896
UnivStudTSampler()=delete
Default-construction is deleted.
std::normal_distribution< float_t > m_z_gen
makes normal random variates
Definition: rv_samp.h:100
TruncUnivNormSampler(float_t mu, float_t sigma, float_t lower, float_t upper)
The user must supply both mean and std. dev.
Definition: rv_samp.h:502
float_t sample()
Draws a random number.
Definition: rv_samp.h:146
Vec m_mean
mean vector
Definition: rv_samp.h:751
float_t m_mu
mu
Definition: rv_samp.h:264
float_t sample()
draws a random number.
Definition: rv_samp.h:307
std::gamma_distribution< float_t > m_gamma_gen
makes gamma random variates
Definition: rv_samp.h:350
std::normal_distribution< float_t > m_z_gen
makes normal random variates
Definition: rv_samp.h:485
void setCovar(const Mat &covMat)
sets the covariance matrix of the sampler.
Definition: rv_samp.h:777
std::normal_distribution< float_t > m_z_gen
makes normal random variates
Definition: rv_samp.h:261
float_t m_alpha
mu
Definition: rv_samp.h:416
int_t sample()
Draws a random number.
Definition: rv_samp.h:680
void setMu(float_t mu)
sets the location parameter of the logged random variable.
Definition: rv_samp.h:293
A class that performs sampling from a univariate Gamma distribution.
Definition: rv_samp.h:321
MVNSampler()
Default-constructor sets up for multivariate standard Normal random variate generation.
Definition: rv_samp.h:757
float_t m_mu
the mean
Definition: rv_samp.h:488
UnivGammaSampler()=delete
Default-constructor ...
float_t sample()
Draws a random number.
Definition: rv_samp.h:517
rvsamp_base()
The default constructor. This is the only option available. Sets the seed with the clock.
Definition: rv_samp.h:36
A class that performs sampling from a univariate Inverse Gamma distribution.
Definition: rv_samp.h:384
float_t m_p
the mean
Definition: rv_samp.h:654
A class that performs sampling with replacement (useful for the index sampler in an APF)
Definition: rv_samp.h:877
A class that performs sampling from a Poisson distribution.
Definition: rv_samp.h:539
A class that performs sampling from Student's T distribution.
Definition: rv_samp.h:160
std::gamma_distribution< float_t > m_first_gamma_gen
makes gamma random variates
Definition: rv_samp.h:997
A class that performs sampling from a multivariate normal distribution.
Definition: rv_samp.h:695
A class that performs sampling from a univariate Bernoulli distribution.
Definition: rv_samp.h:615
float_t sample()
Draws a random number.
Definition: rv_samp.h:203
void setSigma(float_t sigma)
sets the scale parameter of the logged random variable.
Definition: rv_samp.h:300
float_t m_beta
sigma
Definition: rv_samp.h:356
void setStdDev(float_t sigma)
sets the standard deviation of the sampler.
Definition: rv_samp.h:139
Eigen::Matrix< float_t, dim, 1 > Vec
Definition: rv_samp.h:700
Base class for all random variable sampler types. Primary benefit is that it sets the seed for you.
Definition: rv_samp.h:29
float_t m_beta
sigma
Definition: rv_samp.h:419
float_t m_upper
the upper bound
Definition: rv_samp.h:497
UnivInvGammaSampler()
Default-constructor ...
Definition: rv_samp.h:425
std::array< unsigned int, N > sample(const std::array< float_t, N > &logWts)
sample N times from (0,1,...N-1)
Definition: rv_samp.h:900
float_t m_beta
the second shape parameter
Definition: rv_samp.h:1006
UnivNormSampler()
Default-constructor sets up for standard Normal random variate generation.
Definition: rv_samp.h:112
A class that performs sampling from a univariate Log-Normal distribution.
Definition: rv_samp.h:217
float_t m_lower
the lower bound
Definition: rv_samp.h:494
A class that performs sampling from a univariate Normal distribution.
Definition: rv_samp.h:56
float_t m_sigma
the standard deviation
Definition: rv_samp.h:491
A class that performs sampling from a Beta distribution.
Definition: rv_samp.h:967
float_t m_sigma
the standard deviation
Definition: rv_samp.h:106
int_t sample()
Draws a random number.
Definition: rv_samp.h:601
float_t sample()
draws a random number.
Definition: rv_samp.h:370
std::mt19937 m_rng
prng
Definition: rv_samp.h:43
std::bernoulli_distribution m_B_gen
makes normal random variates
Definition: rv_samp.h:651
float_t sample()
Draws a random number.
Definition: rv_samp.h:1021
float_t m_alpha
the first shape parameter
Definition: rv_samp.h:1003
auto sample() -> Vec
Draws a random vector.
Definition: rv_samp.h:792
std::gamma_distribution< float_t > m_second_gamma_gen
makes other gamma random variates
Definition: rv_samp.h:1000
BernSampler()
Default-constructor sets up for Bernoulli random variate generation with p = .5.
Definition: rv_samp.h:659
void setLambda(float_t lambda)
sets the parameter lambda.
Definition: rv_samp.h:594