C++ binomial_distribution二项式分布随机数用法解析
二项式分布是一个离散分布,它可以模型化一系列独立的二元事件。每一个事件只有两种结果(成功或失败),所有事件的成功率相同。
它是由两个参数定义的,t 和 p,t 是实验的次数,p 是一次实现中成功的概率。下面展示了如何用 binomial_distribution 模板生成一个对象:
图 1 二项式分布
伯努利分布是一个 t 参数为 1 的二项式分布。STL 提供的 bernoulli_distribution 类定义了这种分布。因为 t 被固定为 1,那么就只需要像构造函数一样提供一个 p 值,并且这个对象会返回一个随机的布尔值。成员函数 p() 可以返回成功的概率。下面是一个展示如何生成和使用这种对象的代码段:
negative_binomial_distribution 模板定义了一个默认返回 int 型整数的对象类型。negative_ binomial_distribution 模板的构造函数需要两个参数:失败次数 k 和成功的概率 p。下面是生成一个对象的示例:
图 2 负二项式分布:k=5 p=0.4
它是由两个参数定义的,t 和 p,t 是实验的次数,p 是一次实现中成功的概率。下面展示了如何用 binomial_distribution 模板生成一个对象:
int t{20}; // Number of trials double p {0.75}; // Probability of success std::binomial_distribution<> binomial_d {t, p};这个对象的成员函数 t() 和 p() 会返回这些参数值。binomial_d 生成的值的图形如图 1 所示。
图 1 二项式分布
伯努利分布是一个 t 参数为 1 的二项式分布。STL 提供的 bernoulli_distribution 类定义了这种分布。因为 t 被固定为 1,那么就只需要像构造函数一样提供一个 p 值,并且这个对象会返回一个随机的布尔值。成员函数 p() 可以返回成功的概率。下面是一个展示如何生成和使用这种对象的代码段:
std::random_device rd; std::default_random_engine rng {rd()}; double p {0.75}; // Probability of success std::bernoulli_distribution bernoulli_d {p}; std::cout << std::boolalpha; // Output bool as true or false for(size_t i {}; i < 15; ++i) std::cout << bernoulli_d(rng) << ' '; std::cout << std::endl;执行这段代码后,得到的输出如下:
true true false true true true true true false true false true true false true
负二项式分布
负二项式分布是一个离散分布,它可以模型化试验序列中指定的成功次数之前的失败次数。试验只有两个可能的结果,它们彼此是相互独立的。如果成功的次数是1,这个分布就成了几何分布。也可以将这个分布看作给定成功次数之前的失败次数的模型。negative_binomial_distribution 模板定义了一个默认返回 int 型整数的对象类型。negative_ binomial_distribution 模板的构造函数需要两个参数:失败次数 k 和成功的概率 p。下面是生成一个对象的示例:
int k {5}; //Number of successes double p {0.4}; // Probability of success std::negative_binomial_distribution<> neg_bi_d {k, p};neg_bi_d 的成员函数 k() 和 p() 可以返回参数的值,neg_bi_d 生成的值的图形如图 2 所示。
图 2 负二项式分布:k=5 p=0.4
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频