Retour à la page d'accueilMathématiques · Première (spé maths) · Changer de matière
Commencer gratuitement
Première (spé maths) · Mathématiques
Logique, suites figurées et algorithmique en première · Simulation de variables aléatoires

Expérimentation et simulation

Hugo a un doute sur un jeu de la fête foraine : on lance deux dés, et l'on gagne si la somme est un multiple de 3. Le forain affirme que « ça arrive une fois sur trois ». Hugo ne va pas lancer les dés 10 000 fois à la main. Il peut demander à un ordinateur de le faire pour lui. Mais que peut-on conclure d'une simulation, et avec quelle fiabilité ? C'est ce que nous allons voir.

Simuler une expérience aléatoire

Une simulation remplace une expérience réelle par un programme qui produit des résultats « au hasard ». En réalité, l'ordinateur produit des nombres pseudo-aléatoires, mais ils se comportent comme le hasard dans nos modèles.

En Python, le module random propose deux outils de base :

  • randint(a, b) renvoie un entier de $a$ à $b$ inclus, avec équiprobabilité ;

  • random() renvoie un réel de $[0\,;1[$, « uniformément » réparti.

from random import randint, random

def lancer_de():

    return randint(1, 6)

def pile_face():

    if random() < 1 / 2:   # probabilité 1/2

        return 1      # face

    else:

        return 0      # pile

Pour simuler une épreuve de Bernoulli de paramètre $p$ (succès avec la probabilité $p$, échec sinon), on utilise cette idée : le nombre random() tombe dans $[0\,;p[$ avec la probabilité $p$, car la longueur de cet intervalle vaut $p$.

Pour répéter une épreuve $n$ fois de façon indépendante, on utilise une boucle, et un compteur qui s'incrémente à chaque succès.

Entraîne-toi★☆☆Pas commencé
On simule le lancer d'un dé équilibré à six faces avec la fonction randint(1, 6) du module random. a) Écrire une fonction Python lancer_double() qui renvoie la somme de…

On simule le lancer d'un dé équilibré à six faces avec la fonction randint(1, 6) du module random.

  1. a) Écrire une fonction Python lancer_double() qui renvoie la somme de deux lancers.
  1. b) Donner les valeurs minimale et maximale possibles.
Résoudre
Entraîne-toi★☆☆Pas commencé
On simule une épreuve de Bernoulli de paramètre $p = 0{,}3$ avec random(), qui renvoie un réel de $[0\,;1[$ : le succès correspond à random() < 0.3. a) Écrire une…

On simule une épreuve de Bernoulli de paramètre $p = 0{,}3$ avec random(), qui renvoie un réel de $[0\,;1[$ : le succès correspond à random() < 0.3.

  1. a) Écrire une fonction bernoulli() qui renvoie 1 en cas de succès et 0 sinon.
  1. b) Écrire une fonction somme(n) qui renvoie le nombre de succès pour $n$ répétitions indépendantes.
Résoudre

Simuler une variable aléatoire à partir de sa loi

Soit une variable aléatoire $X$ dont on connaît la loi. Comment la simuler avec random() ? On découpe $[0\,;1[$ en intervalles dont les longueurs sont les probabilités.

Prenons $X$ de loi :

$x_i$ $1$ $2$ $4$
$P(X = x_i)$ $0{,}6$ $0{,}3$ $0{,}1$
Découpage de l'intervalle [0 ; 1[ en trois morceaux de longueurs 0,6 ; 0,3 et 0,1 X = 1 X = 2 X = 4 0 0,6 0,9 1

Si random() tombe dans le premier morceau, on renvoie 1 ; dans le deuxième, 2 ; dans le troisième, 4. Chaque valeur sort bien avec sa probabilité, puisque la probabilité de tomber dans un morceau est sa longueur.

Pour un jeu d'argent, la variable $G$ est le gain algébrique (gain moins mise, négatif en cas de perte). Le jeu est équitable si $E(G) = 0$. Si $E(G) < 0$, le joueur perd en moyenne de l'argent à chaque partie.

Entraîne-toi★★☆Pas commencé
Une variable aléatoire $X$ prend les valeurs $0$, $1$, $5$ avec les probabilités $0{,}5$, $0{,}3$, $0{,}2$. a) Calculer $E(X)$, $V(X)$ et $\sigma(X)$. b) Écrire une…

Une variable aléatoire $X$ prend les valeurs $0$, $1$, $5$ avec les probabilités $0{,}5$, $0{,}3$, $0{,}2$.

  1. a) Calculer $E(X)$, $V(X)$ et $\sigma(X)$.
  1. b) Écrire une fonction Python simuler_X() qui simule $X$ à l'aide de random().
  1. c) Écrire une fonction moyenne(n) qui renvoie la moyenne de $n$ simulations de $X$. Vers quelle valeur doit-elle se rapprocher quand $n$ augmente ?
