Fortran의 내장 함수를 사용하여 [0,1]에 균등하게 분포 된 난수 시퀀스 $ \ xi_i $를 생성하려고합니다. 시퀀스는 재현 가능해야하므로 시드에 시스템 클럭을 사용하는 대신 색인 $ i $ (시퀀스에서 $ \ xi_i $의 위치)로 난수 생성기를 시드하려고합니다. 다음은 내 코드입니다 : $ \ xi_i의 $가 인덱스 대 플롯 플롯에 표시된이의 결과가 $ 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
몇 가지 패턴이있다, 그래서 결국 그렇게 무작위로하지 않습니다. 이를 개선하여 즉 '무작위'로 만드는 방법은 무엇입니까?
어떤 컴파일러를 사용하고 있습니까? 씨앗 사용에 대한 설명서 (제공된 경우)를 읽어야합니다. 추측 하건데, 당신이 제공하는 시드에는 제로 비트가 많이 있는데, 이는 엔트로피에 좋지 않을 것입니다. – francescalus
동의합니다. 원하는 번호를 시드로 사용할 수 없습니다. –