c语言伽马分布随机数,来自Beta分布的随机数,C

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

#include

...main...

srand(time(NULL)) ;

seed = rand();

boost::random::mt19937 igen(seed) ;

boost::random::variate_generator<:random::mt19937 boost::random::normal_distribution> >

norm_dist(igen, boost::random::normal_distribution<>(mu,sigma)) ;

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

#include

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

我复制了它并且它起作用了.我的模拟的运行时间估计是线性的并且可以准确地预测.他们说这将持续25天.我看到两种可能性:

1.提出的方法不如我之前用于其他分发的方法

2. Beta分布很难从中生成随机数

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值