mathématiques approfondies (ECG 1re année) · Chapitre 11 · Exercice
Trois lois simulées à la main
Informatique et algorithmique · Simuler une loi, estimer une probabilité · niveau 2
É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 .