C++求泊松分布
C++實現泊松分布
泊松分布公式
P(X=k)=e?λλkk!P(X=k)=\frac{e^{-\lambda}\lambda^{k}}{k!}P(X=k)=k!e?λλk?
問題:直接用公式求會發生溢出
解決方法
方法一 用遞推計算泊松分布值
P(0)=exp(?λ)P(0)=exp(-\lambda)P(0)=exp(?λ)
P(k+1)=λP(k)k+1P(k+1)=\frac{\lambda P(k)}{k+1} P(k+1)=k+1λP(k)?
代碼大致為:
double result=exp(-lambda); for(int i=1;i<k;i++)result*=(lambda/double(i))方法二 C++11自帶std::poisson_distribution
#include <iostream> #include <iomanip> #include <string> #include <map> #include <random> int main() {std::random_device rd;std::mt19937 gen(rd());// if an event occurs 4 times a minute on average// how often is it that it occurs n times in one minute?std::poisson_distribution<> d(4);std::map<int, int> hist;for(int n=0; n<10000; ++n) {++hist[d(gen)];}for(auto p : hist) {std::cout << p.first <<' ' << std::string(p.second/100, '*') << '\n';} }總結
- 上一篇: 谨慎选择我们的先验 - 对最优拟合概率分
- 下一篇: 转载: 找不到MSVCR90.dll、D