Fortran: Générateur de nombres aléatoires

Résolu/Fermé
Mangeurdespin - 8 mars 2009 à 18:33
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 - 8 mars 2009 à 18:51
Bonjour,

Je suis étudiant en physique et je commence le fortran depuis quelques mois. Je suis actuellement sur une simulation qui me permettrais de trouver l'énergie d'un système en fonction du nombres de spins qui "changent" dans un réseau initial.

Bien sûr, le cours actuel consiste à nous mettre la méthode Monté-Carlo en tête, seulement j'ai quelques problèmes avec les premières parties du programme.

Le problème: Je doit générer une liste de variables aléatoires uniformes, et une liste de variables aléatoires gaussiennes normalisées. Seulement quand je compile mon programme j'obtient TOUJOURS la même liste de chiffres quelque soit la situation (gausienne ou uniforme).
Etant débutant en fortran, j'aurais aimé savoir si le fait que le générateur se "bloque" sur une liste de chiffres est dû à une raison particulière du codage (genre les initialisation de variables, les noms des variables utilisées...)

Toute suggestion sera la bienvenue, du moment qu'elle soit expliquée un tout petit peu.

Merci d'avance!

1 réponse

Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 832
8 mars 2009 à 18:51
Salut
Effectivement, la séquence de nombres générée est toujours la même. Ce qui m'avait paru bizarre à l'époque, c'est que sous Unix j'avais aucun souci, mais le jour où on est passé à Linux, ben la séquence était toujours la même. Peut-être que le compilateur était différent... va savoir...
T'as des explications ici :
http://infohost.nmt.edu/tcc/help/lang/fortran/random.html
http://infohost.nmt.edu/tcc/help/lang/fortran/seed.html
Donc pour avoir une séquence différente, faut appeler la fonction rand() avant la fonction random avec un argument différent à chaque fois.
Si tu veux vraiment un truc "aléatoire" à chaque exécution du code, tu peux faire comme ils le suggèrent sur la page (de toute façon, à part comme ça, je vois pas trop comment on pourrait faire d'autre... :-D), c'est-à-dire appeler rand() avec un argument qui dépend du temps. C'est ce que j'avais fait aussi...
Bonne soirée
4