回 帖 发 新 帖 刷新版面

主题:[讨论]fortran里面关于随机数的问题,请指教!

如题,fortran里面关于随机数,我用的命令是 CALL RANDOM_NUMBER(u),这个u就是取出来的0到1之间的随机数。
但是每次我运行fortran,这个u出来的值都是一样的。我明白是随机取出来的,我也明白如果加个DO循环来取,每次循环取出来的值也是不同的。

但是matlab每次运行随机命令出来的值是不一样的。

形象点说,就是我打开fortran运行 CALL RANDOM_NUMBER(u),比如得到u=0.225。然后我关掉fortran,重启fortran再运行CALL RANDOM_NUMBER(u)这个命令,得到的u还是等于0.225。 而matlab就会得到不同的随机值。

请问这样影响程序运行么,如何能够让每次随机取出来的值不一样。这个随机取值和什么有关系,和当前时间么?

回复列表 (共3个回复)

沙发

call random_seed()
do i = 1, 10
    call random_number(x)
    print*,x
end do

random_number 如果不为它指定种子,每次由计算机给它同一个种子,从同一个种子出发产生出来的随机数当然是一样的。

random_seed 则为它重置种子,这样,每次运行程序,都从不同的种子出发,产生的随机数就不一样了。

板凳

楼上那招行不通喔:)RANDOM_SEED不是这样用的:)
如果要用TIMER来初始化,那需要自己写一个子程序的:)
我把自己写的一个子程序share出来吧:)种子选定是参考前人的成果,哈哈:)

    subroutine init_random_seed_use_timer()
        integer :: i, n, clock
        integer, allocatable :: seed(:)

        call random_seed(size = n)
        allocate(seed(n))

        call system_clock(count=clock)

        seed = clock + 37 * (/ (i - 1, i = 1, n) /)
        call random_seed(put = seed)

        deallocate(seed)
    end subroutine

3 楼

请问为什么你说上面那个答案不行?请指教,因为我试了一下那个答案还可以啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册