Résoudre
Entraîne-toi★★☆Pas commencé
Un jeu de la Française des Jeux propose : on mise 2 €, on lance un dé ; si l'on obtient 6, on reçoit 9 € (la mise de 2 € n'est pas rendue en plus), sinon on perd la…

Un jeu de la Française des Jeux propose : on mise 2 €, on lance un dé ; si l'on obtient 6, on reçoit 9 € (la mise de 2 € n'est pas rendue en plus), sinon on perd la mise. On note $G$ le gain algébrique.

  1. a) Donner la loi de $G$ et calculer $E(G)$.
  1. b) Écrire une fonction Python gain_moyen(n) simulant $n$ parties et renvoyant le gain moyen.
  1. c) Que peut-on prévoir pour gain_moyen(100000) ?
Résoudre

Fréquences, moyennes et fluctuation

Simulons 200 lancers d'une pièce équilibrée. On ne trouve presque jamais exactement 100 « face ». Par exemple, 108 « face » donnent une fréquence $\frac{108}{200} = 0{,}54$, soit un écart de $0{,}04$ avec la probabilité théorique $0{,}5$. Si on recommence, on obtient un autre résultat : c'est la fluctuation d'échantillonnage.

Quand le nombre de simulations $n$ augmente, on observe que :

  • la fréquence d'un événement se rapproche de sa probabilité ;

  • la moyenne des valeurs de $X$ se rapproche de l'espérance $E(X)$ ;

  • les fluctuations deviennent de plus en plus petites.

On admet le résultat suivant : si $M_n$ est la moyenne de $n$ simulations indépendantes d'une variable $X$ d'écart type $\sigma$, alors $V(M_n) = \frac{\sigma^2}{n}$, donc

$$\sigma(M_n) = \frac{\sigma}{\sqrt{n}}.$$
Entraîne-toi★☆☆Pas commencé
Sur un tableur, on simule 200 lancers d'une pièce équilibrée et on obtient 108 « face ». a) Calculer la fréquence observée de « face ». b) Calculer l'écart entre cette…

Sur un tableur, on simule 200 lancers d'une pièce équilibrée et on obtient 108 « face ».

  1. a) Calculer la fréquence observée de « face ».
  1. b) Calculer l'écart entre cette fréquence et la probabilité théorique.
Résoudre
Entraîne-toi★★★Pas commencé
On répète $n$ fois la simulation d'une variable $X$ d'espérance $\mu = 2$ et d'écart type $\sigma = 1{,}5$, et on note $M_n$ la moyenne des résultats, avec $M_n$ de…

On répète $n$ fois la simulation d'une variable $X$ d'espérance $\mu = 2$ et d'écart type $\sigma = 1{,}5$, et on note $M_n$ la moyenne des résultats, avec $M_n$ de variance $\frac{\sigma^2}{n}$.

  1. a) Calculer l'écart type de $M_n$ pour $n = 100$ puis $n = 10\,000$.
  1. b) Par quel facteur faut-il multiplier $n$ pour diviser par 10 l'écart type de $M_n$ ?
  1. c) Écrire une fonction Python fluctuation(n, m) qui renvoie la liste de $m$ moyennes de $n$ simulations d'une loi de Bernoulli de paramètre $0{,}5$, et expliquer ce que l'on observe quand $n$ augmente.
Résoudre

Estimer une probabilité ou un nombre par simulation

Loi binomiale en quelques mots

Si l'on répète $n$ fois, de façon indépendante, une épreuve de Bernoulli de paramètre $p$, le nombre $X$ de succès suit la loi binomiale $\mathcal{B}(n\,;p)$. Pour $k$ entier de $0$ à $n$ :

$$P(X = k) = \binom{n}{k} p^k (1-p)^{n-k}, \qquad E(X) = np, \qquad V(X) = np(1-p).$$

Le coefficient $\binom{n}{k}$ compte les chemins de l'arbre qui contiennent $k$ succès.

Estimer une probabilité

Pour estimer $P(A)$, on simule $n$ fois l'expérience et on calcule la fréquence de $A$ : $f = \frac{\text{nombre de fois où } A \text{ est réalisé}}{n}$. Plus $n$ est grand, plus $f$ est proche de $P(A)$.

La méthode de Monte-Carlo

