小编jaf*_*aff的帖子

来自Beta发行版的随机数,C++

我用C++编写了一个模拟,它从特定的概率分布中生成(1,000,000)^ 2个数字,然后用它们做一些事情.到目前为止,我使用了指数,正常,伽玛,均匀和泊松分布.以下是其中一个的代码:

#include <boost/random.hpp>

...main...

    srand(time(NULL)) ;
    seed = rand();
    boost::random::mt19937 igen(seed) ;
    boost::random::variate_generator<boost::random::mt19937, boost::random::normal_distribution<> >
    norm_dist(igen, boost::random::normal_distribution<>(mu,sigma)) ;
Run Code Online (Sandbox Code Playgroud)

现在我需要为Beta发行版运行它.到目前为止,我所做的所有发行都需要10-15个小时.Beta发行版不在boost/random包中,所以我不得不使用boost/math/distributions包.我在StackOverflow上找到了这个提出解决方案的页面.这是(复制粘贴):

#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)

我复制它并且它有效.我的模拟的运行时间估计是线性的并且可以准确地预测.他们说这将持续25天.我看到了两种可能性:1.提出的方法不如我以前用于其他发行版的方法2. Beta分布更难以从中生成随机数

请记住,我对C++编码的理解很少,所以我问的问题可能很愚蠢.我不能等待一个月来完成这个模拟,所以我能做些什么来改善它?也许使用我正在使用的初始方法并修改它以使用boost/math/distributions包?我甚至不知道这是否可能.

另一条可能有用的信息是,我需要生成的所有(1,000,000)^ 2个数字的参数相同.我这样说是因为Beta发行版确实有一个讨厌的PDF,也许参数修复的知识可以某种方式用于简化过程?只是随机猜测.

c++ boost boost-random beta-distribution

8
推荐指数
1
解决办法
2747
查看次数

标签 统计

beta-distribution ×1

boost ×1

boost-random ×1

c++ ×1