Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 19-05-2016 14:05:27

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Variable aléatoire at fonction rand()

Bonjour,
J'ouvre un nouveau sujet pour éviter de polluer le topic qui a provoqué cette discussion.

Moi a écrit :

    Le cycle de 2^32 je l'ai lu quelque parts et il n'est pas question que je cherche où.

Yoshi a écrit :

Je n'aime pas du tout...
Alors je vais te répondre à ta façon.
Donc, on dira que ce n'est qu'une rumeur sans fondement et il n'est pas question que je le prouve. Essaie de me montrer que j'ai tort.

Réponse : (j'ai pas eu à chercher longtemps)
"rand utilise un générateur de nombre aléatoires par congruences multiplicatives de période 2^32 pour retourner une suite de nombres pseudo-aléatoires allant de 0 à RAND_MAX." réf. mon compilateur Borland.


Moi a écrit :

    La question est la suivante : pour des tests aléatoires, sans caractère critique les fonctions rand() conviennent-elles, la réponse est OUI, sans doute possible.

Yoshi a écrit :

Là aussi, pas question que tu prouves ton affirmation ?

    pour des tests aléatoires, sans caractère critique

Qu'entends-tu par " tests aléatoires sans caractère critique" ?

Un test aléatoire à caractère critiques est un test (ou tirage) tel que le résultat risque d'avoir une influence dans des opérations à caractère critique, type jeu d'argent sur le net, cryptographie, par exemple.
Une utilisation type de générateur "ordinaire" est l'utilisation de la méthode de Monte-Carlo. La fonction rand() (type 2^32) ne présente aucun risque.

Oui, tes liens sont intéressants, mais rien de tel en la matière que des essais qui, sans être une preuve, me paraissent assez convaincants.
http://www.dlzlogic.com/Gauss03.png
La date de création dans ma machine est 03/06/2011
J'écris très mal, mais je donnerai toutes les explications voulues si ça intéresse quelqu'un. Dans le cas présent, le but n'était pas de vérifier la fonction rand(), mais de vérifier la distribution pile_face (ou rouge noir) suivant la loi des grands nombres, en utilisant en particulier la répartition des suites de même parité.
Ceci dit, je suis prêt à faire toutes les simulations que l'on voudra.

PS je pense que Freddy aura eu ses réponses par la même occasion. Pour mémoire, j'ai vérifié que dans certaines conditions, les résultats de tirage avec Scilab ne sont pas satisfaisants. J'ai énormément cherché la fonction SOURCE de Scilab, sans succès. Par contre, suite à mes questions, j'ai eu des réponses qu genre "rand() est obsolète, il saut utiliser srand()". (sans commentaire).
Les notions de hasard, de contexte mécanique quantique (EPR) etc. ont été évoquées, mais c'est un autre débat que les générateurs de nombres aléatoires.

Dernière modification par Dlzlogic (19-05-2016 14:14:18)

Hors ligne

#2 19-05-2016 14:24:40

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

bonjour

Dlzlogic a écrit :

Pour mémoire, j'ai vérifié que dans certaines conditions, les résultats de tirage avec Scilab ne sont pas satisfaisants.

Intéressant. Peux-tu expliciter un peu s'il te plait ?

Hors ligne

#3 19-05-2016 15:19:09

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Bonjour Léon,
Tu fais référence au pdf http://www.dlzlogic.com/aides/Applicati … ormale.pdf. C'est bien de l'avoir lu, mais il est bien précisé, en première ligne, "Nota : Il est indispensable de lire l'article en entier." Il est vrai que j'avais le choix entre suivre le raisonnement progressivement pour arriver à la conclusion et dire " cette statistique n'est pas réaliste" tout de suite. J'ai longtemps hésité et j'ai préféré la première méthode. Soit tu n'as pas lu jusqu'au bout, soit tu te contentes de citer une phrase.

Concernant la fonction rand de Scilab, on en a déjà beaucoup parlé. Il y a des techniques très simples pour vérifier si une série d'observations résultent d'un tirage ou d'une expérience aléatoire. Tu l'as toi-même vérifié. 

D'ailleurs, si on veut vérifier la qualité d'un générateur, on détermine le protocole à utiliser et on fait des essais.

Ah j'oubliais, @ Freddy. La loi de Cauchy est effectivement un "contre exemple" cher aux mathématiciens. L'astuce consiste tout simplement à transformer la variable par une fonction, tangente en l'occurrence (de mémoire).

Hors ligne

#4 19-05-2016 18:19:41

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Variable aléatoire at fonction rand()

Salut

Ah, bin voilà Dizlogic, suffisait qu'on te pousse un petit peu...

A propos du 2^32... C'est une citation du compilateur Borland ? ok ! Il compile tes programmes C ?
Alors pour rester dans le droit fil du complotisme : ça ne m'émeut pas plus que ça venant du monde commercial.
Borland est (était ?) une référence dans le domaine du turbo Pascal et du Delphi, d'accord.
En dehors de ça, pourquoi aurait-il raison et la communauté scientifique tort ?
J'ai épluché la toile et n'avait pas trouvé grand chose dans leur (= Borland) sens,au contraire même...
A priori comme ça, j'ai tendance à faire confiance à la communauté scientifique plutôt qu'à un "marchand de soupe".
Peut-être que j'ai tort, je ne peux pas prouver que j'ai raison !
Je vais poursuivre mes recherches...


@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 19-05-2016 18:39:17

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Je crois que le plus simple reste tout de même de fixer un protocole et de faire des essais.
Pour être franc, je ne vais pas chercher plus, de toute façon j'aurais tort.

Hors ligne

#6 19-05-2016 19:25:07

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

Dlzlogic a écrit :

Concernant la fonction rand de Scilab, on en a déjà beaucoup parlé. Il y a des techniques très simples pour vérifier si une série d'observations résultent d'un tirage ou d'une expérience aléatoire. Tu l'as toi-même vérifié. 

D'ailleurs, si on veut vérifier la qualité d'un générateur, on détermine le protocole à utiliser et on fait des essais.

Oui, et cela tu l'as fait puisque tu as vu des anomalies. Quels sont ces protocoles et essais, s'il te plait ?

Dlzlogic a écrit :

Pour être franc, je ne vais pas chercher plus, de toute façon j'aurais tort.

Trop facile de se défiler encore une fois. Moi, je parie qu'il n'y a pas d'anomalie
(en tout cas, je n'en ai jamais constatées, donc ça m'intéresserait d'en voir ! )

Hors ligne

#7 19-05-2016 20:17:35

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Variable aléatoire at fonction rand()

Bonsoir,

@leon
Tiens, lis ça :
http://math.univ-lyon1.fr/~gannaz/Cours/TP_sujet.pdf
Je pense que tu trouveras du grain à moudre, certainement une réponse à ton questionnement....
On y parle de rand, de tests, d'histogrammes à faire avec les résultats...

Et encore ça qui vole bien plus haut :
http://jeia.fil.univ-lille1.fr/slides/c … lahaye.pdf
http://math.univ-lyon1.fr/~jberard/genunif-www.pdf

Ce sont des liens sérieux, où les conclusions sont solidement étayées.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#8 19-05-2016 20:41:16

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

Merci Yoshi

Dans le document http://math.univ-lyon1.fr/~gannaz/Cours/TP_sujet.pdf , page 4, on parle de Matlab ("frère" de Scilab si on peut dire) qui utilise le générateur Mersenne-Twister, réputé de qualité satisfaisante. Donc là, pas de trace d'anomalie. Si ?

Ce que je demande, c'est simplement que Dlzlogic montre comment il a vu des anomalies dans la fonction rand de Scilab, puisqu'il le dit.

Hors ligne

#9 19-05-2016 21:08:41

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Bonsoir Yoshi,
Très intéressant tes documents. A mon avis, le seul problème est qu'on ne parle pas de la même chose. J'ai parlé de générateur "ordinaire", utilisable pour des calculs "ordinaires", avec des impacts non critiques c'est à dire à l'exclusion de  la cryptographie, domaine où je ne me risque pas, comme dit dans ma première intervention.
Tu as la main pour tester la non-validité du générateur de "marchand de soupe" et proposer un protocole.
Si ça intéresse Léon, il peut faire le même essai, même protocole, avec Scilab. Par parenthèse, la fonction que j'ai testée (il y a une paire d'années) est maintenant déclarée obsolète. Donc on ne risque pas vraiment de tomber d'accord.
J'ai un peu de mal à comprendre quel but tu poursuis.

Hors ligne

#10 19-05-2016 21:20:37

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

Dlzlogic a écrit :

Par parenthèse, la fonction que j'ai testée (il y a une paire d'années) est maintenant déclarée obsolète.

