Poisson泊松分布,是一种统计与概率学里常见到的离散概率分布。多出现在当X表示在一定的时间或空间内出现的事件个数这种场合。在一定时间内某交通路口所发生的事故个数,是一个典型的例子。
泊松分布的概率函数为:
泊松分布的参数λ是单位时间(或单位面积)内随机事件的平均发生次数。 泊松分布适合于描述单位时间内随机事件发生的次数。
泊松分布的期望和方差均为λ。
random实现泊松分布
public class Possion {
static long seed;
static double a = 32719, m;
public static double p_rand(double lamda) {
// 泊松分布
double n = 0, p = 1, c = Math.exp(-lamda), u;
do {
u = randomU();
// u = Math.random() ;
p *= u;
System.out.println("u=" + u + " p=" + p + " n=" + n + " c=" + c);
if (p >= c)
n++;
} while (p >= c);
return u;
}
// 线性同余法生成U[0,1) 随机数
public static double randomU() {
seed = (long) ((32719 * seed) % (m - 1));
// System.out.println("seed:"+seed);
return seed / (m - 1);
}
public static void main(String[] args) {// TODO Auto-generated method stub// 随机数种子生成与初始化
seed = System.currentTimeMillis();
m = Math.pow(2, 31);
double uu[] = new double[1000];
int N = 1000;
// 生成 10 个泊松分布分布随机数
for (int i = 0; i < N; i++) {
System.out.println("第" + i + "个");
uu[i] = p_rand(0.2);
}
//计算均值与方差
double sum = 0, sum2 = 0, ave = 0, fangca = 0;
for (int i = 0; i < N; i++) {
sum = sum + uu[i];
sum2 = sum2 + uu[i] * uu[i];
System.out.println("u:" + i + "." + uu[i]);
}
ave = (double) sum / N;
System.out.println("均值:" + ave);
for (int i = 0; i < N; i++) {
// sum = sum + uu[i];
sum2 = sum2 + (uu[i] - ave) * (uu[i] - ave);
}
fangca = sum2 / N;
System.out.println("方差:" + fangca);
}
}
commons-math3实现泊松分布
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
public static void main(String[] args){
RandomEngine engine = new DRand();
Poisson poisson = new Poisson(lambda, engine);
int poissonObs = poisson.nextInt();
Normal normal = new Normal(mean, variance, engine);
double normalObs = normal.nextDouble();
}