所以,我没有环视堆栈溢出与谷歌相当数量的问这个问题之前。 我有我的工作的模拟和需要能够为0,并遵循一定的统计分布1.0之间产生随机输入数据。
到目前为止,我已经获得了正态分布和均匀分布的实际工作正常,但我坚持用帕累托分布。
前两种是在升压/无规/可用,但帕累托仅可作为原料分布(即未提供的变量发生器被使用)。 有谁知道的方式来产生所述随机数? 请注意,我已经倒在提升的文档,包括对Pareto分布。 我期待产生遵循帕累托分布, 不能用帕累托分布来确定统计概率的随机数。 我能想到的,到目前为止的唯一的事情就是用一个统一的发电机和插件的值到帕累托分布的CDF(但必须有比这更好的方式)。
任何帮助,因为我是新来提振不胜感激。
谢谢!
下面是我使用的前两个代码,亦随一个变体产生。 这是非常多的测试代码,所以请不要捶我的风格或约定:
#include <time.h>
#include <iostream>
#include <boost/random/normal_distribution.hpp>
#include <boost/random/uniform_real_distribution.hpp>
#include <boost/math/distributions/pareto.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/variate_generator.hpp>
int main(){
boost::mt19937 randGen(time(0));
boost::normal_distribution<> dist1(.5,.2);
boost::random::uniform_real_distribution<> dist2(0.0,1.0);
boost::variate_generator<boost::mt19937&,boost::normal_distribution<> > generator1(randGen,dist1);
boost::variate_generator<boost::mt19937&,boost::random::uniform_real_distribution<> > generator2(randGen,dist2);
for(int x = 0; x < 10; x++)
std::cout << generator1() << std::endl;
std::cout << "\n\n\n";
for(int x = 0; x < 10; x++)
std::cout << generator2() << std::endl;
return 0;
}