If you're seeing this message, it means we're having trouble loading external resources on our website.

Si vous avez un filtre web, veuillez vous assurer que les domaines *. kastatic.org et *. kasandbox.org sont autorisés.

Contenu principal

Nombres aléatoires suivant une loi normale

Disons que nous souhaitons créer un programme qui génère une planète de singes. Il peut générer un millier d'objets Singe, tous avec une taille comprise entre 200 et 300 (c'est une planète de singes ayant tous une taille entre 200 et 300 pixels).
var randomHeight = random(200, 300);
Est-ce que cette méthode réprésente avec précision les tailles des êtres dans le monde réel ? Pensez aux trottoirs des Champs Élysées à Paris, lorsqu'ils sont bondés. Piochez une personne dans la rue. On pourrait croire que sa taille est aléatoire. Néanmoins, ce n'est pas ce genre d'aléatoire que random() produit. Les tailles des gens ne sont pas uniformément distribuées. Il y a beaucoup plus de gens de taille moyenne que de très grands ou de très petits. Pour simuler le phénomène naturel, nous souhaiterions que la plupart de nos singes soient de taille moyenne (250 pixels), et de temps en temps, à l'occasion, très petits ou très grands.
Un ensemble de valeurs qui se concentrent autour d'une moyenne, suit une loi "normale". Celle-ci est aussi appelée loi gaussienne (du nom du mathématicien Carl Friedrich Gauss), ou, loi de Laplace-Gauss (des noms de Pierre-Simon Laplace et Gauss). Ces deux mathématiciens travaillaient en concurrence au début du XIXe siècle sur cette loi.
Lorsqu'on représente graphiquement cette loi, on obtient quelque chose comme suit, appelée courbe en cloche :
Graphe d'une courbe en cloche
Une courbe en cloche standard
La courbe est générée par une fonction mathématique, qui définit la probabilité donnée à chaque valeur d'être tirée, en fonction de l’espérance (souvent noté μ, la lettre grecque mu) et de l'écart type (σ, la lettre grecque sigma).
L'espérance est assez facile à comprendre. Dans le cas de nos tailles, entre 200 et 300, c'est intuitivement la valeur qu'on s'attend à trouver en moyenne (pour nous 250). Par contre, que se passe-t-il si l'écart-type est de 3 ou de 15 ? Qu'est-ce que cela induit pour nos tailles ? Regardons les graphiques. Le graphique ci-dessus montre une loi avec un écart type très petit. La majorité des valeurs se regroupent autour de l'espérance. Le graphique ci-dessous montre une loi avec un écart type plus important. Les valeurs s'étalent plus uniformément autour de la moyenne :
Graphe d'une courbe en cloche avec un écart-type plus grand
Une courbe en cloche avec un ecart type plus important
Vous n'êtes pas familier avec le concept d'"écart type" ? Ce n'est pas un problème ! Vous pouvez étudier les caractéristiques de dispersion séparément, ici, à Khan Academy, avant de continuer à lire ce qui suit.
Voici comment interpréter les résultats : étant donnée une population, 68 % des individus de cette population obtiendront des valeurs correspondant à l'espérance, à un écart type près, 98 %, à deux écarts types près et 99,7 %, à trois écarts types près. Avec un écart type de 5 pixels, seuls 0,3% des singes auront une taille inférieure à 235 pixels (3 écarts types sous l'espérance 250) ou supérieure à 265 pixels (3 écarts types au-dessus de l'espérance 250).

Calculer l'espérance et l'écart type
Considérons une classe de dix étudiants, qui reçoivent les notes suivantes (sur 100), lors d'une épreuve :
85, 82, 88, 86, 85, 93, 98, 40, 73, 83
L'espérance est la moyenne : 81,3
L'écart-type est calculé comme la racine carré de la moyenne des carrés des écarts entre les valeurs et l'espérance. En d'autres termes, prenez les différences entre les valeurs et l'espérance, pour chaque personne, et mettez-les au carré. Calculez la moyenne des ces valeurs (variance) et appliquez la racine carrée dessus pour obtenir l'écart type.
NoteDifférence avec la moyenneDifférence au carré
858581,3 = 3,7(3,7)2 = 13,69
828281,3 = 0,7(0,7)2 = 0,49
888881,3 = 6,7(6,7)2 = 44,89
etc...... ... 
 Variance :228,81
L'écart type est la racine carrée de la variance : 15,13
Vous souhaitez mieux comprendre ce qu'est un écart type ? Vous pouvez étudier les caractéristiques de dispersion en profondeur, ici, à Khan Academy.

Heureusement pour nous, pour utiliser des nombres aléatoires suivant une loi normale dans un programme, ici, à Khan Academy, nous n'avons pas à effectuer les calculs nous-mêmes. À la place, nous pouvons utiliser l'objet Random fourni par ProcessingJS.
Pour utiliser Random, nous devons tout d'abord instancier un nouvel objet Random, en lui passant 1 comme argument. Nous allons appeler cette variable "generator", car elle peut être considérée comme un générateur de nombres aléatoires.
var generator = new Random(1);
Si on veut produire un nombre aléatoire suivant une loi normale (ou gaussienne), à chaque passage dans draw(), il suffit simplement d'appeler la méthode nextGaussian().
var num = generator.nextGaussian();
println(num);
Bon, et maintenant, que faisons-nous avec cette valeur ? Et si nous souhaitions l'utiliser, par exemple, pour affecter une coordonnée x à une forme dessinée sur l'écran ?
La fonction nextGaussian() retourne des nombres aléatoires suivant une loi normale correspondant à : une espérance de zéro et un écart type de un. Mettons que nous voulions une espérance (mean en anglais) de 200 (le pixel central sur la largeur 400 de la zone de dessin) et un écart type (standard deviation en anglais) de 60 pixels. On peut ajuster la valeur du résultat de la fonction en multipliant celle-ci pas notre écart type et en additionnant notre espérance.
var standardDeviation = 60;
var mean = 200;
var x = standardDeviation * num + mean;
On peut maintenant créer notre programme, qui dessine des cercles semi-transparents suivant une loi normale. La zone le plus sombre va se localiser près du centre, où la plupart des valeurs se regrouperont, mais de temps à autre, des cercles seront dessinés plus loin sur la droite ou sur la gauche.

Ce cours sur les "simulations de phénomènes naturels" est dérivé de l'ouvrage "The Nature of Code" de Daniel Shiffman, utilisé sous licence Creative Commons Attribution-NonCommercial 3.0 Unported License.

Vous souhaitez rejoindre la discussion ?

  • leafers ultimate style l'avatar de l’utilisateur Antonin
    Hi ! Please, can someone help me ? I don't understand the 2nd step of the next challenge (gaussian walk), to use the variables when calculating the step size in the walk method. I've got a message : "Now that you've set the standard deviation and mean to some values, figure out how to use them to generate a step size. If you have trouble finding the right expression, the previous tutorial has everything you need to know."
    Thanks !
    (1 vote)
    Default Khan Academy avatar l'avatar de l’utilisateur
  • leafers ultimate style l'avatar de l’utilisateur Antonin
    I did that :
    var generator = new Random(1);
    var standardDeviation = 2;
    var mean = 0;


    var Walker = function() {
    this.x = width/2;
    this.y = height/2;
    };

    Walker.prototype.display = function() {
    strokeWeight(3);
    stroke(0, 0, 0);
    point(this.x, this.y);
    };

    // Randomly move up, down, left, right, or stay in one place
    Walker.prototype.walk = function() {
    var xStepSize = //I think the problem is here
    var yStepSize = // and here
    this.x += xStepSize;
    this.y += yStepSize;
    };

    var w = new Walker();

    draw = function() {
    w.walk();
    w.display();
    };
    (1 vote)
    Default Khan Academy avatar l'avatar de l’utilisateur
Vous comprenez l'anglais ? Cliquez ici pour participer à d'autres discussions sur Khan Academy en anglais.