Mathématiques en seconde générale et technologique – Algorithmes

Simulation de N schémas de Bernoulli de taille n

Simuler N échantillons de taille n d'une expérience aléatoire à deux issues. Si p est la probabilité d'une issue et f sa fréquence observée dans un échantillon, calculer la proportion des cas où l'écart entre p et f est inférieur ou égal à \(\frac{1}{\sqrt{n}}\).
from random import random
def schema(n, p) :
    s = []
    for i in range(n) :
        s.append(random() < p)
    return s

def nb_succes(schema) :
    compteur = 0
    for r in schema :
        if r :
            compteur += 1
    return compteur

def N_f_succes(N, n, p) :
    lf = []
    for i in range(N) :
        lf.append(nb_succes(schema(n, p)) / n)
    return lf

import matplotlib.pyplot as plt
from matplotlib import colors
def plot(lf, ld, p, rayon) :
    plt.figure()
    plt.gca().set_ylim([0, 1])
    plt.scatter(range(len(lf)), lf, s=3, c=ld,
                   cmap=colors.ListedColormap(["red", "green"]))
    plt.axhline(p - rayon)
    plt.axhline(p + rayon)
    plt.savefig("figure.svg")

from math import sqrt
def run(N, n, p) :
    lf = N_f_succes(N, n, p)
    rayon = 1 / sqrt(n)
    lr = [p - rayon <= f <= p + rayon for f in lf]
    plot(lf, lr, p, rayon)
    nbs = nb_succes(lr)
    print("proportion : {} / {} ≈ {}".format(nbs, N, nbs / N))

run(1000, 100, 0.4)

proportion : 960 / 1000 ≈ 0.96
Lionel Avon