Tu veux dire que la fonction que tu as testée n'est pas celle implémentée à ce jour dans Scilab ?

Hors ligne

#11 19-05-2016 22:18:51

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Dlzlogic a écrit :

    Par parenthèse, la fonction que j'ai testée (il y a une paire d'années) est maintenant déclarée obsolète.

Léon a écrit :

Tu veux dire que la fonction que tu as testée n'est pas celle implémentée à ce jour dans Scilab ?

Ben, ça j'en sait rien. Je n'ai pas trouvé d'infos sur le motif de sa déclaration obsolète. Et naturellement, je ne peux pas savoir si c'est la même fonction qu'avant.
En gros, je rappelle la question posée. Un lycéen doit faire un calcul comprenant une fonction aléatoire. Comme il est soigneux et rigoureux, il lit la doc et demande la signification de "pseudo-aléatoire'. J'essaye de lui répondre clairement et on me tombe dessus. Qu'ais-je dit de si choquant, que mon compilateur était Borland, traité de "marchand de soupe', que les utilisations de rand, hors traitement critiques comme la cryptographie, était tout à fait satisfaisante, que je voulais bien faire tous les tests qu'on voulait suivant le protocole qu'on voulait, que j'avais fait des quantités de simulations et que je n'avais jamais constaté d'anomalies, que j'avais constaté des anomalies avec Scilab ? Quoi d'autre, quel est mon péché mortel. Je sais très bien que c'est ton jeu de me contredire systématiquement. Cela est-il positif dans le cadre de forum où l’anonymat est de rigueur ?
Fin de discussion.

