求一泊松分布的c++程序

来源:百度知道 编辑:UC知道 时间:2024/09/28 09:19:04
P{X=k}= (λ“-k" e"-λ")/k! k =0,1,2… λ >0;
0 λ <0 这是公式求一个输入λ和k的值就可以算出来概率的c++程序,应该比较简单吧好的话再加分吧,急啊!!!

大致有三种方法:
第一种: 直接生成
记 F_0 = e^(-lamda)
F_n = p_0 + p_1 + ... + p_n
其中 p_n = P( X = n )
然后
1. 随机生成一个[0,1]区间上的随机数ran
2. 如果ran < F_0, 令 x = 0
3. 如果存在某一个值k使得 F_(k-1)< ran < F_k, 令 x=k
x就是所要生成的泊松随机数

第二种: 分数乘积法
当lamda非常大的时候相当复杂,不提也罢

第三种:中心极限定理近似
1. 生成随机数ran
2. 计算相应的标准正态随机数nor
3. 计算poi = lamda + nor * (lamda^(1/2))
4. 取与poi 最接近的非负整数作为所要生成的泊松随机数

给你一个具体的吧:
为了产生泊松分布抽样间隔,首先需要决定抽样的参数λ,例如平均抽样间隔是30 秒,时间单位为秒,那么λ=30,θ=1/30 。然后,产生一系列指数分布的(伪)随机数E1,E2,…,En,…,第一次抽样的时刻为E1,第二次抽样的时刻为E1+E2 等等,依此类推。
一种生成指数分布的(伪)随机数Ei 的方法:在0 和1 之间产生均匀分布的U1,U2,…,Un,…(伪) 随机数,利用这些Ui 值,产生所需要的Ei 值:

#include "math.h"
/*******************************************************************
* 求[a,b]上的均匀分布
* 输入: a--双精度实型变量,给出区间的下限
* b--双精度实型变量,给出区间的上限
* seed--长整型指针变量,*seed为随机数的种子
********************************************************************/
do