Objectif

Réalisation d'un programme Python pour obtenir par approximation l'aire se trouvant sous une gaussienne. L'activité permet une première approche de la loi normale.

On s'intéresse à l'aire comprise sous la représentation graphique d'une fonction définie sur R\mathbb{R} par :

f(x)=172πe(x170)298\displaystyle f\left(x\right) = \frac{1}{7\sqrt{2\pi}}\,\mathrm{e}^{-\frac{\left(x-170\right)^2}{98}}

Cette fonction étant très complexe à primitiver, nous allons programmer une fonction en Python qui nous permettra d'aboutir à une bonne approximation de la valeur recherchée.

Etude de la fonction

  1. Calculer les limites de la fonction f(x)f\left(x\right) aux bornes de l'ensemble de définition.

  2. limxf(x)=limx+f(x)=0\lim_{x \to -\infty}f\left(x\right) = \lim_{x \to +\infty}f\left(x\right) = 0

  3. Dresser le tableau de variation de la fonction.

  4. On calcule f(x)=172π×2(x170)98e(x170)298\displaystyle f'\left(x\right) = \frac{1}{7\sqrt{2\pi}} \times \frac{-2 \left( x-170 \right)}{98}\,\mathrm{e}^{-\frac{\left(x-170\right)^2}{98}}.

    La fonction est croissante lorsque x<170x \lt 170 et décroissante pour x>170x > 170.

  5. Représenter graphiquement la courbe sur l'intervalle [140;200]\left[140 ; 200\right].

  6. On entre l'expression de la fonction
    Onglet graphique, on obtient une courbe en cloche apparemment symétrique

Approximation par la méthode des rectangles

La surface étudiée est découpée en rectangles d'égale largeur.

On procède à un découpage de la courbe par rectangles de largeur identique dxdx, tout comme sur le dessin ci-contre.

L'objectif est d'obtenir une approximation de la surface comprise sous la courbe entre aa et bb en faisant la somme des aires des rectangles.

  1. Que faut-il faire pour que l'approximation obtenue soit la plus proche possible du résultat recherché ?

  2. Pour que le résultat soit le plus précis possible, il faut augmenter le nombre de rectangles et donc diminuer la largeur de chacun d'entre eux.

  3. On considère l'aire comprise sous la courbe f(x)f\left(x\right) entre deux abscisses aa et bb. Exprimer la largeur dxdx en fonction de aa, bb et le nombre nn de rectangles découpant cet espace.

  4. dx=ban\displaystyle dx = \frac{b-a}{n}

  5. Exprimer en fonction de ff la hauteur du premier rectangle au point d'abscisse aa. Quelle est la hauteur du second rectangle situé au point d'abscisse a+dxa + dx ?

  6. Le premier rectangle à partir du point d'abscisse aa admet pour hauteur f(a)f\left(a\right). Le second rectangle à partir du point d'abscisse a+dxa + dx admet pour hauteur f(a+dx)f\left(a+dx\right).

  7. On propose d'écrire une fonction approx_rect(n,x_inf,x_sup) permettant de calculer l'intégrale d'une fonction f(x)f\left(x\right) (que l'on aura préalablement définie dans une autre fonction) entre deux bornes x_inf et x_sup par un découpage en nn rectangles.

    On utilisera dans ce programme deux variables x, qui évolue entre les deux bornes, et somme, qui stocke la somme des rectangles au cours du calcul. Comment sont initialisées ces deux variables au début du programme ?

  8. Au début du programme, x=x_inf et somme=0.

  9. Compléter l'algorithme suivant afin d'obtenir le résultat souhaité :

    from math import *
    
    def f(x):
      return (1/(7*sqrt(2*pi)))*exp(-((x-170)**2)/98)
    
    def approx_rect(n,x_inf,x_sup):
      somme= ...
      x= ...
      dx= ...
      while(x< ... ):
        somme=somme+dx*f(x)
        x+=dx
      return ...
        
  10. Un script est disponible sur cette page.

Exécution de l'algorithme et loi normale

  1. Quelle valeur obtient-on lorsque l'on exécute le programme pour les valeurs n=5000n=5000, xinf=120x_{inf}=120 et xsup=230x_{sup}=230 ?

  2. Le programme retourne 1.

    La fonction f(x)f\left(x\right) est ce que l'on appelle une fonction de densité, c'est-à-dire qu'il s'agit d'une fonction continue et positive sur un intervalle telle que son intégrale sur cet intervalle est égale à 1. Dans ce cas particulier, la courbe en cloche que l'on obtient lorsque l'on représente graphiquement cette fonction est appelée courbe de Gauss.

    Les courbes de Gauss sont utilisées car elle traduisent une réalité statistique souvent observée sur des grandes populations pour des phénomènes aléatoires : les effectifs se répartissent autour d'une valeur centrale en suivant une courbe en cloche dont on peut connaître l'équation. C'est vrai lorsque l'on s'intéresse à la masse exacte d'un grand nombre de boîtes d'une même conserve, ou à la taille des chats adultes en région parisienne. On dit que leur répartition suit une loi normale.

  3. Dans notre cas, la fonction de densité f(x)f\left(x\right) permet d'étudier la répartition des tailles des adultes dans la population française, de moyenne μ=170\mu = 170 (cm) et d'écart-type σ=7\sigma = 7(cm).

    Comment interpréter le nombre obtenu lorsqu'on a exécuté le programme entre 120 et 230 ?

  4. Cela signifie que l'aire se trouvant sous la courbe est égale à 1. Etant donné qu'il s'agit d'une fonction de densité permettant d'étudier la répartition des tailles dans la population française, on peut supposer que les personnes mesurant entre 120 et 230 cm représentent (approximativement) 100% de la population.

  5. Exécuter le programme pour n=5000n=5000, xinf=μσx_{inf}= \mu - \sigma et xsup=μ+σx_{sup}= \mu + \sigma. Comment interpréter ce résultat ?

  6. L'éxécution de la fonction entre 163 et 170 donne 0,68.

    L'aire se trouvant sous la courbe entre 163 et 177 est égale à environ 0,68. On en déduit qu'approximativement 68% des français mesurent entre 163 et 177 cm.

  7. Même question pour une exécution entre xinf=μ2σx_{inf}= \mu - 2\sigma et xsup=μ+2σx_{sup}= \mu + 2\sigma.

  8. L'exécution de la fonction entre 156 et 184 donne 0,95.

    L'aire se trouvant sous la courbe entre 156 et 184 est égale à environ 0,95. On en déduit qu'approximativement 95% des français mesurent entre 156 et 184 cm.

  9. Rendez-vous maintenant dans l'application Probabilités de la calculatrice : sélectionner Normale dans le menu puis entrer les paramètres μ\mu et σ\sigma définis plus haut. Modifier l'icône en haut à gauche de façon à sélectionner le second dessin, puis encadrer X entre 156 et 184. Et maintenant… admirez !

  10. Sélection du sous-menu
    Sélection du sous-menu
    On retrouve le même résultat que précédemment.

Un peu plus de Python pour les plus rapides !

Ecrire une fonction approx_trapeze(n,x_inf,x_sup) permettant une autre approximation de la surface située sous la courbe par un découpage en trapèzes.

Un script est disponible sur cette page.