泊松分佈隨機數

1、功能

產生泊松分佈的隨機數。html

2、方法簡介

泊松分佈的機率密度函數爲
\[ f(x)=\frac{\lambda ^{x}e^{-\lambda }}{x!} \qquad x\in \left \{ 0,1,...,\lambda \right \} \]
\(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\)的具體算法以下:spa

  1. \(b = 1,i=0\)
  2. 產生均勻分佈的隨機數\(u_i\),即\(u_{i} \sim U(0, 1)\)
  3. 計算\(b\leftarrow bu_{i}\)
  4. 若是\(b\geqslant e^{-\lambda }\),那麼\(i\leftarrow i+1\),返回到2;
  5. \(x = i\)

3、使用說明

是用C語言實現產生二項分佈隨機數的方法以下:code

/************************************
    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文件參見均勻分佈的隨機數orm

相關文章
相關標籤/搜索