Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#401 Re : Café mathématique » Variable aléatoire at fonction rand() » 23-05-2016 16:10:16
Merci Yoshi pour tes liens.
Quant au débat sur langage interprété vs compilé il me semble oiseux.
Du point de vue mathématique, tu as bien raison. C'est aussi ce que je me suis dit la première fois que Dlzlogic en a parlé.
Mais ensuite m'est venue l'idée de la compilation : avec quoi compile-t-on ? une version "buggée" d'un RNG ? Je ne sais pas...
J'espère maintenant que Dlzlogic a obtenu ses derniers tests avec PHP et qu'il va nous donner le code pour que nous puissions analyser.
#402 Re : Café mathématique » Variable aléatoire at fonction rand() » 23-05-2016 16:05:33
Nb=16000 emqMin=31.415 emqMax=40.044 emqMoy=38.937
Graine initialisée avec l'horloge
Initialusation Seed_lo=875001
Nb=16000 emqMin=13.276 emqMax=28.191 emqMoy=23.562
Initialusation Seed_lo=906251
Nb=16000 emqMin=13.481 emqMax=24.503 emqMoy=23.403
Initialusation Seed_lo=62
Nb=16000 emqMin=14.182 emqMax=19.095 emqMoy=23.448
Initialusation Seed_lo=859
Nb=16000 emqMin=12.971 emqMax=32.825 emqMoy=23.525
Initialusation Seed_lo=281
Nb=8000 emqMin=17.875 emqMax=30.943 emqMoy=23.753
Initialusation Seed_lo=812
Nb=32000 emqMin=22.872 emqMax=44.359 emqMoy=35.205
Initialusation Seed_lo=359
Nb=32000 emqMin=24.395 emqMax=44.569 emqMoy=35.154
Initialusation Seed_lo=343
Nb=12000 emqMin=12.520 emqMax=32.037 emqMoy=22.188
Tu obtiens ces résultats avec PHP, c'est bien ça ? J'espère que oui, car tu pourrais nous donner le source pour le mettre sur le web. Ainsi je pourrais étudier la situation, comme chacun d'entre nous.
#403 Re : Café mathématique » Variable aléatoire at fonction rand() » 23-05-2016 12:46:42
Le sujet de validité de tel ou tel générateur me parait important
oui, c'est effectivement très important (et dans le sujet de la discussion), mais je ne suis pas spécialiste des tests de validité de générateurs. Mais bon....
pourrais-tu proposer un test de "normalité". En d'autres termes, par un moyen donné, on a créé une série de nombre sous forme de liste, comment vérifier si cette série est conforme à la loi normale ?
On a sous les yeux \( x_1 , ... x_n \)
Une loi normale est déterminée par sa moyenne (ie l'espérance) et son écart-type.
Si on connaît la moyenne par théorie (ou autre justification), alors tant mieux, mais si on ne la connait pas, alors on approche sa valeur par la moyenne arithmétique \(m\) de liste.
Si on connaît l'écart-type par théorie (ou autre justification), alors tant mieux, mais si on le connait pas, alors on approche sa valeur grâce aux éléments de la liste avec la formule \( \frac{1}{n}\sum_{i=1}^n (x_i - m)^2 \) (=écart-type de la liste) si m est la vraie valeur de l'espérance de la loi, et avec la formule \( \frac{1}{n-1}\sum_{i=1}^n (x_i - m)^2 \) si m n'est qu'une valeur approchée de l'espérance de la loi. Disons qu'on a obtenu la valeur \(s\) par un moyen ou un autre.
Ainsi, on obtient deux valeurs m et s qui se veulent être (proche de) l'espérance et l'écart-type de la loi normale.
Il reste maintenant à vérifier que \( x_1 , ... x_n \) est conforme à la loi N(m,s). Là, on peut comparer la fonction de masse de la loi N(m,s), à savoir \( \frac{1}{s.\sqrt{2 \pi}}\exp(\frac{-1}{2}(\frac{x-m}{s})^2) \), et un histogramme de fréquences de \( x_1 , ... x_n \) (par exemple avec 10 classes comme tu le fais, mais si n est assez grand, on peut augmenter le nombre de classes pour être plus précis).
#404 Re : Café mathématique » Variable aléatoire at fonction rand() » 23-05-2016 09:37:02
Il me semble que le TCL est très clair, et celà correspond exactement à ce que j'ai toujours su, quelle que soit l'expérience, la répartition des écarts à la moyenne est conforme à la loi normale.
non, pas quelle que soit l'expérience, mais quand l'expérience consiste à faire des sommes de variables aléatoires qui suivent des lois ayant des propriétés raisonnables habituelles (liées à l'existence de moyennes et écart-types)
Autrement, il peut y avoir des quantités de lois expérimentales, la plus connue est la loi de probabilité égale (loi uniforme), la répartition des écarts à la moyenne est conforme à la loi normale.
généralisation incorrecte : il faut faire des sommes...
L'exemple simple que j'ai déjà cité, on lance un dés à 6 faces ordinaire une trentaine de fois. Chaque face a une chance sur 6 d'apparaitre. On comptabilise le nombre de sorties de chaque face. On constate facilement la répartition normale. Et ça on n'y peut rien, c'est toujours comme ça.
oui, c'est effectivement une application directe du TCL quand le nombre d'observations est assez grand. Car quand on comptabilise, on fait une somme de 1 et de 0 pour le dénombrement de chacune des faces. En fait, c'est l'approximation de la loi binomiale par la loi normale.
Et en effet, une trentaine d'observations comme tu dis, c'est le nombre habituel à partir duquel cela se met en pratique en général.
C'est exactement ce que l'on fait dans le programme, mais avec un dé à 16 faces.
le résultat de la fonction rand dans certains langages interprétés.
Ce serait plutôt le rand de certains langage compilés...
#405 Re : Café mathématique » Variable aléatoire at fonction rand() » 22-05-2016 21:01:16
Là, tu as l'histogramme de la loi uniforme.
là c'est une loi "triangulaire" : https://docs.scipy.org/doc/numpy-1.10.0 … gular.html
Là, une loi de Poisson : https://docs.scipy.org/doc/numpy-1.10.0 … isson.html
etc. il y en a des tonnes !
#406 Re : Café mathématique » Variable aléatoire at fonction rand() » 22-05-2016 20:56:19
Je me demande ce qu'ils entendent exactement par distribution uniforme parce que je peux choisir normale ou d'autres...
Uniforme, Normale, etc. sont des loi de probabilité suivies par le générateur de nombres pseudo aléatoires. Ces choix sont là pour répondre à des simulations particulières.
Dans tous les logiciels, et même par habitude chez les gens, tirer un nombre aléatoirement dans un intervalle se fait par défaut suivant la loi uniforme : tout nombre à la même chance d'être tiré au hasard, ie. la même probabilité. La distribution est uniforme, l'histogramme des valeurs obtenu est une "droite horizontale"...
Il existe d'autres lois où les nombres n'ont pas la même probabilité d'être tiré au hasard, ie l'histogramme des valeurs obtenues par ces lois n'est pas horizontal, mais à une autre forme (en cloche pour la loi normale ou d'autres loi, décroissante pour d'autres lois encore, etc.)
#407 Re : Café mathématique » Variable aléatoire at fonction rand() » 22-05-2016 19:34:50
Bonsoir,
Voila quelques essais avec PHP.
Nb=16000 emqMin=15.439 emqMax=34.130 emqMoy=30.330
Nb=16000 emqMin=18.375 emqMax=27.980 emqMoy=30.574
Nb=8000 emqMin=11.603 emqMax=19.023 emqMoy=21.886
Nb=32000 emqMin=26.863 emqMax=31.397 emqMoy=42.023ça correspond exactement aux résultats obtenus avec les autres langages interprétés
oui et tu remarqueras le rapport \( \simeq \sqrt 2 \) entre emqMoy de 8000 et celui de son double 16000,
et le même rapport entre emqMoy de 16000 et celui de son double 32000.
Naturellement, ce qui me gène vraiment, c'est que ça correspond exactement aux résultats obtenus avec les autres langages interprétés. A mon avis ce point doit être strictement étudié.
Oui, je comprends ta remarque, même si hier j'en étais étonné.
On comprend très bien que, mathématiquement, la question du langage informatique n'a pas lieu de poser, puisque les maths ne dépendent pas d'un logiciel informatique. Il ne peut y avoir un bon résultat pour les langages compilés et un autre résultat complètement différent mais bon pour les langages interprétés. En réalité, il n'y a qu'une seule vraie bonne valeur.
Mais en effet, il se peut que des versions "buggées" de logiciels donnent un mauvais rand. "Mon C" (qui compile) donne des résultats conformes à la valeur théorique. Pour ma part, je ne peux expliquer où serait le "bug" dans les langages informatiques, je ne suis pas assez à l'aise dans ces langages C, C++ pour être sûr de moi sur une explication nette sans bavure.
J'aimerais bien mettre la main sur un langage qui ne donne pas une moyenne de l'emq tournant autour de 30 (pour 16000 tirages), histoire d'étudier la situation.
#408 Re : Café mathématique » Variable aléatoire at fonction rand() » 22-05-2016 19:15:46
Ok Yoshi.
Dans tes 10 nouveaux essais, on observe encore une fois des anomalies (valeur moy 15-16) par rapport à la valeur théorique (30-31), et des anomalies (25) dans les anomalies... Cela rend le programme compilé douteux, à mes yeux. Est-ce un problème de version "buggée" ???
#409 Re : Café mathématique » Variable aléatoire at fonction rand() » 22-05-2016 15:27:56
En fait l'écart entre 25 et 30 ne me tracasse pas, ça peut dépendre de tellement de choses.
On voit bien que javascript, maple, c++, python, "mon C" donne 30, alors que DevC++ et "ton C" donne 23 ou 25. Aucunes des simulations n passe de 30 à 25 ou de 25 à 30.
Entre 25 et 30, il y a une grosse différence, suffisante à mon avis pour conclure à de mauvaises fonctions random.
Mais, en ce qui me concerne, le problème principal est que tu considères que l'écart-type varie dans le même sens que le nombre d'observations de la même chose
Je n'ai jamais dit cela... je te dis que le nombre d'observations ne varie pas ! C'est le nombre de variables sommées qui change (12000 ou 16000 ou 32000). Ce que nous observons, c'est la somme \(X_1 + ... + X_{16000} \) pour 16000. Si on augmente à 32000, on n'augmente pas le nombre d'observations, on change d'objet observé car la somme \(X_1 + ... + X_{32000} \) change en nombre de termes.
D'ailleurs, la moyenne de la somme change 32000 / 16 = 2000, et non 1000 : c'est une preuve qu'on n'observe plus la même chose. :)
Bref, on n'augmente pas le nombre d'observations, mais on change l'objet observé. J'espère être assez limpide.
Si on prend la formule de Köenig, lorsque n tend vers l'infini, la variance tend vers zéro.
Ok, mais dans le programme, on divise par 16 (toujours par 16) , et par 100 (toujours par 100). Ni 16, ni 100 ne tendent vers l'infini. Donc ce n'est pas un raisonnement ad hoc dans notre cas.
Je vais essayer de finir mon code PHP.
oui, ce serait intéressant.
#410 Re : Café mathématique » Variable aléatoire at fonction rand() » 22-05-2016 14:53:29
J'ai testé en Python (10 fois) :
Avec 12000 tirages (moyenne de 12000/16 = 750 ), sur 100 expériences :
mini maxi moyenne
18.347343131908772 40.09052257080219 26.719777514061807
(...)Avec 32000 tirages (moyenne de 32000/16 = 2000 ), sur 100 expériences :
mini maxi moyenne
24.95245478905833 60.117593098859174 42.78639917424181
(...)
ok, là, ça colle avec la théorie comme tu l'as constaté.
Pour rappel :
NbTirages = 32000 emq moy=6.868 Min=3.674 Max=10.428
NbTirages = 16000 emq moy=23.356 Min=10.724 Max=39.003
NbTirages = 12000 emq moy=24.286 Min=18.695 Max=28.410
J'utilise DevC++ mais il paraît que c'est pas un bon choix...
Avec 16000 tirages, et le code de leon (et srand(time(NULL)) activé) :
min 13.775 17.962 17.762 17.871 13.398
max 28.076 28.853 31.615 28.623 28.561
moy 23.374 22.798 25.136 22.969 23.213Avec 32000 tirages (et srand(time(NULL)) activé) :
min 12.610 11.253 12.629 12.718 22.458 22.153 11.916
max 19.355 19.342 20.009 19.947 29.466 29.385 19.758
moy 15.781 15.552 15.752 15.794 25.057 25.007 15.611
ok, là, ça ne colle plus avec la théorie, comme tu l'as constaté. Sans toutefois retomber vraiment sur les résultats de Dlzlogic, sauf la moyenne à 16000 !
Là, nous sommes tous les trois en train de constater une anomalie (en gras), et en prime une anomalie dans l'anomalie (en rouge) ! Bien joué.
Du coup, une première conclusion qui s'impose d'elle-même : certaines versions de langage ne sont pas propices à de bonnes simulations. C'est évident, mais quand on ne s'en aperçoit pas, alors on fait des simulations fausses de bonne foi, etc. D'où l'intérêt d'avoir un peu de recul théorique pour critiquer des résultats non conformes.
Yoshi, pourquoi dis-tu que "DevC++ n'est pas un bon choix à ce qu'il paraît" ?
#411 Re : Café mathématique » Variable aléatoire at fonction rand() » 22-05-2016 13:33:35
Si tu expliques aux statisticiens qu'en augmentant le nombre de mesures ou d'observations on augment la valeur de l'écart-type, tu auras beaucoup de succès.
Comme je te l'ai dit, on ne change pas le nombre d'observations ! Regarde par quoi on divise dans le programme : ce n'est pas par 16000 ou 32000...
Les statisticiens savent très bien que l'écart-type d'une somme \(X_1 + ... + X_k\) de k variables indépendantes augmente quand k augmente : on dit (tu le sais toi aussi !) que les écart-types s'ajoutent quadratiquement (autrement dit, les variances s'additionnent). Ce ne te rappelle rien ?!
Donc quand on passe de k=16000 à k=32000, on double le nombre k de variables, et l'écart-type est multiplié par un facteur \( \sqrt 2 \) ... le pire, c'est que tu le sais...
Bonjour Léon,
Ben, j'ai rajouté randomize (ou srand, c'est pareil), j'ai imprimé dans un fichier, et comme c'est le même code que celui que je t'avais donné, j'obtiens la même chose qu'avec mon code.
A part cela, je n'ai pas d'explication.
Bizarre qu'un même code donne deux résultats différents. As-tu un moyen pour nous laisser télécharger ton fichier de session ?
Et quant à nos 5 simulations (C++, python pour Yoshi ; maple, javascript, C pour moi) qui donnent des résultats de moyenne d'emq conformes à la valeur théorique \( (n.p.(1-p))^{0.5} \), tu en penses quoi ?
#412 Re : Café mathématique » Variable aléatoire at fonction rand() » 22-05-2016 08:49:27
Voici ton code en C utilisant 16000 tirages (avec les déclarations de type là où il faut) :
#include <stdio.h>
#include <math.h>
int main() // suivant 154
{
int fois=0 ;
float emq=0.;
float min_emq=1000.;
float max_emq=0.;
float moy_emq=0.;
// srand (time (NULL)) ; // si on veut indexer la graine sur le temps machine
for (fois=0; fois < 100; fois++)
{
// on réalise 100 fois l'expérience suivante
int Res[16];
int i=0 ;
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++)
{
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.;
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=sqrt(emq/16) ;
min_emq = min_emq < emq ? min_emq : emq ;
max_emq = max_emq > emq ? max_emq : emq ;
moy_emq += emq ;
}
moy_emq =moy_emq /100 ;
printf("minimum : %0.3f\n",min_emq) ;
printf("maximum : %0.3f\n",max_emq) ;
printf("moyenne : %0.3f\n",moy_emq) ;
return 0;
}
compilation : gcc -c test.c -o test.o ; gcc test.o -o test -lm ;
Résultat pour 16000 tirages (moyenne de 16000/16 = 1000 ), sur 100 expériences :
minimum : 19.209
maximum : 45.123
moyenne : 29.483
... c'est conforme à ce que yoshi et moi avons eu avec Python, javascript, Maple et la théorie !
cf http://leon1789.perso.sfr.fr/tmp/simult … logic.html
Maintenant avec 12000 tirages (moyenne de 12000/16 = 750 ), sur 100 expériences :
minimum : 14.474
maximum : 37.797
moyenne : 25.806
... c'est conforme à ce que j'ai eu avec javascript, Maple et la théorie !
cf http://leon1789.perso.sfr.fr/tmp/Copie% … logic.html
Maintenant avec 32000 tirages (moyenne de 32000/16 = 2000 ), sur 100 expériences :
minimum : 26.098
maximum : 63.795
moyenne : 41.679
... c'est conforme à ce que j'ai eu avec javascript et la théorie !
cf http://leon1789.perso.sfr.fr/tmp/Copie% … logic.html
Pour rappel :
NbTirages = 32000 emq moy=6.868 Min=3.674 Max=10.428
NbTirages = 16000 emq moy=23.356 Min=10.724 Max=39.003
NbTirages = 12000 emq moy=24.286 Min=18.695 Max=28.410
-----------
Nous t'avons fait des simulations dans 4 langages différents (avec ton propre code) et une explication théorique avec la loi binomiale, tout cela coïncide très bien. On ne retrouve aucun des résultats que tu as annoncés, que se soit avec 16000 tirages ou 32000... Pour 12000, nos deux résultats sont proches sur la valeur moyenne, mais pas du tout sur le max et le min observés (pour toi, le max et le min sont très proches de la moyenne).
As-tu une explication sérieuse autre que "tu n'acceptes pas les règles, tu confonds ceci cela, ce sont des choses peu connues mais évidentes pour moi" ?
Si mes simulations sont incorrectes, merci de me dire précisément où sont les erreurs : soyons précis et concis, inutile de partir des laïus hors sujet.
Par exemple, que donne mon code si tu le compiles et exécutes chez toi ?
#413 Re : Café mathématique » Variable aléatoire at fonction rand() » 21-05-2016 23:10:47
Visiblement, les sessions MAPLE, et javascript te laissent de marbre.
Pour 32000 tirages : http://leon1789.perso.sfr.fr/tmp/Copie% … logic.html ... écart-type autour de 43 en moyenne ...
C'est logique car la formule de la loi binomiale indique (32000.p.(1-p))^0.5 avec p=1/16 , ce qui donne 43.3
En matière de probabilités le principe est très simple, plus le nombre de mesures ou d'observation est grand, meilleur est la précision du résultat, mathématiquement, cela se traduit par une diminution de l'intervalle d'incertitude, c'est à dire par une diminution de la valeur numérique de l'écart-type.
Mais dans notre cas, on ne change pas le nombres d'observations : ce nombre est toujours de 100 ! Tu ne l'as pas modifié, hein ?
Ce que l'on change, c'est le nombre de tirages pour obtenir les écart-types à observer : 16000 ou 12000 ou 32000 tirages. Et là, plus on augmente le nombre de tirages, plus les écart-types augmentent (tout comme la moyenne bien évidemment : 16000/16 ou 12000/16 ou 32000/16).
NbTirages = 32000 emq moy=6.868 Min=3.674 Max=10.428
NbTirages = 12000 emq moy=24.286 Min=18.695 Max=28.410
Si je fais tourner ton code donné message #19, en remplaçant 16000 par 32000 ou 12000 (boucle "i"), tout en gardant 100 expériences (boucle "fois"), je vais obtenir cela ? C'est ce que tu prétends.
Ok, je vais le faire tourner en C
#414 Re : Café mathématique » Variable aléatoire at fonction rand() » 21-05-2016 22:31:48
Je suis entrain de me battre avec PHP. Il y a des années que je n'en ai plus fait, alors j'ai un peu de mal.
Je vais recalculer avec emq, min et max.
et tu obtiens quel résultat ?
Il me parait normal qu'un programme compilé donne un résultat avec moins de dispersion qu'un programme interprété.
ah bon ? Pour quelle raison ?
Bon, pour trouver la même moyenne, je pense que la meilleure méthode est de diminuer le nombre de tirages, peut-être 12000, par exemple. Le nombre trouvé avec le module C va augmenter, celui que tu calcules va diminuer.
Oui, si on passe de 16000 à 12000, l'écart-type de la loi binomiale va effectivement diminuer : précisément, il va être autour de $$(12000.p.(1-p))^{0.5}$$ avec p=1/16 , donc 26.5 (donc diminution par rapport à 30.6 pour 16000 tirages, en effet).
Tiens, voici deux pages web pour bien voir cela :
avec 16000 tirages : http://leon1789.perso.sfr.fr/tmp/simult … logic.html ...écart-type autour de 30 en moyenne...
avec 12000 tirages : http://leon1789.perso.sfr.fr/tmp/Copie% … logic.html ...écart-type autour de 26 en moyenne...
Et pourquoi celui de C augmenterait ??? si on fait le même changement (passer de 16000 à 12000), ça devrait avoir le même effet, non ?
Mais bien-sûr, rien à voir avec les maths.
Justement, ce sont les formules de la théorie des probabilités qui indiquent ce que l'on trouvera... C'est ça les maths.
Mais franchement, j'ai plus envie de jouer.
Mais je suis absolument sérieux !
Je sais que je suis hérétique, mais là, il y a des limites.
franchement... tu ne vois pas que la formule théorique d'écart-type que je te donne (à savoir (n.p.(1-p))^0.5 , qui figure partout dans les livres et sur le web) colle avec tous les résultats d'expérience que yoshi et moi avons postés. Cela ne te questionne pas ??
Moi, ce qui me questionne, c'est comment tu as obtenu cette valeur moyenne d'écart-type de 25, et comment cela pourrait augmenter si on diminue le nombre de tirages de 16000 à 12000 ... car c'est contraire à la théorie, et aux résultats d'expériences. J'ai bien un explication mathématique possible, mais j'aimerais qu'on y arrive ensemble.
Bref, passe à 12000 tirages, et dis nous quel résultat tu obtiens, merci d'avance. Tu clames souvent que personne ne veut faire de simulation avec toi, alors là c'est bien, on en fait des simulations. ;)
En attendant, voici une exécution MAPLE, avec 12000 tirages :
ecart := proc() local L,i,moy,emq ;
L := array(0..15, [0$16]) :
to 12000 do i := rand(0..15)() ; L[i] := L[i]+1 od :
L := convert(L, list) ;
moy := 12000/16. ;
emq := add((i-moy)^2, i=L) ;
emq := sqrt(emq/16.) ;
return(emq);
end :
# 100 ecart-types sur 12000 tirages
s := seq(ecart(), i=1..100) ;
s := 28.93311252, 38.07229964, 26.32489316, 23.69862865,
31.59113800, 25.42144764, 32.36510467, 22.77608395,
25.59785147, 32.96209945, 34.16686992, 18.50675552,
20.85665361, 28.16025568, 26.45751311, 26.87005769,
31.35482419, 26.52357442, 26.47404389, 23.71181140,
26.97915862, 23.92697223, 16.08182204, 16.82631867,
30.18277655, 22.24578612, 22.99728245, 14.08012784,
28.70322282, 27.53179980, 24.31306233, 26.35336791,
26.76518261, 34.33110834, 28.18022356, 29.06673356,
26.72779452, 31.00000000, 30.24896692, 25.11971337,
24.93992783, 28.97412639, 22.81994741, 21.59571717,
15.34600925, 20.81165539, 30.54095611, 22.45829468,
27.56129533, 27.50454508, 20.57304061, 21.94880407,
29.06673356, 26.34150717, 16.34778272, 22.69636535,
25.47547841, 21.78302091, 26.36522331, 32.82719909,
21.95165142, 32.97347419, 28.74456470, 19.83368347,
26.93742749, 26.67630034, 19.24512925, 21.16601049,
36.88156721, 23.85634088, 28.17578748, 30.36856928,
21.07427342, 29.48516576, 25.15949125, 20.13703057,
34.26733138, 20.08730943, 30.24070105, 28.10916221,
28.89420357, 27.29010810, 19.41326866, 23.56639557,
24.04163056, 20.04370225, 30.93339619, 25.47547841,
39.77436360, 24.68299009, 14.88287607, 37.37980738,
22.16979928, 29.31723043, 22.17825512, 32.30711996,
25.93742470, 25.19672598, 25.40177159, 28.75108694
# min, max, moyenne des écart-types
min(s), max(s), add(i, i=[s]) / 100 ;
14.08012784, 39.77436360, 26.01472668
Et là aussi, moyenne de 26, proche de la valeur théorique annoncée à 26.5 (pour 12000 tirages).
#415 Re : Café mathématique » Variable aléatoire at fonction rand() » 21-05-2016 18:17:18
Ben oui, si tu avances de 32000 pas aléatoires avant-arrière, tu arrives en générale plus loin (soit en avant, soit en arrière) du point de départ qu'avec 16000 pas. C'est des probas élémentaires.
Le problème est de comprendre comment on peut obtenir des écart-types de 25 car ce n'est pas une valeur normale pour cette expérience.
#416 Re : Café mathématique » Variable aléatoire at fonction rand() » 21-05-2016 17:11:27
Pour la loi binomiale de paramètres n (nombre d'essais) et p (probabilité de succès pas essai), on prouve que
la moyenne est de n.p , i.e. dans notre cas c'est 16000 * 1/16 = 1000,
et d'écart-type (n.p.(1-p))^0.5 , i.e. dans notre cas c'est (16000 * 1/16 * 15/16)^0.5 ~ 30.6
Bien évidemment, les deux formules en gras se démontrent. C'est dans les bouquins ou sur le web.
Dans notre histoire, chaque variable Res(i) suit la cette loi binomiale B(16000, 1/6)
#417 Re : Café mathématique » Variable aléatoire at fonction rand() » 21-05-2016 12:43:59
Léon a écrit :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.
Je crains que tu appelles "valeur théorique" la valeur calculée avec la formule simplificatrice de la loi binomiale. Cette formule n'est valable que dans des limites assez restreintes que je ne connais d'ailleurs pas.
Justement, la loi binomiale est la loi exacte de l'expérience : quand on compte le nombre de fois qu'on a obtenu i (entier entre 0 et 15), on fait la somme de 16000 variables qui suivent la loi de Bernoulli (de paramètre 1/16) : c'est pour cela que je parle de la loi binomiale ayant pour paramètre n=16000 et p=1/16.
C'est la loi normale qui la forme simplifiée (c'est justement les premières versions du TCL).
Voila un résultat :
emq moy=23.356 Min=10.724 Max=39.003
Ok, je vais regarder cela en C, car ces moyennes proches de 25 sont étranges : elles montrent une anomalie, comme tu dis (car la théorie, Maple, javascript, Python, donnent des valeurs entre 29 et 31...)
#418 Re : Café mathématique » Variable aléatoire at fonction rand() » 21-05-2016 10:51:03
Tant que j'y suis, voici un code Maple et 100 écart-types :
ecart := proc() local L,i,moy,emq ;
L := array(0..15, [0$16]) :
to 16000 do i := rand(0..15)() ; L[i] := L[i]+1 od :
L := convert(L, list) ;
moy := 1000 ;
emq := add((i-moy)^2, i=L) ;
emq := sqrt(emq/16.) ;
return(emq);
end :
# 100 ecart-types sur 16000 tirages
s := seq(ecart(), i=1..100) ;
s := 39.15035121, 39.62480284, 34.93207695, 34.24178734,
29.50000000, 23.64582416, 25.46811732, 36.54278315,
26.74883175, 20.47559523, 28.09359358, 26.17250466,
35.75087412, 34.88015195, 27.67896313, 28.04906416,
29.48304598, 17.75176048, 29.38749734, 26.07201565,
20.30394050, 32.14420632, 32.73377461, 30.81192951,
34.97320403, 32.93554311, 34.78505426, 34.39840113,
28.15803615, 30.42408585, 28.68361902, 27.57489801,
27.81860888, 25.26113616, 30.73475232, 26.41022529,
34.65544690, 30.13303835, 26.76985245, 30.11851590,
20.31009601, 25.85053191, 28.53725635, 32.28776858,
30.94349689, 28.03346215, 29.56983260, 19.93426698,
26.55183609, 25.18928344, 25.96150997, 41.55718951,
26.43624406, 28.82056557, 23.07054399, 25.35251467,
28.15803615, 33.02461203, 34.17418616, 34.71671067,
33.23966005, 26.20591536, 25.11473671, 24.47192269,
21.43595111, 33.23777971, 43.82921400, 20.12150591,
46.34112644, 26.04803256, 27.68122107, 31.72932398,
27.39525506, 33.72869698, 40.90690651, 34.67708177,
29.85799725, 38.56325972, 26.01441908, 37.99342048,
27.40665977, 43.20445579, 39.79321550, 28.50219290,
28.81622807, 25.38946632, 25.21904043, 33.73981328,
28.50657819, 31.03022720, 28.85307609, 27.49318097,
31.63463292, 21.07130751, 39.04804733, 36.62819952,
19.35200248, 23.34255770, 29.17190429, 32.77766008
# min, max, moyenne des écart-types
min(s), max(s), add(i, i=[s]) / 100 ;
17.75176048, 46.34112644, 29.91531726
Ca ressemble aux résultats de Yoshi
#419 Re : Café mathématique » Variable aléatoire at fonction rand() » 21-05-2016 10:47:55
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.
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 ?
Il serait intéressant que ton script affiche aussi le min et le max des emq des 100 essais.
ok, je vais ajouter cela.
#420 Re : Café mathématique » Variable aléatoire at fonction rand() » 21-05-2016 10:42:30
Yoshi,
dans ton code, je ne vois pas où tu mets à jour la variable Liste_emq (et la variable somme_emq est devenue inutile)
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.
#421 Re : Café mathématique » Variable aléatoire at fonction rand() » 20-05-2016 19:52:50
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>) :
<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>
#422 Re : Café mathématique » Variable aléatoire at fonction rand() » 20-05-2016 17:19:53
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) ?
#423 Re : Café mathématique » Variable aléatoire at fonction rand() » 20-05-2016 13:26:07
@ 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 ?
#424 Re : Café mathématique » Variable aléatoire at fonction rand() » 20-05-2016 06:12:48
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.
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.
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.
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 ?
#425 Re : Café mathématique » Variable aléatoire at fonction rand() » 19-05-2016 21:20:37
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 ?







