| Voir le sujet précédent :: Voir le sujet suivant |
| Auteur |
Message |
Hesperion
Inscrit le: 11 Nov 2007 Messages: 146 Localisation: Blois et environs
|
Posté le: Dim Oct 04, 2009 7:40 pm Sujet du message: Probabilités / Statistiques - classe de 2nde |
|
|
Voici quelques programmes.
Des améliorations du code sont possibles, mais ce n'est pas le but premier ici.
Simulation d'un jeu de pile ou face tout simple, pour confirmer l'idée intuitive de la loi des grands nombres.
Le script s'applique à une figure déjà dotée de quelques points. cf. pièces jointes.
| Code: |
//Auteur : PM Mazat ; Date : 04/10/2009
//Ce programme est placé sous licence CeCILL
//http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html
//simule un jeu de pile ou face basique
//affichage en temps réel de la proportion de pile et de face
var n, piece, i, compteur_pile, compteur_face, y_pile, y_face;
n = eval( Input("Nombre de lancer ?") ) + 1;
compteur_pile = 0;
compteur_face = 0;
for (i=1; i<n; i++){
piece = Math.floor( 2*Math.random() );
//0 équivaut à pile et 1 à face
if (piece==0) {
compteur_pile++;
} else {
compteur_face++;
}
y_pile = compteur_pile / i;
Move("P",0.2,y_pile);
y_face = compteur_face / i;
Move("F",0.7,y_face);
//permet d'afficher le nombre de lancer déjà effectués (pour savoir si on peut aller boire un café)
SetExpressionValue("E1",i);
// Pause(50);
} |
Un idée de simulation provenant du document d'accompagnement des programmes de 2nde sur l'algorithmique.
| Citation: |
| Un joueur lance deux dés, et fait la somme des points obtenus. S’il obtient 8 il gagne 10€, sinon il perd 1€. |
Première simulation : évaluation de la probabilité d'obtenir une somme égale à 8.
Après avoir effectuée une simulation avec affichage de l'évolution de la proportion de succès, on peut ne s'intéresser qu'à cette proportion.
cf. pièces jointes des_1 pour des fichiers préparés.
| Code: |
//Auteur : PM Mazat ; Date : 04/10/2009
//Ce programme est placé sous licence CeCILL
//http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html
//effectue n simulations d'un lancer de deux dés
//comptabilise le nombre de Succès (de1 + de2 = somme)
//affichage en temps réel la proportion de réussite
//1 unité représente 100 simulations
var n, somme, S, i, de_1, de_2, a;
n=Input("Nombre de simulations :\n1 unité représente 100 simulations.");
somme=8;
S=0;
for (i=0; i<n; i++){
de_1 = Math.floor( 6*Math.random() + 1 );
de_2 = Math.floor( 6*Math.random() + 1 );
if ( de_1 + de_2 == somme ){
S ++;
}
a=Point(i/100,S/i);
SetPointType(a,"point");
}
SetShowName(a,true);
SetAlias(a,Y(a)); |
On considère que le joueur rejoue jusqu’à ce qu’il cumule un gain minimal de 5€.
cf. pièce jointe des_2
| Code: |
//Auteur : PM Mazat ; Date : 04/10/2009
//Ce programme est placé sous licence CeCILL
//http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html
//simule une partie jusqu'à ce que le joueur gagne 5€
//affiche l'évolution du gain cumulé en temps réel
//retourne le nombre de lancer effectués
var gain_cumule, de_1, de_2, somme_des, compteur;
gain_cumule = 0;
compteur=0;
a=Point(0,0);SetPointType(a,"cross");
while ( gain_cumule<5 ){
de_1 = Math.floor( 6*Math.random() + 1 );
de_2 = Math.floor( 6*Math.random() + 1 );
somme_des = de_1 + de_2;
if ( somme_des==8 ){
gain_cumule = gain_cumule + 10;
} else {
gain_cumule = gain_cumule - 1;
}
compteur++;
b=Point(compteur,gain_cumule);
SetPointType(b,"cross");
Segment(a,b);
a=b;
Pause(100);
}
Alert("Il a fallu "+compteur+" lancer."); |
Dernière édition par Hesperion le Lun Oct 05, 2009 5:21 pm; édité 2 fois |
|
| Revenir en haut de page |
|
 |
