我正嘗試使用Fortran中的內置函數生成一系列隨機數$ \ xi_i $,它們均勻分佈在[0,1]中。該序列必須是可重現的,所以我想通過索引$ i $(也就是序列中$ \ xi_i $的位置)爲隨機數生成器播種,而不是使用系統時鐘播種。下面是我的代碼:生成的隨機數顯示週期性
module rand
contains
function generate_random(iseed) result(xi1)
!!
implicit none
integer, intent(in) :: iseed
integer, dimension(:), allocatable :: seed
integer :: i, j, n
real :: xi1
!!-generate a seed first
call random_seed(size = n)
allocate(seed(n))
seed = iseed * (/(i, i=1,n,1)/)
call random_seed(PUT = seed)
deallocate(seed)
call random_number(xi1)
!!
end function generate_random
end module rand
program test
use rand
implicit none
integer :: i, imax
imax=100
do i=1,imax
print *, generate_random(i)
enddo
end program test
然而在$ \ $ xi_i繪製與該指數的情節表現出的這個結果$ I $顯然有一定的模式,所以它不是那麼隨意畢竟。如何改善這一點,即讓它「更隨機」?
中時鐘值的熵熵使用了哪種編譯器?你應該閱讀它的文檔(如果提供)使用種子。猜測,你提供的種子中有很多零位,這對熵不利。 – francescalus
我同意,你不能只使用任何你喜歡的數字作爲種子。 –