Hors ligne

#12 19-05-2016 23:08:23

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Bon, je vais en rajouter une couche.
Mon intervention à la question d'origine de ce débat était parfaitement justifiée. Freddy est intervenu pour me contredire, assez brutalement il faut le reconnaitre, mais i ne répond plus. Apparemment, c'est lui qui se pose comme compétent, alors qu'en est-t-il ?
Yoschi, avec tout le respect que je te dois, quelle compétence as-tu sur ce sujet ?
Dès qu'on aborde un point un peu pointu la discussion diverge. J'ai lu ou plutôt parcouru les fichiers que tu as mis en lien. La plupart sont des articles comme on en trouve un grand nombre sur le net. Généralement il ne disent rien de faux, mais leur existence ne prouve pas qu'ils étudient le problème réellement. Un exemple très simple, celui qui commence par expliquer en long et en large qu'il faut initialiser le générateur (la graine), mais le seul fait que tu l'aies mis en référence me laisse supposer que ce point de détail est une découverte pour toi.

Par la peine de parler de Léon, sauf à de rares exceptions, ses intervention se limitent à contredire des interventions. Les miennes en particulier, c'est tellement marrant puisque je réagis.
Dès que je propose un moyen de preuve, simulation en particulier, il n'y a plus personne. J'ai proposé une simulation simple à Freddy, j'ai pas de nouvelle. Cette même simulation, à force de persuasion, Léon a fini par la faire. J'ai mis le résultat à la fin de mon premier papier. Ben oui, c'est lui l'auteur de ces calculs et de ces graphiques. Mais c'est tellement amusant de troller à mes dépends qu'il continue.
Où sont les mathématiques dans tout ça, je me le demande, et à lire les forum, je ne suis pas le seul.
Bonne soirée.

Hors ligne

#13 20-05-2016 06:12:48

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

