Fortran 90的随机数生成器可以信任蒙特卡洛集成吗?

Dom*_*miD 9 random integration fortran montecarlo

我编写了一个简短的monte carlo积分算法来计算Fortran 90中的积分.我曾经使用内部随机数生成器和使用Numerical Recipes中提供的随机数生成器方法ran1来比较通过求解积分得到的结果. Fortran90第2卷.

运行相同的算法两次,一旦调用内在的random_seed(),然后总是调用random_number(),并且一旦调用在Numerical Recipe书中提供的ran1()方法,我获得的结果是原理相同的形状,但内在的结果是连续的曲线与ran1结果形成对比.在这两种情况下,我使用随机参数调用函数10,000次作为参数值q,添加它然后继续下一个q值并调用函数10,000次等.

结果的比较图像可以在这里找到: http://i.imgur.com/gZVFdOP.png

如果我增加调用次数,则曲线会收敛.但我想知道:为什么内在随机数发生器会产生这种平滑性?是否仍然建议使用它或是否有其他更多建议的RNG?我认为连续结果是内在数字生成器的"较少"随机性的结果.

(我省略了源代码,因为我不认为它有很多输入.如果有人关心我可以在以后交出它.)

Vla*_*r F 8

标准Fortran中对伪随机生成器的质量没有任何保证.如果您关心密码学的某些特定实施质量或对随机数敏感的科学(蒙特卡罗),您应该使用一些您可以控制的库.

您可以学习编译器的手册,以了解它对随机数生成器的说法,但每个编译器都可以实现完全不同的算法来生成随机数.

数字食谱实际上并没有被数值数学界的一些人所接受http://www.uwyo.edu/buerkle/misc/wnotnr.html

这个网站不是软件推荐,而是本文(roygvib在评论中给出的链接):https ://arxiv.org/abs/1005.4117 是一个很好的评论,包含错误和良好算法的例子,如何测试它们的方法,如何在C中生成任意数量的分布和两个示例库的调用示例(其中一个也可以从Fortran调用).

我个人使用这个https://bitbucket.org/LadaF/elmm/src/e732cb9bee3352877d09ae7f6b6722157a819f2c/src/rng_par_zig.f90?at=master并行PRNG,但我没有测试质量,我个人只需要速度.但这不是软件推荐网站.