主题:[讨论]关于fortran随机数子程序的一个问题
sunvf
[专家分:0] 发布于 2010-11-08 15:11:00
fortran里调用随机数子程序每次调用生成的随机数都一样,我想每调用一次都产生不同的随机数该怎么办?程序如下
subroutine r(s)
real s(10)
call random_seed()
call random_number(s)
end subroutine r
回复列表 (共6个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2010-11-08 15:14:00
call random_seed()
放在主程序里
板凳
sunvf [专家分:0] 发布于 2010-11-08 15:18:00
十分感谢!
3 楼
sunvf [专家分:0] 发布于 2010-11-08 15:28:00
我把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 楼
dongyuanxun [专家分:7180] 发布于 2010-11-08 15:30:00
call random_seed()
放在循环外
5 楼
sunvf [专家分:0] 发布于 2010-11-08 15:35:00
运行一次得到的几个数是不同了,但运行两次得到的还是那几个数,可不可以使每次运行的结果都不一样,是随机的。
6 楼
dongyuanxun [专家分:7180] 发布于 2010-11-08 15:53:00
[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
我来回复