On peut même estimer un nombre qui n'a rien d'aléatoire, comme $\pi$. On tire au hasard des points $(x\,;y)$ dans le carré $[0\,;1]^2$, d'aire 1. Le quart de disque de rayon 1 a pour aire $\frac{\pi}{4}$, donc la probabilité qu'un point y tombe est $\frac{\pi}{4}$. La fréquence $\frac{k}{N}$ de points dans le quart de disque estime $\frac{\pi}{4}$, d'où $\pi \approx \frac{4k}{N}$.

Carré unité et quart de disque de rayon 1 centré à l'origine O 1 1 x² + y² ≤ 1
def monte_carlo(N):

    k = 0

    for i in range(N):

        x = random()

        y = random()

        if x*x + y*y <= 1:

            k = k + 1

    return 4 * k / N
Entraîne-toi★★☆Pas commencé
On estime $\pi$ par la méthode de Monte-Carlo : on tire au hasard $N$ points $(x\,;y)$ dans le carré $[0\,;1]^2$ et on compte le nombre $k$ de points tels que…

On estime $\pi$ par la méthode de Monte-Carlo : on tire au hasard $N$ points $(x\,;y)$ dans le carré $[0\,;1]^2$ et on compte le nombre $k$ de points tels que $x^2 + y^2 \leq 1$.

  1. a) Justifier que la probabilité qu'un point tombe dans le quart de disque est $\frac{\pi}{4}$.
  1. b) Écrire une fonction monte_carlo(N) qui renvoie l'estimation de $\pi$.
  1. c) Avec $N = 5\,000$ et $k = 3\,920$, calculer l'estimation obtenue.
Résoudre
Entraîne-toi★★★Pas commencé
Un candidat répond au hasard à un QCM de 10 questions ; chaque question a 4 réponses dont une seule exacte. Soit $X$ le nombre de bonnes réponses. a) Justifier que $X$…

Un candidat répond au hasard à un QCM de 10 questions ; chaque question a 4 réponses dont une seule exacte. Soit $X$ le nombre de bonnes réponses.

  1. a) Justifier que $X$ suit la loi binomiale $\mathcal{B}(10 ; 0{,}25)$. On rappelle que, si $X$ suit $\mathcal{B}(n ; p)$, alors $P(X=k)=\binom{n}{k}p^k(1-p)^{n-k}$, $E(X)=np$ et $V(X)=np(1-p)$. Calculer $E(X)$ et $V(X)$.
  1. b) Écrire une fonction Python simuler() qui renvoie une valeur de $X$.
  1. c) Écrire une fonction frequence(n) qui estime $P(X \geq 5)$ sur $n$ simulations.
  1. d) Calculer exactement $P(X \geq 5)$ à $10^{-3}$ près et indiquer ce que l'on peut attendre de frequence(10000).
Résoudre
Entraîne-toi★★★Pas commencé
Un joueur lance simultanément deux dés équilibrés. Soit $S$ la somme des faces, $X = 1$ si $S$ est un multiple de 3, $X = 0$ sinon. a) Déterminer la loi de $S$ et…

Un joueur lance simultanément deux dés équilibrés. Soit $S$ la somme des faces, $X = 1$ si $S$ est un multiple de 3, $X = 0$ sinon.

  1. a) Déterminer la loi de $S$ et calculer $E(S)$.
  1. b) Calculer $P(X = 1)$.
  1. c) Écrire une fonction Python qui estime $P(X = 1)$ à partir de $n$ simulations.
  1. d) Pour $n = 1\,000$ simulations, on obtient 352 succès. Calculer la fréquence et la comparer à $P(X=1)$.
Résoudre

L'essentiel

  • randint(a, b) renvoie un entier de $a$ à $b$ inclus ; random() renvoie un réel de $[0\,;1[$. Le test random() < p simule une épreuve de Bernoulli de paramètre $p$.

  • Pour simuler une variable aléatoire, on découpe $[0\,;1[$ en intervalles de longueurs égales aux probabilités (seuils cumulés).

  • Fréquence et moyenne d'un grand nombre de simulations sont proches de la probabilité et de l'espérance, mais fluctuent : $\sigma(M_n) = \frac{\sigma}{\sqrt n}$.

  • Une simulation donne une estimation, jamais une valeur exacte : on distingue le modèle de la réalité.

  • Loi binomiale $\mathcal{B}(n\,;p)$ : $E(X) = np$ et $V(X) = np(1-p)$.

  • Monte-Carlo : $\pi \approx \frac{4k}{N}$, où $k$ est le nombre de points dans le quart de disque.

Voir tous les exercices de cette partie