Adloun

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.