random - 可以将Fortran 90的随机数生成器用于Monte Carlo集成吗?

标签 random fortran integration montecarlo

我编写了一种简短的蒙特卡洛积分算法,用于在Fortran 90中计算积分。我曾经比较了使用固有随机数生成器和某些参数的随机数生成器方法ran1求解某些参数的积分所获得的结果。 Fortran90卷2。

运行两次相同的算法,一次调用内在的random_seed(),然后总是调用random_number(),并一次调用《数值食谱》书中提供的ran1()方法,我得到的结果原则上是相同的形状,但内在的结果是连续的曲线与ran1结果相反。在这两种情况下,我都会为参数值q调用具有随机参数10,000次的函数,将其相加,然后继续执行下一个q值,并对该函数调用10,000次,依此类推。

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

如果我增加通话次数,两条曲线会收敛。但是我想知道:为什么固有随机数生成器会产生这种平滑度?还是一般建议使用它还是还有其他更建议的RNG?我想连续的结果是固有数生成器的“较少”随机性的结果。

(我省去了源代码,因为我认为源代码并没有很多输入。如果有人在意,我可以稍后再提交。)

最佳答案

无法保证标准Fortran中伪随机生成器的质量。如果您关心密码学或对随机数敏感的科学(蒙特卡洛)的某种特定实现质量,则应使用您可以控制的某些库。
您可以研究编译器的手册,以了解有关随机数生成器的内容,但是每个编译器都可以实现完全不同的算法来生成随机数。
数字数学社区中的某些人实际上并不十分喜欢数字食谱http://www.uwyo.edu/buerkle/misc/wnotnr.html
该站点不是用于软件推荐的站点,而是本文(roygvib在评论中给出的链接):https://arxiv.org/abs/1005.4117是一个不错的评论,其中包含不良和良好算法的示例,如何测试它们的方法,如何生成任意数字分布以及调用示例。 C中的两个示例库中的一个(也可以从Fortran中调用其中一个)。
我个人使用此https://bitbucket.org/LadaF/elmm/src/master/src/rng_par_zig.f90并行PRNG,但是我没有测试质量,我个人只是需要速度。但这不是软件推荐站点。

关于random - 可以将Fortran 90的随机数生成器用于Monte Carlo集成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38262846/

相关文章:

java - 如何在 Java 中使用 Math.random() 生成等概率随机数

Javascript - for 循环中的 Math.random

io - 使用英特尔 Fortran 编译器避免列表导向输出中的换行符

fortran - 从 Fortran 模块中定义的函数打印到标准输出

integration - 如何从状态获取列表并在 qore 中修改它?

testing - SpringBootTest中如何覆盖应用Bean

random - Applescript:修剪空格和回车线

c - 随机数发生器

android - 如何将Facebook Connect与Android集成

python - 我想要 Python 作为前端,Fortran 作为后端。我还想让 Fortran 部分并行 - 最佳策略?