生成计算泊松分布的C++代码
时间: 2024-09-21 19:10:00 浏览: 36
在C++中,你可以使用标准库`<random>`来生成泊松分布的随机数。首先,你需要包含所需的头文件,并创建一个泊松分布的对象。以下是一个简单的例子:
```cpp
#include <iostream>
#include <random>
// 泊松分布的概率质量函数 (pmf)
double poisson_pdf(int k, double lambda) {
static const double factor = std::exp(-lambda);
return factor * pow(lambda, k) / factorial(k);
}
// 计算阶乘
unsigned long long factorial(int n) {
if (n == 0 || n == 1) return 1;
unsigned long long fact = 1;
for (int i = 2; i <= n; ++i)
fact *= i;
return fact;
}
// 生成泊松分布的随机数
int generate_poisson(double lambda, std::mt19937 &gen) {
static const int max_tries = 10000; // 设置尝试次数防止无限循环
int k = -1;
do {
k = std::poisson_distribution<>(lambda)(gen); // 使用mt19937随机引擎和给定的λ值
} while (k < 0 && --max_tries > 0); // 如果结果小于0,重试几次
return k;
}
int main() {
double lambda = 5.0; // 率参数 λ
std::mt19937 gen(std::chrono::system_clock::now().time_since_epoch().count()); // 创建Mersenne Twister随机引擎
for (int i = 0; i < 10; ++i) {
int random_k = generate_poisson(lambda, gen);
std::cout << "Poisson distribution with lambda = " << lambda << ": Random value is " << random_k << std::endl;
}
return 0;
}
```
在这个示例中,我们使用了`std::poisson_distribution<>`来直接生成泊松分布的随机整数值,它内部已经包含了泊松概率质量函数的计算。`main()`函数展示了如何生成并打印出10个泊松分布的随机数。
阅读全文