生成满足一定分布的随机数,是统计模拟、系统仿真等应用中最基本的要求。matlab中提供了函数可以生成各种常见分布的随机数,c++使用boost random库也可以很容易实现。

一、例子

boost random库的文档提供了一个例子,模拟掷色子。投掷一个均匀的色子,六个面每个面出现的概率应该是相等的,也就是说,投掷出的点数应该是服从{ 1 2 3 4 5 6 } 上的均匀分布的。

#include <boost/random.hpp>
#include <boost/random.hpp>
#include <iostream>

int main()

{

boost::mt19937gen;                                    
   boost::uniform_int<>dist(1,6);
   boost::variate_generator<boost::mt19937&,boost::uniform_int<>>die(gen,dist);

for( int i=0; i<10; ++i) {
       std::cout<<die() <<std::endl;
   }
}

上面的例子虽然简单,但也可以看出要生成满足一定分布的伪随机数的一般步骤:

首先,我们需要一个伪随机数发生器(generator)。语句

boost::mt19937 gen;

声明了一个mt19937类型的伪随机数发生器gen。boost一共提供了17种类型伪随机发生器供使用者选择,它们是:

minstd_rand,  rand48, lrand48, ecuyer1988, kreutzer1986, hellekalek1995, mt11213b, mt19937, lagged_fibonacci 607, lagged_fibonacci1279, lagged_fibonacci2281, lagged_fibonacci3217, lagged_fibonacci4423, lagged_fibonacci9689, lagged_fibonacci19937, lagged_fibonacci23209, lagged_fibonacci44497。

总之,名字是一个比一个丑啊。到底选用何种发生器,需要使用者在性能、质量和内存之间进行权衡,一般的应用的话,boost文档推荐使用mt19937就够了。也可以选择多种发生器,使结果相互印证,从而更可信。

其次,需要一个分布函数。由伪随机数发生器生成的伪随机数一般是一个很大区间上的均匀分布(如[1,2^99999999])。而要产生我们想要的分布的随机数(本例中,我们想要的分布为 {1 2 3 4 5 6 }上的均匀分布),还要对它们做某些变换。

boost::uniform_int<> dist(1, 6);

就是干这个事的。

boost random提供了如下的分布函数:

uniform_smallint ------ 一个整数集上的离散均匀分布

uniform_int ------ 一个整数集上的离散均匀分布

uniform_01 ------ [0, 1)上的连续均匀分布

uniform_real ------ [ min, max)上的连续均匀分布

bernoulli_distribution ------ 伯努利分布

geometric_distribution ------ 几何分布

triangle_distribution ------ 三角分布

exponential_distribution ------ 指数分布

normal_distribution ------ 正态分布

lognormal_distribution ------ 对数正态分布

uniform_on_sphere ------ 球面上的均匀分布

最后,把以上两个结合生成我们想要的随机数发生器:

boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(gen, dist);

转载于:https://blog.51cto.com/no001/1347208

boost random library的使用相关推荐

  1. 了解 Boost Filesystem Library文件系统

    C++ 语言(实际上是 C++ 标准)的最常见问题之一是,缺乏定义良好的库来帮助处理文件系统查询和操作.由于这个原因,程序员不得不使用本机操作系统提供的应用程序编程接口(Application Pro ...

  2. 了解 Boost Filesystem Library

    C++ 语言(实际上是 C++ 标准)的最常见问题之一是,缺乏定义良好的库来帮助处理文件系统查询和操作.由于这个原因,程序员不得不使用本机操作系统提供的应用程序编程接口(Application Pro ...

  3. boost::random::const_mod相关的测试程序

    boost::random::const_mod相关的测试程序 实现功能 C++实现代码 实现功能 boost::random::const_mod相关的测试程序 C++实现代码 #include & ...

  4. boost::random模块使用多精度类型测试所有与整数相关的生成器和分布的测试程序

    boost::random模块使用多精度类型测试所有与整数相关的生成器和分布的测试程序 实现功能 C++实现代码 实现功能 boost::random模块使用多精度类型测试所有与整数相关的生成器和分布 ...

  5. boost::random模块使用多精度类型测试所有与浮点相关的生成器和分布的测试程序

    boost::random模块使用多精度类型测试所有与浮点相关的生成器和分布的测试程序 实现功能 C++实现代码 实现功能 boost::random模块使用多精度类型测试所有与浮点相关的生成器和分布 ...

  6. boost::random模块实现允许直观地检查分布函数的结果的测试程序

    boost::random模块实现允许直观地检查分布函数的结果的测试程序 实现功能 C++实现代码 实现功能 boost::random模块实现允许直观地检查分布函数的结果的测试程序 C++实现代码 ...

  7. boost::random模块实现如何使用随机数库的简短演示程序

    boost::random模块实现如何使用随机数库的简短演示程序 实现功能 C++实现代码 实现功能 boost::random模块实现如何使用随机数库的简短演示程序 C++实现代码 #include ...

  8. boost::random模块生成随机 8 个字符密码相关的测试程序

    boost::random模块生成随机 8 个字符密码相关的测试程序 实现功能 C++实现代码 实现功能 boost::random模块生成随机 8 个字符密码相关的测试程序 C++实现代码 #inc ...

  9. boost Filesystem Library Version 3关于文件的一些函数封装 fsync()函数

    boost boost Filesystem Library Version 3 boost::filesystem使用方法,根据路径创建文件夹 使用boost.filesystem检查文件是否存在的 ...

最新文章

  1. python 基础 7.6 sys 模块
  2. linux进程khungtaskd,Linux查看进程的所有信息的方法示例
  3. android小部件如何实时更新,android – 使用AlarmManager手动更新小部件
  4. 我对汇编中进位和溢出的理解
  5. wxWidgets:wxRichTextStyleListCtrl类用法
  6. C++中ASCII、unicode与Utf8之间的相互转化
  7. 基于PCA和贝叶斯决策对CIFAR-10数据图像分类
  8. PHP 处理TXT文件(打开/关闭/检查/读取)
  9. 电量统计(2)-日志
  10. 学习日记-wps表格 工资条的制作
  11. Linux 卸载及删除磁盘分区
  12. 硬核 | 用Python给女朋友送一颗彩蛋
  13. 网络安全笔记-业务安全
  14. 小提琴统计图_小提琴图解读 统计学
  15. Spark SQL: Relational Data Processing in Spark
  16. 教师职业道德与专业发展
  17. 嵌入式的可移植性和可复用性
  18. 基于java爱宠医院管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  19. CreateJS 入门小记
  20. 金三银四求职季,前端面试题小梳理(HTML、CSS、JS)

热门文章

  1. Xorequ(BZOJ3329+数位DP+斐波那契数列)
  2. 报表测试用例设计方法总结
  3. hibernate对象关系实现(二)一对一
  4. PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程
  5. Python 2.7 Exception格式化工具
  6. 24小时学通linux视频教程下载
  7. 形态数轴的非递进现象
  8. 十字交叉链表c语言,C语言课程设计报告—十字交叉链表的应用.doc
  9. linux7开启ipmi,通过IPMI安装CentOS7教程
  10. 3.12 总结-深度学习第五课《序列模型》-Stanford吴恩达教授