创建随机数的对数正态分布?

时间:2012-12-06 21:33:49

标签: fortran

我正在尝试在Fortran 90中重写一些Python / numpy代码。在我的Python代码中,我使用以下命令生成5000个随机日志正态分布式数字:

numpy.random.lognormal(mu,sigma,5000)

我正在尝试在Fortran中做同样的事情。我对Fortran不太熟悉,但我在英特尔的网站上发现了这个:

status = vdrnglognormal( method, stream, n, r, a, sigma, b, beta )

http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-C564D9DC-FDF0-426B-9C9D-1740969BDBEC.htm

我知道n,r,a,sigma,bbeta是什么,但我不知道它们对方法/流的含义是什么,以及我应该将这些值传递给我们。另外,状态是什么?我如何在我的代码中调用此函数?我需要包含任何文件吗?

2 个答案:

答案 0 :(得分:2)

另一种可能的解决方案:GNU科学库(GSL)提供返回日志正常偏差的函数gsl_ran_lognormal。 GSL在C中。有一个Fortran接口,FGSL,http://www.lrz.de/services/software/mathematik/gsl/fortran/,使用ISO C绑定。或者你可以编写自己的界面。

答案 1 :(得分:1)

或者您可以编写自己的日志正常功能。

给定零均值,单位偏差正态分布随机变量x,那么正态分布的日志就是

y = exp(mu+sigma*x)

并且,如果你没有x的函数,你可以使用Marsaglia极坐标法只用几行代码来创建一个函数。