使用Boost生成基于Beta分布的随机数

Eri*_*son 7 c++ random statistics boost distribution

我试图使用Boost根据使用C++的beta分布生成随机数.我已经在网上看到很多根据random.hpp中的分布生成随机数的例子(例如本书).但是,我无法将它们翻译为使用beta.hpp中的beta发行版.

谢谢.

bto*_*own 13

您首先要从范围(0,1)中均匀地绘制一个随机数.给定任何分布,然后您可以将该数字插入到分布的"分位数函数"中,结果就像从分布中抽取随机值一样.从这里:

从没有跳跃的cdf的任意分布生成随机数的一般方法是使用cdf的反函数:G(y)= F ^ { - 1}(y).如果u(1),...,u(n)是来自均匀(0,1)分布的随机数,那么G(u(1)),...,G(u(n))是随机的来自cdf F(x)的分布的样本.

那么我们如何获得beta分布的分位数函数呢?beta.hpp的文档在这里.你应该可以使用这样的东西:

#include <boost/math/distributions.hpp>
using namespace boost::math;

double alpha, beta, randFromUnif; 
//parameters and the random value on (0,1) you drew

beta_distribution<> dist(alpha, beta);
double randFromDist = quantile(dist, randFromUnif);
Run Code Online (Sandbox Code Playgroud)