一、摘要

对于满足指定分布的自由变量,如果无法通过分布函数公式计算得到其期望和方差,可以考虑使用采样法得到其期望、方差值的近似值。在此过程中需要按照特定的分布函数进行随机采样,并统计采样数据,可以使用蒙特卡洛或者接受拒接方法得到满足特定分布的随机变量。本文简要介绍了如何使用C++random头文件中自带的函数得到满足 均匀分布高斯分布的变量 。

二、代码

0. c++中随机数生成的基本步骤

  1. 定义随机数生成器对象gen,random.h头文件中包含几个随机数生成器类,包括mt19937、default_random_engine等等。
  2. 定义随机数分布对象dis,randome头文件中包含了均匀分布(uniform_int_distribution,uniform_real_distribution)、正态分布(normal_distribution)等等几种常用分布类。
  3. 使用dis(gen)产生一个满足dis分布的随机变量。

random头文件中关于随机数生成器、分布类的详细信息请参考cplusplus官网。

1. 均匀分布代码

#include <iostream>
#include <random>
#include <time.h>
using namespace std;
int main() {mt19937 gen((unsigned int) time(nullptr)); // 定义随机数生成器对象gen,使用time(nullptr)作为随机数生成器的种子uniform_real_distribution<double> dis(-1.0, 1.0); // 定义随机数分布器对象dis,为在[-1.0,1.0]区间内的均匀分布for (int i = 0; i < 10; i++) {cout << dis(gen) << endl;}return 0;
}

输出结果为:

0.946503
0.823232
0.340609
0.634292
-0.499202
0.350881
0.925468
-0.914869
-0.648034
-0.36995

2. 高斯分布代码

#include <iostream>
#include <random>
#include <time.h>
using namespace std;
int main() {mt19937 gen((unsigned int) time(nullptr)); // 定义随机数生成器对象gen,使用time(nullptr)作为随机数生成器的种子normal_distribution<double> dis(0.0, 1.0); // 定义随机数分布器对象dis,期望为0.0,标准差为1.0的正态分布for (int i = 0; i < 10; i++) {cout << dis(gen) << endl;}return 0;
}

输出结果为:

-0.188695
0.0804475
-0.647262
-0.0837869
0.84727
-0.115599
0.836252
0.821125
-2.17249
2.01725

三、注意事项

读者可能会遇到下面的代码(比如在[C++11]C++11带来的随机数生成器中介绍了这种在linux下的随机数生成方式):

int main{...random_device rd;mt19937 gen(rd());for (int i = 0; i < 10; i++) {cout << gen() << endl;}...return 0;
}

该代码在Linux下运行正常,但是在windows下每次运行的结果都相同。比如在我的windows电脑上两次运行的结果都是:

2412496532
3119216746
1495923606
3931352601
26313293
2552602825
3745457912
2213446826
4119067789
4188234190

在[C++11]C++11带来的随机数生成器中讲这是因为在windows下random_device使用的是rand_s,因此本博客中使用time(nullptr)作为种子。

同时[C++11]C++11带来的随机数生成器和c/c++产生随机数这两篇文章写得很好,很有参考价值。

四、参考引用

[1].cplusplus官网
[2].[C++11]C++11带来的随机数生成器
[3].c/c++产生随机数

[C++] 使用<random>头文件生成均匀分布、正态分布的数据相关推荐

  1. VC6生成随机浮点数、C++11的random头文件以及Dev C++支持C++11

    生成随机数: c语言是用 stdlib.h 里面的 rand()函数: c++是 在 #include 里面的 std::random_device 类,该类重载了函数符号():根据资料random是 ...

  2. CMake2:版本号配置与头文件生成

    1.基本测试 最基本的功能就是利用源代码文件生成一个可执行程序. CMakeLists.txt: cmake_minimum_required ( VERSION 3.5) project (Tuto ...

  3. C++无法在头文件中定义string类数据

    //头文件中不仅要包含<string>,也要加上命名空间 //.h文件 #include <string> using namespace std; //或者使用 //std: ...

  4. C++中使用random头文件

    //环境:请使用支持C++11的编译器,devC++,vs2013+,Clion #include <iostream> #include <random>int main() ...

  5. gsoap 学习 1-由wsdl文件生成h头文件

    开始前先看一下用户向导吧 http://www.cs.fsu.edu/~engelen/soap.html 中左侧点击Documentation 英语水平确实有限,有些内容可能说的不准确,敬请参考向导 ...

  6. 【Android NDK 开发】Visual Studio 2019 使用 CMake 开发 JNI 动态库 ( 动态库编译配置 | JNI 头文件导入 | JNI 方法命名规范 )

    文章目录 I . JNI 与 NDK 区别 II . Visual Studio 编译动态库 III. 配置 导入 jni.h 头文件 IV . IntelliJ IDEA Community Edi ...

  7. DSP篇--C6701 BOOT(头文件烧写法)

    目录 1.简介 2.具体步骤 2.1编写应用程序工程 2.2生成头文件 2.2.1分析.dat和.h文件 2.2.2头文件生成器软件设计和开发 2.3加载flash烧写程序完成烧写过程 1.简介 这是 ...

  8. Tensorflow—TFRecord文件生成与读取

    Tensorflow-TFRecord文件生成与读取 微信公众号:幼儿园的学霸 个人的学习笔记,关于OpenCV,关于机器学习, -.问题或建议,请公众号留言; 目录 文章目录 Tensorflow- ...

  9. static和头文件,源文件放什么

    目录 头文件or源文件 1.局部静态变量 2.全局静态变量/普通的全局静态函数 3.静态数据成员.成员函数(面向对象) 头文件or源文件 a)头文件应该放: 1)普通的全局函数声明 2)普通的全局变量 ...

最新文章

  1. python使用HanLP进行句法分析实战
  2. 从DCGAN到SELF-MOD:GAN的模型架构发展一览
  3. SourceTree的基本使用
  4. 【客户下单】自动分单逻辑
  5. XML引入多scheme文件约束简单示例
  6. CTF Geek Challenge——第十一届极客大挑战Re Write Up
  7. android tag定义快捷键,Android Studio快捷键生成TAG、Log.x日志输出介绍
  8. OJ1045: 数值统计(c语言)
  9. 三维里面点击播放视频
  10. android textview 必填,在android中如何使用Html渲染的方式实现必填项前面的*号
  11. 原来真的不会用指针[*p++]
  12. 接待顾客接待久了,发现大家讨价还价的方式基本三种
  13. 常见For 循环优化方式总结——提高效率小妙招
  14. 如何给网页设置自己的字体
  15. ASP.NET选择题部分集合
  16. 计算机组成原理 课程设计报告
  17. php 输出七芒星,SongNet:硬格式控制下的文本生成
  18. 建筑施工复习资料-立杆基础
  19. XTU 1249 Rolling Variance
  20. 第7章 PKI和密码应用

热门文章

  1. ASP.NET三层架构中如何利用某些软件提高工作效率——动软代码生成器
  2. 使用Eclipse调试Java程序的10个技巧
  3. 低代码跑出了独角兽,通用平台靠什么?
  4. 无法打开文件 opencv_world452d.lib
  5. php使用curl请求后台接口
  6. MySQL ERROR 1064 (42000)——不管怎样grant总是报错,怎么回事?
  7. 【解决方案】rtsp/gb28181/ehome协议视频融合共享平台EasyCVR基于社区的人脸识别系统
  8. Json文件转换为Excel文件!涉及读文件,时间戳转化,写文档
  9. Cocos2d-x 3.10 使用BMFont 制作自定义位图字体.fnt文件
  10. 使用SFTPGo搭建SFTP服务器