Bonjour, voilà un exercice que j'ai à faire et pour lequel j'éprouve quelques difficultés:
La planche de Galton est un appareil permettant de simuler un schéma de Bernoulli.
Celle proposée est composée de 5 rangées de 1, 2, 3, 4 puis 5 clous. Une blle est lâchée à la verticale du premier clou. A chaque fois qu'elle rencontre un clou, la bille tombe à gauche ou à droite de façon équiprobable. En bas de la planche se trouvent des compartiments numérotés de 0 à 5 pour réceptionner la bille.
A chaque fois que la bille rencontre un clou, on note 0 lorsqu'elle part sur la gauche et 1 quand elle part sur la droite du clou.
On effectue la somme des 5 numéros obtenus au passage des 5 rangées. Cette somme correspond au numéro de compartiment.
a) Voici une fonction incomplète écrite en langage Python qui renvoie la fréquence d'obtention du compartiment numéro k lors de n lancers.
Indiquer l'expression cachée pour f=
b) Utiliser ce programme afin d'obtenir la fréquence de chacun des numéros de compartiments pour 10 000 lancers.
From random import *
Def Simulation (n, k):
Som=0
For i in range (n)
a=randint(0,1)
b= randint(0,1)
c= randint(0,1)
d= randint(0,1)
e= randint(0,1)
S=a+b+c+d+e
If S==k
Som=som+1
f=
return f
c) À chaque rangée de clous on note succès lorsque la nille part à droite. Modéliser cette situation par une épreuve de Bernoulli dont on précisera le paramètre.
d) On note X la variable aléatoire qui donne le nombre de succès obtenus lors du lâcher de la bille. Déterminer la loi de probabilité X
e) Calculer P(X-3), puis comparer le résultat à celui obtenu au a). Expliquer cette différence.
f) Pour chacun des autres compartiments, calculer la probabilité que la bille tombe dans ce compartiment
merci d'avance pour votre aide
bonsoir
devrait y avoir une image à ton énoncé, il me semble.
sur quoi as-tu des difficultés ?
le code python est mal recopié ici, mais que comprends-tu de ce code?
que ne comprends-tu pas ?
à toutes fins utiles, j'insère cette image que j'ai trouvée sur le net,
qui permet de mieux visualiser le déplacement de la bille.
(si la modération souhaite le supprimer par la suite...)
Bonjour,
Il y a bien un dessin avec mon énoncé, je ne savais juste pas comment le joindre
Je bloque sur à peu près tout, surtout pour le programme python, je n'ai vraiment aucune idée de ce qu'il faut que je mette pour "f="
Je ne comprends pas vraiment ce que donne comme résultat ce programme, est ce qu'il donne le nombre dans lequel la bille tombe?
bonjour
avant tout, as-tu bien compris l'énoncé, et à quoi correspond le S dans le programme ?
explique moi davantage ce que tu as compris, ça me servira de base.
pour joindre une image, tu cliques sur le bouton Img sous la fenêtre de saisie,
tu localises l'image sur ton ordi, puis tu cliques sur "ATTACHER"
l'image que j'ai trouvée est pour le cas particulier où n=6, donc 1 rangée de plus que dans ton exo.
mais observe cette image : vois-tu le lien entre l'orientation des 6 flèches et la 'colonne' k=2 où va tomber la bille ?
autre élément de réflexion :
b) Utiliser ce programme afin d'obtenir la fréquence de chacun des numéros de compartiments pour 10 000 lancers.
qu'est-ce qu'une fréquence ? c'est un rapport entre 2 entités
ici, c'est le rapport entre quoi et quoi ?
j'attends ton retour sur toutes ces questions.
Le S dans le programme correspond à la somme des 0 et des 1, donc avec la somme on peut déterminer dans quelle case arrive la bille, ex : 0-1-1-1-0, la somme est 3 donc la bille arrive dans la case 3
ici la fréquence correspond au rapport entre le nombre de fois que revient une case dans laquelle la bille tombe (ex: sur 10 000 lancers la bille arrive 567x dans la case 4) et la deuxième unité je ne sais pas
ok pour S
dans le code : a, b, c, d, e sont des nombres générés aléatoirement, et égaux, soit à 0 soit à 1.
la fréquence = nombre de fois où la bille bille tombe dans le compartiment k / nombre d'expériences (ici, les 10000 lancers simulés)
ainsi
f = ...? / 10000
non ce n'est pas S
S va retourner la somme a+b+c+d+e, i.e. le n° du compartiment obtenu à l'issue d'une seule expérience, pas des 10000.
donc S peut prendre les valeurs de 0 à 5 (valeurs possibles de k);
S ne pourra jamais prendre la valeur 567, par ex., dont tu parlais.
regarde mieux le programme : quelle variable va contenir le nombre de fois où S aura la valeur k ?
oui, som est un compteur
le code qui t'est donné dans l'énoncé permet de calculer le nombre de fois où la bille tombe dans un compartiment k donné.
dans la boucle qui tourne n fois (avec par exemple n = 10000)
>> S retourne le n° du compartiment (pour 1 seule itération)
>> si ce n° S est égal au compartiment k qui nous intéresse,
alors on incrémente le compteur som
==> à la sortie de la boucle, som va donc contenir le nombre de fois où la bille est tombée dans le compartiment k
bien d'accord ?
Je commence à comprendre mais je n'arrive pas à savoir quelle valeur je dois diviser par n pour le programme python
f= som/n ?
b) Utiliser ce programme afin d'obtenir la fréquence de chacun des numéros de compartiments pour 10 000 lancers.
le code a défini seulement la fonction qui permet de calculer ma fréquence pour une valeur k donnée
pour que le programme te retourne cette fréquence, il faut appeler la fonction.
que proposes-tu ?
il m'est demandé d'effectuer le programme et de rentrer les valeurs :
Simulation(10000,3). J'ai effectué le programme et rentré les valeurs demandées mais j'obtiens 0.0 est-ce normal ?
Simulation(10000,3). J'ai effectué le programme et rentré les valeurs demandées mais j'obtiens 0.0 est-ce normal ?
hum... ça peut arriver
--> fais le tourner plusieurs fois de suite
en le faisant tourner plusieurs fois de suite j'ai 0.001...
Pour avoir toutes les fréquences de la valeur k est-ce que je dois donner la som dans le programme ?
j'ai som=0 mais pour avoir toutes les valeurs je dois peut-être remplacé 0 par 5 ?
en le faisant tourner plusieurs fois de suite j'ai 0.001...
(tu as bien saisi 10000, et non pas 100 ou 1000?)
dans l'absolu, on doit avoir un nombre proche de 0.03125.
Pour avoir toutes les fréquences de la valeur k :
2 façons :
- soit tu tapes, dans le corps principal :
Simulation(10000,0),
Simulation(10000,1),
Simulation(10000,2)
.....
Simulation(10000,5)
pas très élégant !
- soit tu construis une ......? pour j qui pourra varier de 0 à 5
j'ai bien vérifié mon programme python et j'ai bien marqué 10 000, j'obtiens encore 0.001
C'est une suite que je peux créer et qui pourra varier de 0 à 5?
pas une suite, une boucle
fais un copier-coller de ton code, que je le vérifie
(mets bien les indentations)
salut à tous , exercice très intéressants , j'ai simulé ça sur vba et ça colle bien avec les valeurs théoriques
si tu utilises un logiciel sur ton ordi, tu peux copier-coller le code,
ou bien faire une capture d'écran (image) que tu mets ici, après l'avoir enregistrée sur le 'bureau' - cf 05-12-21 à 10:03 pour la méthode.
sinon, où tu en es dans ton exo ?
tu as terminé ?
voilà mon programme python
Je n'ai pas terminé mon exercice, je ne comprends pas l'idée de la boucle et encore moins comment la mettre dans python...
Pour les autres questions soit:
c) À chaque rangée de clous on note succès lorsque la nille part à droite. Modéliser cette situation par une épreuve de Bernoulli dont on précisera le paramètre.
L'expérience est constituée de 5 épreuves identiques et indépendantes. A chaque épreuve, le succès est lorsque la bille tombe à droite P(S)=0.5. Cela suit donc bien une loi binomiale.
d) On note X la variable aléatoire qui donne le nombre de succès obtenus lors du lâcher de la bille. Déterminer la loi de probabilité X
J'effectue un tableau avec les 5 épreuves et pour
P(X=0) =0.03125
P(X=1)=0.15625
P(X=2)=0.3125
P(X=3)=0.3125
P(X=4)=0.15625
P(X=5)=0.03125
e) Calculer P(X=3), puis comparer le résultat à celui obtenu au a). Expliquer cette différence.
f) Pour chacun des autres compartiments, calculer la probabilité que la bille tombe dans ce compartiment
Pour ces deux questions, je ne réussis pas, je ne comprends pas l'origine de cette différence et concernant la question f), j'ai l'impression qu'il faut à nouveau faire une loi de probabilité mais ça me paraît illogique car je viens d'en faire une
c) oui, c'est ça
tu peux peut-être rajouter que les issues sont binaires (2 issues possibles seulement) :
0 pour échec, à gauche
1 pour succès, à droite
d) je pense qu'il suffirait d'écrire ici
loi binomiale B(n,p) de paramètres n=5 et p = 0.5
soit B(5,0.5)
puisque la question suivante te demande p(X=3)
e) donc p(X=3)= 0.3125 , oui
f) on te demande de calculer p(X=0) -- puis 1 puis 2 puis 4 et 5
et de comparer ces résultats avec ce qui est retourné par ton programme python
je ne comprends pas l'idée de la boucle et encore moins comment la mettre dans python...
==> et pourtant tu as déjà une boucle dans ta fonction, non ?:
for i in range (n) :
.....
j'appelle de tous mes voeux que tu me montres ton code ! ^^
pour voir ce que tu as écrit dans le corps principal
donc la question f) je l'ai déjà faite quand j'ai calculé p(X=1) etc, je veux dire je n'ai rien d'autres à ajouter ?
Concernant la e), comment j'explique la différence avec le résultat obtenu lors de "Simulation(10000,3)"?
Vous n'avez pas reçu la capture d'écran de mon code ? Je l'ai pourtant mise...je réessaie
Pour créer la boucle avec k, je change juste "for i in range (n) :" en "for i in range (k):"?
je comprends mieux...
1) problème d'indentation dans ta fonction : regarde ce que j'ai fait 05-12-21 à 10:12
2) non, tu dois appeler la fonction DANS le programme, pas à partir de l'interpréteur.
==> juste dessous ta fonction, tape :
print("pour k = 3, probabilité = ", simulation(10000,3))
fais tourner et dis moi
oups l'image était pour un autre message, elle a suivi !
je voulais t'expliquer le principe de la boucle:
voici une boucle (dans la fonction) - ci-dessus !
grâce à l'indentation (décalage),
python comprend que toutes les lignes situées sous l'instruction for seront exécutées dans cette boucle.
cette boucle sera exécutée n fois :
en effet i prendra successivement les valeurs 0, puis 1, puis 2, ... jusqu'à n-1
donc n fois au total
ainsi, si tu passes n=10000 et k = 3 en paramètres, ta boucle tournera 10000 fois pour la valeur k = 3.
----
à présent dans le corps principal, tu dois faire une boucle
qui permette d'appeler la fonction simulation un certain nombre de fois (à toi d'y réfléchir), avec les bons paramètres...
je viens de voir
Pour créer la boucle avec k, je change juste "for i in range (n) :" en "for i in range (k):"?
plus précisément
for i in range (6): ---- i prendra les valeurs de 0 à 5
print(.....)
j'ai lu et relu mon programme python, je l'ai également comparé au vôtre mais je ne trouve pas mon erreur et quand j'essaie j'obtiens toujours et encore 0.0
ma fonction dans python c'est f=som/n?
Bonjour à vous deux,
Jean, ton programme en photo n'est pas très lisible... mais il me semble que tes 2 dernières lignes sont mal "indentées".
Pour envoyer ton programme qui se manipule comme du texte, je te conseille dans l'éditeur de
* sélectionner les lignes du programmes avec la souris
* ensuite tu les copies (Ctrl+C)
Puis tu reviens dans ton message sur l'ïle .
Tu actives les balises "Code" en cliquant sur l'outil marqué </> et entre ces balises [.code][./code], tu colles (Ctrl+V) ton programme.
L'utilisation des balises "Code" permet de conserver les indentations au collage.
Essaye, c'est super.
Ainsi Carita et tous ceux qui suivent ce fil, pourront copier ton programme et aller le coller directement dans leur éditeur Python pour le tester sans avoir à le saisir...
bonjour jeansch
petite remarque amicale : tu ne lis pas ce que j'écris, tu le survoles
j'ai lu et relu mon programme python, je l'ai également comparé au vôtre mais je ne trouve pas mon erreur
et quand j'essaie j'obtiens toujours et encore 0.0
dommage, parce que j'ai montré et signalé à plusieurs reprises où est l'erreur.
tel que tu la montres à 21h08, la boucle dans la fonction simulation ne fera qu'une seule itération
(qu'un seul tour, si tu préfères) : pour le cas i=0.
en effet, d'après ce que stipule ton indentation,
le calcul de f et le 'return' font partie de la boucle for.
donc la boucle démarre avec i=0, et dès qu'on arrive au premier return, on sort de la fonction !
ainsi, il est normal que tu obtiennes une valeur de f nulle ou très proche de 0 :
- soit, lors de la 1ère itération, S est égal à 3 (à k), dans ce cas
som=1 et
f = 1/10000= 0.00001
- soit S n'est pas égal à 3 (à k), dans ce cas
som=0 et
f = 0/10000 = 0.0 en float
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :