Générer des sequences de nombres aléatoires différentes avec le langage Fortran ?

Published: 16 octobre 2014

DMCA.com Protection Status

Avec le fortran pour générer un nombre aléatoire ou une suite de nombres aléatoires il existe la fonction rand(). Cependant, en utilisant rand sans préciser une graine pour le générateur comme dans cet exemple

program CreateRandomNumberSequence

implicit none

integer :: i
integer*4 timeArray(3) ! Holds the hour, minute, and second

do i = 1, 10
write(6,*) rand(0) # Next Random Number
end do

end program CreateRandomNumberSequence

on obtient toujours la même suite de 10 nombres aléatoires. Pour générer une suite de nombres aléatoires différentes il faut utiliser une graine (seed) pour le générateur (entier autre que 0 ou 1):

program CreateRandomNumberSequence

implicit none

integer :: i
integer :: seed

seed = 43

write(6,*) rand(seed)
do i = 1, 9
write(6,*) rand(0)
end do

end program CreateRandomNumberSequence

Pour ne pas entrer manuellement un seed vous pouvez par exemple utiliser la date (voir), comme dans cet exemple:

program CreateRandomNumberSequence

implicit none

integer :: i
integer*4 timeArray(3) ! Holds the hour, minute, and second

call itime(timeArray) ! Generate sequence of random number

write(6,*) rand ( timeArray(1)+timeArray(2)+timeArray(3) )
do i = 1, 9
write(6,*) rand(0)
end do

end program CreateRandomNumberSequence

qui donne par exemple:

5.86748123E-04
0.865334034    
0.670398951    
0.398759842    
0.957542658    
0.421938896    
0.528346062    
0.914853573    
0.947230339    
0.101967096

Recherches associées