Bonjour,
je veux vraiment les caractéristiques de la fonction ran ( je dit bien ran et pas rand) qui génère les nombres aléatoires au langage Fortran
SVP c'est important![]()
-----
Bonjour,
je veux vraiment les caractéristiques de la fonction ran ( je dit bien ran et pas rand) qui génère les nombres aléatoires au langage Fortran
SVP c'est important![]()
Bonjour,
L'utilisation de rand avec des langages comme Scilab ou Matlab donne des résultats inattendus et différents de ceux fournis par les langages classiques, tableurs etc.
C'est un peu hors sujet, mais nécessaire à rappeler.
Comme je n'ai pas vu tous les détails de l'utilisation de ran(), le doute peut subsister.
Si il s'agit juste d'une transformation de la valeur renvoyée par rand() en flottant entre telle limites, alors tout va bien.
@ gazelle2012
tu peux faire un test comparatif avec RAN et RAND. Je parie qu'ils donneront la même liste de nombres (avec le même seed, bien évidemment)
http://software.intel.com/sites/prod...ABCAFD8922.htm
un jour il y avait quelqu'un qui ma dit que pour l'utilisation de ran (pour avoir une liste vraiment aléatoires) il faut utiliser un germe grand( plusieurs chiffres) et le premier chiffre sera impaire ,je sais pas , moi c ca qui me manque( ces notations ou ces astuces), aussi je suis entrain de préparer un petit truc là ou je vais utiliser la fonction ran comme générateur , mais au début je doit la définirai et donner ces caractéristiques avant de mettre les résultats . Aider moi SVP
Bon, mon conseil : utilisez rand() de base.
Cette fonction retourne un nombre aléatoire entre 0 et 2^n.
En C, n=32, ça fait déjà 4.10^9. J'ai cru voir qu'en Fortran n valait 64 ou 128.
Il y a le problème de la graine.
Etant donné le principe de rand, si on ne lui dit rien, à chaque début d'exécution, il recommencera au même endroit, donc, la séquence des nombres aléatoires sera toujours la même.
Il existe une fonction pour initialiser rand.
Si on VEUX avoir toujours la même suite, alors on l'initialise toujours avec la même valeur, c'est ce dont parlait JJacquelin à propos de SEED.
Dans le cas général, au contraire, on cherche à obtenir des suites différentes d'une exécution à l'autre. En ce cas, la méthode généralement utilisée est d'appeler l'heure, qui par définition est toujours différente d'une fois à l'autre.
Si vous utilisez toujours la même graine (que vous appelez germe), que le nombre soit grand ou petit, pair ou impair vous obtiendrez toujours la même suite.
Si vous voulez un nombre flottant compris entre 0 et 1, il suffit de diviser le résultat par 2^n (n=32, 64 ou 128 suivant la doc).
Le fait d'utiliser RAN au lieu de RAND ne vous apportera rien.
La référence, en terme de générateur de nombres aléatoires, est l'algorithme "Mersenne Twister", qui a une périodicité très grande. Cette méthode est notamment utilisée en applications financières.
http://fr.wikipedia.org/wiki/Mersenne_Twister
j'aime bien le générateur de Tausworthe. Il a de bonnes propriétés si on veut des vecteurs (c'est-à-dire des suites finies de valeurs successives). Je l'ai programmé en C. Puisqu'on a des fonctions qui permettent de manipuler les registres à décalage, c'est plus rapide qu'en fortran (il y a peut-être ces fonctions maintenant dans fortran?)
Bonjour,
Ca m'intéresserait de voir le code.
La fonction rand de mon compilateur est pas mal (des quantités de tests qui l'ont vérifié) mais il est toujours bon de s'informer.
Bonne soirée.
Rappelons simplement que soit rand renvoie un entier entre 1 et sa période, soit il renvoie un réel (on divise simplement par la période) entre 0 et 1 de manière uniforme. Scilab et matlab ne sont pas différent des autres langages.Bonjour,
L'utilisation de rand avec des langages comme Scilab ou Matlab donne des résultats inattendus et différents de ceux fournis par les langages classiques, tableurs etc.
C'est un peu hors sujet, mais nécessaire à rappeler.
Moi je lis la doc http://gcc.gnu.org/onlinedocs/gfortran/RAND.html#RAND qui dis que le rand de gfortran renvoie un réel entre 0 et 1...Cette fonction retourne un nombre aléatoire entre 0 et 2^n.
Bonjour,
Les définition habituelles de la fonction rand, c'est "retourne un nombre pseudo-aléatoire".
Il y a 3 termes importants
"nombre" : ce peut être un nombre compris entre 0 et RANDMAX, par exemple 2^32, ou ça peur être un nombre compris entre 0 et 1, ou toute autre bornes souhaitées, suivant l'imagination de l'auteur du langage.
"pseudo" : cela signifie que la séquence est toujours la même. Pour éviter ce grave inconvénient, il a été introduit la notion de "graine" ou "germe". C'est une valeur qui initialise l'endroit où la séquence commence. L'utilisation de l'heure système me parait être la meilleure méthode.
"aléatoire" : là c'est un peu plus compliqué. Il est très facile de vérifier la répartition des nombres sortis par un tel générateur. Ceux d'Excel et de mon compilateur (Borland) donnent une répartition conforme à ce qu'on peut attendre. J'ai testé un autre générateur (de mémoire genrand ). Il semble avoir été étudié pour contourner ce phénomène de séquence répétitive. Par ailleurs, à chaque tirage, il donne une répartition "parfaite".
Le générateur de Scilab autorise plusieurs options, c'est là que le terme "aléatoire" n'a plus son vrai sens. En particulier, ce générateur utilisé, sans préciser d'option, c'est à dire par défaut, donne des résultats qui ne sont pas ceux qu'on connait en matière de hasard. Je n'ai pas Matlab, donc, j'ai pas pu tester qui que ce soit.
PS, je t'avais pas reconnu tout de suite. Le comique de la situation c'est que c'est toi qui a mis le doigt sur le problème.
Dernière modification par Dlzlogic ; 10/08/2013 à 12h22.
Et qui à part toi pense cela ? En tout cas pas les chercheurs en proba, ou en optimisation stochastique que je côtoie par exemple... Quelqu'un d'autre ici par exemple pour confirmer que les résultats ne sont pas "ceux que l'on connaît en matière de hasard" ? Comme souvent ton avis sur l'aléatoire est différents de celui de tout ceux qui ont étudié et utilisé les probas...Le générateur de Scilab autorise plusieurs options, c'est là que le terme "aléatoire" n'a plus son vrai sens. En particulier, ce générateur utilisé, sans préciser d'option, c'est à dire par défaut, donne des résultats qui ne sont pas ceux qu'on connait en matière de hasard.
Alors ramenons un peu de vérité :
- Une variable aléatoire suis une loi
- il existe plusieurs loi classique utilisées un peu partout pour diverses modélisations, simulations etc...
- les plus courantes sont : la loi uniforme et la loi normale, mais on peut aussi citer la loi exponentielle, du chi², de poisson, binomiale, géométrique, de Cauchy, etc...
- par défaut un générateur de nombre pseudo aléatoire produit une suite de nombre au pptés statistiques très proche d'une suite i.i.d de loi uniforme. Et ce pour tout les générateurs de nombre aléatoire connu. Dans ce que j'exposais précédemment cela peut être uniforme sur [0,1] ou sur un certain nombre d'entier.
- Pourquoi ? Parce qu'à partir d'une loi uniforme on peut simuler toutes les autres loi si on connait leur fonction de répartition (méthode du rejet typiquement).
- Il n'empêche que les simulateurs évolués proposent de simuler d'autres lois.
Les preuves, par des simulations, que j'ai apporté n'ont servi à rien.
Quant aux documents cités "Ah c'est un physicien, il est normal qu'il défende son domaine" (par exemple)
Je n'ai rien à ajouter.
Faut voir ta notion de "preuve"... Elle est différentes de celle utilisées par l'ensemble des gens qui ont fait des maths jusqu'en TS par exemple...
Fermé, comme d'habitude à cause de HS de Dlzlogic (le sujet est exclusivement celui de la fonction ran du fortran !)
Médiat, pour la modération
Je suis Charlie.
J'affirme péremptoirement que toute affirmation péremptoire est fausse