7
我正在尝试使用Boost来根据使用C++的Beta分布生成随机数。我在网上看到很多例子,根据random.hpp中的分布生成随机数(例如this book)。但是,我无法将它们翻译成使用beta.hpp中的beta版本。使用Boost生成基于Beta分布的随机数
谢谢。
我正在尝试使用Boost来根据使用C++的Beta分布生成随机数。我在网上看到很多例子,根据random.hpp中的分布生成随机数(例如this book)。但是,我无法将它们翻译成使用beta.hpp中的beta版本。使用Boost生成基于Beta分布的随机数
谢谢。
您首先需要从范围(0,1)中统一绘制一个随机数。给定任何分布,然后可以将该数字插入分布的“分位数函数”中,结果就好像从分布中抽取一个随机值。从here:{ - 1}(Y)G(Y)= F ^:
的一般方法,从具有不跳跃一个CDF是使用反函数的CDF任意分布产生的随机数。如果u(1),...,u(n)是(0,1)分布上均匀随机数,则G(u(1)),...,G(u(n))是一个随机数用cdf F(x)分布的样本。
那么我们如何获得beta分布的分位数函数呢? beta.hpp的文档是here。你应该可以使用这样的东西:
#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);
谢谢!很棒。 – 2010-11-15 15:40:15
显然这是一个受欢迎的答案,所以我会添加一个警告:对于某些分布,您可能在某些点处具有接近垂直的分位数函数,在这种情况下,您可能会遇到数值/分辨率问题,其中你传入的'randFromUnif'浮点数没有足够的分辨率在通过分位数时产生随机数:你最终会得到量化的输出值。因此,请了解您的问题域和分位数功能,以确保您了解这一点! – btown 2014-06-30 22:26:51