一、功能
产生泊松分布的随机数。
二、方法简介
泊松分布的概率密度函数为
[f(x)=frac{lambda ^{x}e^{-lambda }}{x!} qquad xin left { 0,1,...,lambda
ight }
]
用(P(lambda))表示。泊松分布的均值为(lambda),方差为(lambda)。
定理 若(lambda > 0),(x)是整数,(u_i)是(0,1)区间上均匀分布的随机数,即(u_{i} sim U(0, 1)),且有
[prod_{i=0}^{x}u_{i}geqslant e^{-lambda }> prod_{i=0}^{x+1}u_{i}
]
那么(x)是一个以(lambda)为均值的泊松分布的随机变量。
产生泊松分布随机变量(x)的具体算法如下:
- 设(b = 1,i=0);
- 产生均匀分布的随机数(u_i),即(u_{i} sim U(0, 1));
- 计算(bleftarrow bu_{i});
- 如果(bgeqslant e^{-lambda }),那么(ileftarrow i+1),返回到2;
- 取(x = i)。
三、使用说明
是用C语言实现产生二项分布随机数的方法如下:
/************************************
lambda ---泊松分布均值lambda
s ---随机数种子
************************************/
#include "math.h"
#include "uniform.c"
int poisson(double lambda, long int *s)
{
int i;
int x;
double a;
double b;
double u;
a = exp(-lambda);
i = 0;
b = 1.0;
do{
u = uniform(0.0, 1.0, s);
b *= u;
i++;
}while(b >= a);
x = i - 1;
return(x);
}
uniform.c文件参见均匀分布的随机数