Hesperion
Inscrit le: 11 Nov 2007 Messages: 146 Localisation: Blois et environs
|
Posté le: Dim Oct 04, 2009 7:40 pm Sujet du message: |
|
|
Quel est le nombre moyen de parties nécessaires avant de cumuler au minimum 5€ ?
cf. pièce jointe des_3
| Code: |
//Auteur : PM Mazat ; Date : 04/10/2009
//Ce programme est placé sous licence CeCILL
//http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html
//effectue k simulations d'un lancer de deux dés
//pour chaque simulation, comptabilise le nombre de lancer nécessaires pour obtenir 5€
//affichage en temps réel du nombre moyen de lancer nécessaires pour obtenir 5€
//1 unité représente 100 simulations
var k, i, de_1, de_2, compteur_lancer, gain_cumule, nb_lancer_moyen;
k = eval( Input("Nombre de simulations ?\n1 unité représente 100 simulations") ) + 1;
//k=2001;
compteur_lancer = 0;
for (i=1; i<k; i++){
gain_cumule=0;
while ( gain_cumule<5 ){
de_1 = Math.floor( 6*Math.random() + 1 );
de_2 = Math.floor( 6*Math.random() + 1 );
if (de_1+de_2 == 8){
gain_cumule = gain_cumule + 10;
} else {
gain_cumule = gain_cumule - 1;
}
compteur_lancer++;
}
a=Point(i/100,compteur_lancer/i);
SetPointType(a,"point");
} |
|
|
| Revenir en haut de page |
|
 |
alain974
Inscrit le: 13 Juin 2009 Messages: 37 Localisation: Réunion
|
Posté le: Dim Oct 25, 2009 1:08 pm Sujet du message: histogramme en géométrie |
|
|
Le fichier "cercle2.zir" téléchargeable ci-dessous n'a rien à faire dans cette rubrique: En bougeant le point M, on constate que l'aire du rectangle rouge passe par un maximum pour une position bien précise de M sur le rayon. Exercice archi-classique en Seconde, la suite l'est tout autant, et consiste à représenter graphiquement la fonction pour chercher son maximum.
Soit. Mais on peut construire un histogramme des aires avec le CarScript ci-dessous:
| Code: |
//Programme histogramme
// Auteur: Alain Busser
//ce programme est libre, placé sous license CeCILL:
//http://www.cecill.info/index.fr.html
var histogram=new Array();
//construction de l'histogramme
for(i=0;i<25;i++){
histogram[i]=0;
a=Point("A"+i,i/4,0);SetHide(a,true);
b=Point("B"+i,(i+1)/4,0);SetHide(b,true);
c=Point("C"+i,(i+1)/4,0);SetHide(c,true);
d=Point("D"+i,i/4,0);SetHide(d,true);
p=Polygon("_a,_b,_c,_d");SetColor(p,"green");
}
//statistique sur les aires
for(i=1;i<=1000;i++){
Move("M",-5+2.5*Math.random(),-3);
n=Math.floor(4*GetExpressionValue("aire"));
histogram[n]++;
for(j=0;j<25;j++){
Move("D"+j,j/4,histogram[j]/i*20);
Move("C"+j,(j+1)/4,histogram[j]/i*20);
}
} |
En fait, le maximum étant évalué empiriquement (en manipulant la figure précédente) à environ 6,25 et avec 4 rectangles par unité, il y a 25 rectangles en tout, ce qui est un bon compromis. Pour tester il vaut mieux mettre moins que 1000 points...
Le résultat ressemble à la figure "cercle3.zir" téléchargeable ci-dessous.
Il est intéressant car intuitivement, le fait que chaque fois que M est trop à gauche (rectangle tout couché) ou trop à droite (rectangle tout debout) l'aire est faible. On s'attend à une distribution de probabilité décroissante, les aires faibles étant souvent obtenues. Et bien non! En plus il y a même l'air d'y avoir une asymptote verticale.
La théorie de ce phénomène est sans doute intéressante, mais semble dépasser très largement le programme de Seconde. |
|
| Revenir en haut de page |
|
 |