Dlzlogic a écrit :

Dès que je propose un moyen de preuve, simulation en particulier, il n'y a plus personne.

Archi faux, plein de gens t'ont fait des simulations... mais tu ignores celles qui montrent des résultats contraires à tes dogmes.

Dlzlogic a écrit :

Freddy est intervenu pour me contredire, assez brutalement il faut le reconnaitre, mais i ne répond plus.

Peut-être qu'il a décidé de ne plus perdre du temps avec toi. Un de plus peut-être.

Dlzlogic a écrit :

Cette même simulation, à force de persuasion, Léon a fini par la faire.

Oui, pour te montrer que certains de tes résultats, tels que tu les énonces en toute généralité, sont faux ! Mais tu n'as pas compris...

Par exemple, dans ce document http://www.dlzlogic.com/aides/Notions_d … bilite.pdf , tu as pris soin de ne pas publier un graphique que je t'ai envoyé et qui montre que ta rédaction n'est pas correcte, car il y manque une grosse hypothèse qui figure dans le TCL. Tu vois laquelle ? Je l'ai écrite en lettres majuscules dans les explications qui accompagnent le dernier graphique à la fin de ton document.

Je ne sais pas pourquoi tu refuses de comprendre alors que tu as les moyens et toutes les bonnes âmes dans les forums.

Dlzlogic a écrit :

j'avais constaté des anomalies avec Scilab

Ceci est une phrase importante, car s'il y a anomalie dans un logiciel autant utilisé, cela peut avoir un impact important. Ce serait surprenant !


Dans ce document http://www.dlzlogic.com/aides/TCL_Hasard.pdf, tu annonces

-La symétrie "parfaite" de la répartition des résultats obtenus avec Scilab laisse planer un doute sur la fiabilité du résultat. En effet, l'écart-type est grand 39.53 alors qu'une valeur d'environ 25. est plus réaliste.

Sur quoi te bases-tu pour affirmer tout ça, surtout cette valeur de 25 ?

Dernière modification par leon1789 (20-05-2016 08:56:31)

Hors ligne

#14 20-05-2016 08:21:13

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 7 457

Re : Variable aléatoire at fonction rand()

Salut,

je ne souhaite en effet plus échanger avec toi car j'ai bcp de travail (suis encore très actif) et très peu de temps à consacrer à quelqu'un qui a tout son temps pour donner du travail aux autres en répondant à des questions par des questions, comme une vis sans fin.

Reste sur tes convictions, publie si tu veux, quand on entre dans le monde de la croyance, tout est permis puisque par définition, rien n'est vérifiable. On t'explique que c'est un sujet difficile, compliqué, qu'il existe des mètres linéaires de littérature portant sur des tests, tu préfères rester avec ton seau et ta pelle dans ton bac à sable, libre à toi. Comme déjà dit, tu ne cherches pas à nous faire progresser, tu ne cherches qu'à occuper tout ton temps de cerveau disponible.
Fred et Yoshi ont fourni d'excellents documents de travail et de réflexion, tu ne prends même pas la peine de les lire et chercher à les comprendre. Sur ces sujets, je pense que tu as autant de compétences que Nabila en calcul mental niveau sixième.
Donc basta !

Dernière modification par freddy (20-05-2016 11:38:37)


De la considération des obstacles vient l’échec, des moyens, la réussite.

Hors ligne

#15 20-05-2016 13:06:36

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Bonjour,

Freddy a écrit :

Reste sur tes convictions, publie si tu veux, quand on entre dans le monde de la croyance, tout est permis puisque par définition, rien n'est vérifiable.

Ce n'est pas parce que tu ne connais pas la preuve ou veux l'ignorer que ce n'est pas prouvable. Lis, si tu as le temps, le cours de P. Lévy <<Cours d'Analyse de l'Ecole Polytechnique>>, Gauthier-Villars, 1931. Mais je suppose que tu trouvera ça périmé, ou trop vieux.
Et, le problème de l'aiguille (de Buffon) tu connais ? Tu préfères croire au paradoxe de Bertrand "Tout dépend de ce qu'on décide comme loi !"
Je suppose que c'est ce qu'on appelle les mathématiques modernes. 

