TD Python MP* Buts du TP L’objet mathématique décrivant le comportement d’un dé (non pipé) à six faces s’appelle une variable aléatoire, suivant une loi dite uniforme sur l’ensemble J1, 6 K. Quelle est l’espérance E de cette loi de probabilité ? Quelle est la variance σ 2 de cette loi ? On souhaite : – faire des simulations de n lancers et évaluer les moyennes obtenues ; – observer cette moyenne lorsque n tend vers +∞ (loi faible des grands nombres) ; – observer la distribution des valeurs sur différents ensembles de 100 lancers (théorème central limite) ; Premières simulations avec Python La bibliothèque random fournit la fonction randint. 1. Écrire une fonction tirage telle que tirage() retourne une valeur parmi J1, 6K, chacune avec probabilité 1/6. 2. Écrire une fonction prenant un entier N > 0 en argument, réalisant N tirages consécutifs (on parle de « run »), et renvoyant la moyenne des résultats obtenus. >>> run(1000) 3.462 >>> run(1000) 3.47 3. Construire un tableau constitué des résultats de 104 runs consécutifs de 102 tirages. 4. Parmi ces 104 runs : – Quelle est la moyenne... des moyennes ? – Quelle est la moyenne maximale qui a été atteinte ? Et la minimale ? – Combien de runs ont fourni une moyenne majorée par 3,4 ? Et minoré par 3,6 ? – Même chose en remplaçant 3,4 et 3,6 par 3 et 4. Loi faible des grands nombres Si on note Yn la variable aléatoire égale à la moyenne après n lancers aléatoires, alors l’espérance de Yn vaut 7/2, et on a même d’après la loi faible des grands nombres : ∀ε > 0, P(|Yn − 7/2| > ε) −→ 0. n→+∞ 1. Écrire une fonction prenant en entrée deux entiers a, b > 0, réalisant un run de a × b tirages, et retournant une liste constituée des moyennes obtenues (depuis le début) tous les b runs. Cette fonction retourne donc une liste de a flottants. Dans l’exemple suivant, on réalise deux runs de 1000 tirages, en notant les résultats intermédiaires tous les 200 tirages. >>> ab_run(5, 200) [3.425, 3.4725, 3.5383333333333336, 3.51875, 3.5089999999999995] >>> ab_run(5, 200) [3.4, 3.48, 3.4599999999999995, 3.47875, 3.501] 1 TD Python MP* 2. Exécuter abrun(10, 10k ) pour k ∈ J3, 6K. 3. Représenter l’évolution de la moyenne lors de n runs. Théorème central limite X1 + ...XN (qui est une variable aléaN toire) après N = 100 tirages. On ne touchera plus à cette valeur de N . Cette moyenne a une espérance E = 7/2 et une variance σ 2 /N . Par ailleurs, puisque 100 ' +∞, le théorème central limite dit que cette loi peut être approchée par une « loi normale » N (E, σ 2 /N ) : √ ! 2 N N (x − E) exp − . N (E, σ 2 /N ) = √ 2σ 2 2πσ 2 On va observer la moyenne Y = 1. Tracer cette loi normale pour x ∈ [0, 6]. 2. Afficher le tableau constitué des résultats de n runs sous forme d’histogramme. Pour cet affichage, on utilisera l’instruction pyplot hist(tableau,nombre de colonnes. Il faut encore normaliser les deux affichages pour les comparer. L’aire de la courbe N est égale à 1. L’histogramme doit lui aussi avoir une aire égale à 1. La somme des hauteurs des colonnes est égale à n. Si l’on choisit 50 colonnes par exemple, la largeur de chacune est égale à l’intervalle ∆X = max(tableau) − min(tableau) divisé par 50. L’aire de l’histogramme est donc égale à n × ∆X/50. 3. Tracer l’histogramme et la courbe n×∆X/50×N sur le même graphe. 4. Observer l’effet d’une augmentation du nombre de runs n. 2
© Copyright 2024