alain974
Inscrit le: 13 Juin 2009 Messages: 37 Localisation: Réunion
|
Posté le: Mer Oct 28, 2009 8:18 am Sujet du message: médiane et quartiles |
|
|
Vu en stage hier: Le doc d'accompagnement sur l'algorithmique propose, page 3, de montrer l'utilité des algorithmes de tri pour calculer la médiane d'une série statistique.
Ce qui peut mener
à traiter les algorithmes de tri voire insérer un exemple dans les activités de Seconde
ou à utiliser un outil qui est déjà doté d'algorithmes de tri, et à ne regarder que les applications.
Justement JavaScript a tout ce qu'il faut là où il faut. Le très court script suivant
| Code: |
var atrier=new Array;
for(n=0;n<20;n++){
atrier[n]=Math.floor(100*Math.random());
}
trie=atrier.sort();
for(n=0;n<20;n++){
Println(trie[n]);
} |
crée une liste d'entiers aléatoires à 2 chiffres (elle s'appelle "atrier" comme dans "à trier") et affiche la version triée (qui s'appelle "trie" comme "trié").
Ce n'est donc qu'un début d'ébauche de TP de stats sur les quantiles mais le démarrage est fait. Yapluka... |
|
| Revenir en haut de page |
|
 |
alain974
Inscrit le: 13 Juin 2009 Messages: 37 Localisation: Réunion
|
Posté le: Sam Oct 31, 2009 4:28 pm Sujet du message: histogramme d'Hallowe'en |
|
|
Cette fois-ci, le rectangle MNPQ est inscrit dans un triangle, et son aire est maximale pour une valeur bien précise de M (laquelle?).
Le fichier "rectangle1.zir" comprend la figure de base, avec le triangle et le point M mobile. L'expression "E1" est l'aire du rectangle. Normalement la suite serait de créer un point dont l'abscisse est celle de M (ou une fonction affine de celle-ci) et l'ordonnée est l'aire E1 du rectangle.
Sur ce fichier on peut exécuter le script suivant, qui crée l'histogramme puis le modifie selon la statistique sur l'aire du rectangle:
| Code: |
//Programme rectangle
//Ce programme examine la distribution des aires
//Auteur: Alain Busser
//Date: octobre 2009
//Ce programme est libre, sous licence CeCILL:
//http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html
var histogram=new Array();
for(i=0;i<40;i++){//40 rectangles
histogram[i]=0;//initialisation du tableau
a=Point("A"+i,i/5,0);SetHide(a,true);
b=Point("B"+i+1,(i+1)/5,0);SetHide(b,true);
c=Point("C"+i+1,(i+1)/5,0);SetHide(c,true);
d=Point("D"+i,i/5,0);SetHide(d,true);
p=Polygon("_a,_b,_c,_d");SetColor(p,"green");
a=b;
d=c;//on passe au rectangle suivant
}
for(i=1;i<=1000;i++){
Move("M",-6+3*Math.random(),0);
n=Math.floor(5*GetExpressionValue("E1"));
histogram[n]++;
for(j=0;j<40;j++){
Move("C"+j+1,(j+1)/5,histogram[j]/i*25);
Move("D"+j,j/5,histogram[j]/i*25);
}
} |
Le résultat obtenu (durant le dîner) est visible dans le fichier "rectangle3.zir". Ici encore la distribution des aires est loin d'être uniforme. |
|
| Revenir en haut de page |
|
 |
alain974
Inscrit le: 13 Juin 2009 Messages: 37 Localisation: Réunion
|
Posté le: Sam Nov 14, 2009 6:53 pm Sujet du message: parallélogramme aléatoire |
|
|
Comme dans les exemples précédents, on a un point mobile P1 sur le côté [BC] d'un triangle isocèle ABC (les coordonnées de A, B et C sont entières). Et de P1 dépend un parallélogramme inscrit dans ABC, donc l'aire de ce parallélogramme (une fonction unimodale comme dans les exemples précédents). La figure de base est "parall1.zir" ci-dessous.
Ensuite comme dans les exemples précédents, le script construit des rectangles puis les modifie au fur et à mesure que M bouge, construisant ainsi un histogramme:
| Code: |
//Programme parallelogramme
//Ce programme examine la distribution des aires
//Auteur: Alain Busser
//Date: octobre 2009
//Ce programme est libre, sous licence CeCILL:
//http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html
var histogram=new Array();
for(i=0;i<30;i++){//30 rectangles
histogram[i]=0;//initialisation du tableau
a=Point("A"+i,i/4,0);SetHide(a,true);
b=Point("B"+i+1,(i+1)/4,0);SetHide(b,true);
c=Point("C"+i+1,(i+1)/4,0);SetHide(c,true);
d=Point("D"+i,i/4,0);SetHide(d,true);
p=Polygon("_a,_b,_c,_d");SetColor(p,"green");
a=b;
d=c;//on passe au rectangle suivant
}
for(i=1;i<=1000;i++){
Move("P1",-6+6*Math.random(),0);
n=Math.floor(4*GetExpressionValue("E1"));
histogram[n]++;
for(j=0;j<30;j++){
Move("C"+j+1,(j+1)/4,histogram[j]/i*20);
Move("D"+j,j/4,histogram[j]/i*20);
}
} |
Avec 1000 itérations, il faut un bon quart-d'heure pour obtenir le fichier "parall2.zir" téléchargeable ci-dessous. Ici encore, la distribution de l'aire est loin d'être équiprobable, avec une asymptote verticale.
L'explication de ce phénomène se trouve à la page 61 de ce document:
http://eumat.sourceforge.net/documentation/euler_fr.pdf |
|
| Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum You cannot attach files in this forum You cannot download files in this forum
|
|