回 帖 发 新 帖 刷新版面

主题:[讨论]关于fortran随机数子程序的一个问题

fortran里调用随机数子程序每次调用生成的随机数都一样,我想每调用一次都产生不同的随机数该怎么办?程序如下
subroutine r(s)
real s(10)
call random_seed()
call random_number(s)
end subroutine r

回复列表 (共6个回复)

沙发

call random_seed()
放在主程序里

板凳


十分感谢!

3 楼

我把call random_seed()
放在主程序里 还是出现相同的结果 
program yanhua
real rnd(10)
do i=1,4
call random_seed()
call r(rnd)
print*,rnd(1)
enddo
contains
subroutine r(s)
real s(10)
call random_number(s)
end subroutine r
end

4 楼

call random_seed()
放在循环外

5 楼

运行一次得到的几个数是不同了,但运行两次得到的还是那几个数,可不可以使每次运行的结果都不一样,是随机的。

6 楼

[quote]运行一次得到的几个数是不同了,但运行两次得到的还是那几个数,可不可以使每次运行的结果都不一样,是随机的。[/quote]
可以变通一下,利用动态数组分配变量未初始化初值随机的特性,采用随机的seed
其他按照时间日期与此类似
比如

你的代码改为
program yanhua
integer :: i
real :: rnd(10)
integer, allocatable :: new(:)
allocate(new(i))
call random_seed()
CALL random_seed(size = i)
call random_seed(put = new(1:i))

do i=1,4
call r(rnd)
print*,rnd(1)
enddo

deallocate(new)

contains

subroutine r(s)
real s(10)
call random_number(s)
end subroutine r

end

我来回复

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