@ Léon, j'avais oublié que j'avais étudié aussi en détail le cas de rand de Scilab. D'où viens cette valeur de 25, probablement des nombreux essais. Cependant, les hypothèses étant parfaitement précisées, je suppose qu'un spécialiste du calcul des probabilités pourra calculer cette valeur. Personnellement, je me contente de constater et de comparer. Concernant les mathématiques, je suis plutôt de la vieille école.

Hors ligne

#16 20-05-2016 13:26:07

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

Dlzlogic a écrit :

@ Léon, j'avais oublié que j'avais étudié aussi en détail le cas de rand de Scilab. D'où viens cette valeur de 25, probablement des nombreux essais. Cependant, les hypothèses étant parfaitement précisées, je suppose qu'un spécialiste du calcul des probabilités pourra calculer cette valeur. Personnellement, je me contente de constater et de comparer. Concernant les mathématiques, je suis plutôt de la vieille école.

Ok, tu expliques que la valeur 25 viendrait de nombreuses observations. En C je suppose, ça me va.
Personnellement, quand je fais de nombreuses (bien sûr une seule ne suffit pas) observations, en Maple par exemple, c'est plutôt la valeur 31 qui vient.

A la place de faire des sciences expérimentales, on peut faire des mathématiques (théorie des probabilités) pour calculer directement la valeur exacte théorique de l'écart-type.  Ce n'est pas compliqué, car les variables que tu étudies dans ton documents suivent une loi binomiale B(n,p) (qui est proche d'une loi normale, ok) où n = 16000 et p = 1/16 .  Or, et c'est marqué dans tous les bouquins et cite web, l'écart-type de la loi binomiale B(n,p) est \( \sqrt{np(1-p)} \), ce qui donne dans notre cas précis la valeur \( \frac{25}{2} \sqrt 6 \), soit environ 30.6

Ainsi, la valeur 25 observées sur de nombreuses observations est assez étrange... Peux-tu refaire ces observations (en C, si c'est ce langage que tu as utilisé)

En ce qui concerne Scilab dans ton document : l'écart-type constaté est de 39.5 , ok . Mais cela ne repose que sur une seule observation, celle de ton document. Donc c'est trop juste pour conclure, non ?  Sur cette expérience, l'écart-type peut varier "facilement" de 20 à 42 sur différentes observations...

Qu'en penses-tu ?

Hors ligne

#17 20-05-2016 14:32:06

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Ce que j'en pense, c'est que tu diras que c'est pas vrai, mais par honnêteté intellectuelle je vais le faire.

J'ai retrouvé le module C que j'avais fait à l'époque. Je faisais 100 fois la manipulation indiquée (fabrication d'un nombre entre 0 et 15 par tirage binaire) On notera que cette utilisation de rand est difficilement contestable quant à son efficacité.
Les 100 résultats sont à ta disposition.

Ci dessous le calcul de la répartition de ces 100 écart-type


Nombre de valeurs = 100  valeur minimale =10.71 valeur maximale=38.24
Rapport Emq/Ema = 1.27 Théorique = 1.25
Nombre = 100  Moyenne = 25.28  emq=6.80  ep=4.53

Classe 1  nb=   0  0.00%  théorique 0.35%    |
Classe 2  nb=   3  3.00%  théorique 2%       |HHH
Classe 3  nb=   8  8.00%  théorique 7%       |HHHHHHHH
Classe 4  nb=  10  10.00%  théorique 16%     |HHHHHHHHHH
Classe 5  nb=  33  33.00%  théorique 25%     |HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Classe 6  nb=  17  17.00%  théorique 25%     |HHHHHHHHHHHHHHHHH
Classe 7  nb=  21  21.00%  théorique 16%     |HHHHHHHHHHHHHHHHHHHHH
Classe 8  nb=   8  8.00%  théorique 7%       |HHHHHHHH
Classe 9  nb=   0  0.00%  théorique 2%       |
Classe 10 nb=   0  0.00%  théorique 0.35%    |
 

Hors ligne

#18 20-05-2016 17:19:53

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

C'est tout à fait a propos que tu montres cette simulation. Tout cela est intrigant.
J'aimerais que tu montres comment sont calculés les écart-types ?
Ce sont bien des écart-types sur 16000 tirages (et pas sur 10000 ou 11000) ?

Dernière modification par leon1789 (20-05-2016 17:42:29)

Hors ligne

#19 20-05-2016 17:45:03

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Oui, les écarts-types sont calculés sur 1000 tirages, suivant la formule racine(somme(µ - xi)² / N). et non pas sur 16000 tirages. Les 4 tirages successifs servent à construire un nombre. Il y a 16 issues possibles de moyenne égale à 1000.
Les 16 résultats correspondent aux 16 résultats que tu avais trouvés à l'époque.
Ci-dessous le programme :


int main() // suivant 154
{
  randomize();
  FILE *ecr=espion;
  fprintf(espion,"\n\n\n");
  for (int fois=0; fois < 100; fois++)
  {
// on réalise 100 fois l'expérience suivante
    int Res[16];
    for (int i=0; i<16; i++) Res[i]=0;
// tire à pile ou face 16000 fois, chaque groupe de 4 résultat successif forment un nombre de 0 à 15
    for (int i=0; i<16000; i++)
    {
      int a=rand()%2;
      int b=rand()%2;
      int c=rand()%2;
      int d=rand()%2;
      int r=a*8 + b*4 + c*2 + d;
      Res[r]++;
    }
    float moy=1000;
    float emq=0;
// Calcul de l'erreur moyenne quadratique appelée "écart-type"
    for (int i=0; i<16; i++)
    {
      emq+=(Res[i]-moy)*(Res[i]-moy);
    }
    emq=sqrt(emq/16);
// impression de l'emq dans un fichier texte
    fprintf(espion,"%0.3f\n",emq);
//    for (int i=0; i<16; i++) fprintf(espion,"%d\n",Res[i]);
  }
  return 0;
}
 

La fonction randomize() initialise la graine à partir de l'heure. C'est une fonction de Borland.
Chacun des 100 traitement génère un emq.
Ensuite j'utilise un autre module pour calculer la répartition de ces 100 valeurs. (à ta disposition si tu veux)
A noter que dans ce cas précis, la moyenne théorique est connue, c'est 1000. donc le dénominateur dans le calcul est N=16, et non (N-1) comme dans le cas où la moyenne n'est pas connue (cf discussions sur le biais).

PS. je comprends par très bien ta dernière phrase (10000 11000 ...)
Le but du jeu est de fabriquer des nombres de 0 à 15 en partant de bits tirés aléatoirement. Si on fait le décompte des 16000 rand la moyenne devrait être 8000 et l'écart-type, j'en sais rien, au pif quelques centaines.

Dernière modification par Dlzlogic (20-05-2016 17:52:47)

Hors ligne

#20 20-05-2016 19:52:50

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

Merci d'avoir expliciter ton code. J'ai pu ainsi le placer dans un source javascript pour que l'on puisse l'exécuter facilement, simplement en chargeant cette page web : http://leon1789.perso.sfr.fr/tmp/simult … logic.html

Le code de la page est la traduction "mot pour mot" du tien, avec en plus le calcul de la moyenne des écart-types obtenus (ce que tu fais dans ton module annexe).

Pour exécuter le script, il suffit de charger la page et il y a exécution automatique. On recharge la page, il y a ré-exécution, etc. Tu peux le faire sans risque.

On voit très bien que les valeurs des moyennes sur 100 écart-types tournent autour de 30...
Qu'en penses-tu ?


Pour mémoire, et preuve que je ne triche pas, voici le code de la page web (traduction "mot à mot" de ton code C, à partir de <script>) :

<center>
<form name=test>
moyenne écart-type = <input type=text name='moy_emq'>
</form>

<script>

somme_emq = 0 ;

  for (fois=0; fois < 100; fois++)
  {
// on réalise 100 fois l'expérience suivante
    Res = new Array(16) ;
    for (i=0; i<16; i++) Res[i]=0;

// tire à pile ou face 16000 fois, chaque groupe de 4 résultat successif forment un nombre de 0 à 15
    for (i=0; i<16000; i++)
    {
      a=Math.floor(Math.random() * 2)
      b=Math.floor(Math.random() * 2)
      c=Math.floor(Math.random() * 2)
      d=Math.floor(Math.random() * 2)
      r=a*8 + b*4 + c*2 + d;
      Res[r]++;
    }
    moy=1000.;
    emq=0.;

// Calcul de l'erreur moyenne quadratique appelée "écart-type"
    for (i=0; i<16; i++)
    {
      emq+=(Res[i]-moy)*(Res[i]-moy);
    }
    emq=Math.sqrt(emq/16.);

  somme_emq += emq
  }

self.test.moy_emq.value = somme_emq/100 ;

</script>
 

Hors ligne

#21 20-05-2016 20:51:22

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Bonsoir Léon,
Là, l'échange devient constructif.
Je vais soigneusement regarder cela, j'ai un autre langage à utiliser pour la même chose (le PHP). Je n'ai jamais eu de doute sur ta bonne foi.
Donc, à demain, mais il faudra un peu de patience.
Bonne soirée.

PS. (une heure plus tard) avant tout essai et tout calcul, réservés à demain, je voudrais rappeler des notions de base :
1- étant donné une série de mesures d'une même chose, la valeur la plus probable est la moyenne arithmétique.
2- l'écart-type, c'est à dire l'écart moyen quadratique, dépend de la méthode de mesure et donne une indication sur sa précision.

En d'autres termes, si la méthode de mesure n'est pas de bonne qualité, il n'y a pas de raison que la valeur adoptée ne soit pas bonne, mais il est bien évident que le nombre de mesures nécessaires sera plus important.
Je tenais à préciser ce point avant tout calcul contradictoire (cf protocole).

Dernière modification par Dlzlogic (20-05-2016 21:55:45)

Hors ligne

#22 21-05-2016 08:52:35

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Variable aléatoire at fonction rand()

Bonjour,

Je suis en train d'implémenter le code en Python.
Seulement, je suis surpris...
Bravo à leon qui n'a pas été gêné.

Donc voilà mon code (je me base sur l'indentation tout comme en Python, pour repérer les blocs) :

from math import floor,sqrt
from random import random

somme_emq,Liste_emq=0,[]
for fois in range(100):
    Res=[0]*16    
    for i in range(16000):
        a=floor(random()*2)
        b=floor(random()*2)
        c=floor(random()*2)      
        d=floor(random()*2)
        r=a*8+b*4+c*2+d
        Res[r]+=1
    moy=float(1000)
    emq=float(0)
    for i in range(16):
        emq+=(Res[i]-moy)*(Res[i]-moy)
    emq=sqrt(emq/16)
    Liste_emq.append(emq)
    print(emq/100)
print (min(Liste_emq),max(Liste_emq),sum(Liste_emq)/100)

 

J'ai légèrement modifié le code pour avoir le mini, le maxi et la moyenne arithmétique...
Dizlogic, ligne 19 avec Res[r]++, tu incrémentes à chaque fois la valeur du tableau à l'indice r de 1 ? C'est bien ça. ?
Quelque chose cloche-t-il dans ma transcription ?
Parce que, après essai, j'ai remodifié le code, ajouté une boucle de 10 fois pour répéter 10 fois l'ensemble de ton code, mis en sommeil l'affichage de emq pour ne garder que min max et moyenne arithmétique.
J'ai testé le Javascript hier, il n'y a pas tant d'écart.

15.350081433008752   47.793828053421294   29.846376173385366
18.503378069963333   41.92701992748829   29.87911190390206
18.079684731764544   45.779362162441714   29.970233222178535
16.848590445494246   45.05552130427524   29.878811658679673
12.434830115445887   46.134314777614286   29.94575410884941
17.881554742247666   45.88164120865774   29.313999920889795
18.764994004795206   43.14365538523596   30.148766928949822
16.28649747490233   41.46534697792845   30.351049535434708
14.650085323983612   43.23771501825692   30.51283981023539
17.97567801224755   51.27621280866987   29.972359948614454

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#23 21-05-2016 09:18:52

Dlzlogic
Banni(e)
Inscription : 25-04-2016
Messages : 461

Re : Variable aléatoire at fonction rand()

Bonjour,
Je crois que les choses sont encore plus compliquées que je ne le pensais.
J'ai fait plusieurs exécutions de ton script, j'ai eu des moyennes comprises entre 29.35 et 31.0. Ces valeurs sont à comparer à ma moyenne de 25.28. Il ne faut pas oublier que ces valeurs représentent des dispersions, et non des valeurs. En d'autres termes, on ne peut pas dire que l'une est plus ou moins fausse ou plus ou moins bonne que l'autre.

En fait, je ne sais pas comment fonctionne un générateur de nombres aléatoires dans le cas d'un module qui s'exécute en mode interprété. L'initialisation de la graine est prévu mais indépendamment de l'utilisateur. Je sais qu'en Scilab cette option d'initialisation de la graine est prévue.

Je vais faire le même type d'essai avec PHP, Excel et LibreOffice.
Il serait intéressant que ton script affiche aussi le min et le max des emq des 100 essais.

Hors ligne

#24 21-05-2016 10:42:30

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

Yoshi,

dans ton code, je ne vois pas où tu mets à jour la variable Liste_emq (et la variable somme_emq est devenue inutile)


yoshi a écrit :

J'ai testé le Javascript hier, il n'y a pas tant d'écart.

15.350081433008752   47.793828053421294   29.846376173385366
18.503378069963333   41.92701992748829   29.87911190390206
18.079684731764544   45.779362162441714   29.970233222178535
16.848590445494246   45.05552130427524   29.878811658679673
12.434830115445887   46.134314777614286   29.94575410884941
17.881554742247666   45.88164120865774   29.313999920889795
18.764994004795206   43.14365538523596   30.148766928949822
16.28649747490233   41.46534697792845   30.351049535434708
14.650085323983612   43.23771501825692   30.51283981023539
17.97567801224755   51.27621280866987   29.972359948614454

Ces résultats présentent le min, la max, et la moyenne sur 100 écart-types calculer sur les 16000 tirages.
Ils montrent qu'obtenir un écart-type de 25 ou de 39 n'est en rien étonnant (vu que l'on peut descendre facilement à 20 et monter à 45, comme je le disais dans mon message #16). Et ils sont tout à fait cohérents avec ce que j'ai pu observer également.

Je te précise (pour te soulager) que la valeur que je présente sur la page web est la moyenne de 100  écart-types, ce qui correspond (parfaitement) à ta 3ème colonne. Donc tout colle visiblement.

Dernière modification par leon1789 (21-05-2016 10:44:07)

Hors ligne

#25 21-05-2016 10:47:55

leon1789
Membre
Inscription : 27-08-2015
Messages : 1 203

Re : Variable aléatoire at fonction rand()

Dlzlogic a écrit :

J'ai fait plusieurs exécutions de ton script, j'ai eu des moyennes comprises entre 29.35 et 31.0.

oui, nous sommes d'accord.

Dlzlogic a écrit :

Ces valeurs sont à comparer à ma moyenne de 25.28. Il ne faut pas oublier que ces valeurs représentent des dispersions, et non des valeurs. En d'autres termes, on ne peut pas dire que l'une est plus ou moins fausse ou plus ou moins bonne que l'autre.

Disons qu'entre 29 et 31, ça colle à la valeur théorique, donc rien de surprenant. Alors que 25, c'est loin de la valeur théorique, donc là, c'est étrange.
Est-ce que tu peux vérifier encore une fois que ton source C produit bien 100 écart-types dont la moyenne est grosso-modo 25 , s'il te plait ?

Dlzlogic a écrit :

Il serait intéressant que ton script affiche aussi le min et le max des emq des 100 essais.

ok, je vais ajouter cela.

Hors ligne

Pied de page des forums