我需要模拟泊松等待时间.我发现了许多模拟到达次数的例子,但是我需要模拟一次到达的等待时间,给定平均等待时间.
我一直在寻找这样的代码:
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类中可用的方法,那将是最好的,但这不是必需的.
到达之间的时间是指数分布,您可以X~exp(lambda)使用以下公式生成随机变量:
-ln(U)/lambda` (where U~Uniform[0,1]).
Run Code Online (Sandbox Code Playgroud)
有关生成指数变量的更多信息.
请注意,到达之间的时间也与首次到达之前的时间相匹配,因为指数分布是无记忆的.
| 归档时间: |
|
| 查看次数: |
5582 次 |
| 最近记录: |