我想生成一些伪随机数,到目前为止,我对.Net库的Random.Next(int min, int max)功能非常满意。这类PRNG 应该 使用统一分布,但是我非常想使用指数分布来生成一些数字。
Random.Next(int min, int max)
尽管我会接受伪代码或C ++,Java等,但我正在用C#进行编程。
有什么建议/代码段/算法/想法吗?
由于您可以使用统一的随机数生成器,因此可以使用反演方法轻松生成与其他分布的CDF一起分布的随机数。
因此,生成均匀随机数,u中[0,1),然后计算x方式:
u
[0,1)
x
x = log(1-u)/(-λ),
x = log(1-u)/(-λ)
哪里λ是指数分布的速率参数。现在,x是一个具有指数分布的随机数。请注意,log上面是ln,自然对数。
λ
log
ln