我一直在四处寻找,但我不知道该怎么办.
我发现这个页面在最后一段中说:
使用这个简单的方法得到一个从泊松分布中取得的随机数的简单生成器:如果x 1,x 2,...是一个在0和1之间均匀分布的随机数序列,k是第一个整数,乘积x 1 ·x 2 ·...·x k + 1 <e -λ
我发现了另一个描述如何生成二项式数的页面,但我认为它使用的是泊松生成的近似值,这对我没有帮助.
例如,考虑二项式随机数.二项式随机数是硬币的N次投掷中的头数,在任何单次投掷中具有头部的概率p.如果在区间(0,1)上生成N个均匀随机数并计算小于p的数,则计数是具有参数N和p的二项式随机数.
我知道有库可以做到这一点,但我不能使用它们,只能使用语言提供的标准统一生成器(在本例中为java).
我需要模拟泊松等待时间.我发现了许多模拟到达次数的例子,但是我需要模拟一次到达的等待时间,给定平均等待时间.
我一直在寻找这样的代码:
public int getPoisson(double lambda)
{
double L = Math.exp(-lambda);
double p = 1.0;
int k = 0;
do
{
k++;
p *= rand.nextDouble();
p *= Math.random();
} while (p > L);
return k - 1;
}
Run Code Online (Sandbox Code Playgroud)
但这是到达人数,而不是到达时间.
效率优于精确度,更多是因为功耗比时间.我正在使用的语言是Java,如果算法只使用Random类中可用的方法,那将是最好的,但这不是必需的.