采用Fortran90程序实现生成任意随机数列的方法

采用Fortran90程序实现生成任意随机数列的方法


2024年4月30日发(作者:)

采用Fortran 90程序实现生成任意随机数列的方法

——谷辰先生

在科学计算/数值计算中的很多场合(比如蒙特卡洛模拟)都需要用到随机数。当然首先需注意,通过

计算机产生的随机数都是伪随机数,并不是真正的随机数,因为真正意义上的随机数在某次产生过程中是

按照物理实验过程(如掷骰子)中表现的分布概率随机产生的,其结果是不可预测的。而计算机中的随机

函数是按照一定算法模拟产生的,其结果是确定的,是可见的。所以用计算机随机函数所产生的“随机数”

并不随机,是伪随机数。但是,这个一般来说不影响我们在数值模拟中的使用。

Fortran自带一个random_number(x)函数可以产生一个0~1之间的随机数(x可以是向量),但是

如果你要让每一次运行产生的随机数都不一样,则还应该调用random_seed()函数,然后系统就会根据

日期和时间随机产生种子,从而得到“真正的”随机数。

下面将从最简单生成均匀分布随机数开始,逐步到复杂的瑞利分布,通过Fortran代码范例实战的方

式讲解如何生成满足任一分布的随机数。

(1) 以下代码可以生成10组0~1之间的随机数(每组),而且每次运行结果都不一样:

!*****************************************************************

program tutorial01_random_number

implicit none

integer(4) :: k

real(8) :: x(3)

call random_seed()

do k = 1,10

call random_number(x)

write(*,*) x

write(*,*)

end do

stop

end program tutorial01_random_number

!*****************************************************************

运行结果如下:

请务必注意,call random_seed()应该在循环之外,如果放到循环内的话,即:

!*****************************************************************

program tutorial01_random_number

implicit none

integer(4) :: k

real(8) :: x(3)

do k = 1,10

call random_seed()

call random_number(x)

write(*,*) x

write(*,*)

end do

stop

end program tutorial01_random_number

!*****************************************************************

在我windows下intel fortran编译器上运行的结果会是这样子的:


发布者:admin,转转请注明出处:http://www.yc00.com/news/1714492667a2457003.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信