Trois lois simulées à la main
Exercice · niveau 2 · mathématiques approfondies (ECG 1re année), chapitre 11 — Informatique et algorithmique · Simuler une loi, estimer une probabilité
Énoncé
Écrire bernoulli(p), puis binomiale(n,p) et geometrique(p) en n'utilisant que rd.random. Comparer les moyennes empiriques aux espérances théoriques.
Corrigé
import numpy.random as rd
def bernoulli(p):
return 1 if rd.random() < p else 0
def binomiale(n, p):
# une binomiale EST une somme de n Bernoulli
return sum(bernoulli(p) for _ in range(n))
def geometrique(p):
# rang du PREMIER succes : on compte jusqu'a reussir
k = 1
while bernoulli(p) == 0:
k = k + 1
return k
N = 100000
print(sum(binomiale(10, 0.3) for _ in range(N)) / N, 10 * 0.3)
print(sum(geometrique(0.2) for _ in range(N)) / N, 1 / 0.2)
Les résultats, sur tirages : environ contre pour la binomiale, et environ contre pour la géométrique.
L'écart attendu. La moyenne empirique de tirages a pour écart-type . Pour la binomiale, , donc ; pour la géométrique, , donc . Les écarts constatés doivent être de cet ordre — trois fois plus grands signalerait une erreur de code.
Chaque fonction traduit une définition, et c'est le point : la binomiale compte des succès, la géométrique attend le premier. Écrire la simulation, c'est vérifier qu'on a compris de quoi la loi parle.
Un avertissement : geometrique boucle tant qu'elle échoue. Pour très petit, le nombre de tours peut devenir énorme — l'espérance vaut .
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.