Adloun

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 .

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre