Nombres aléatoires et simulation

Dernière mise à jour : 12 Juillet 2001


  1. Introduction

  2. Loi uniforme

    1. Générateurs congruentiels
    2. Générateurs de type "Multiplication avec retenue"

  3. Loi normale

    1. Introduction
    2. Simulation d'une loi normale

  4. Loi multinormale

    1. Introduction
    2. Simulation d'une loi multinormale

  5. Loi multi-lognormale

    1. Introduction
    2. Simulation d'une loi multi-lognormale


I. Introduction


Générer des nombres aléatoires sur ordinateur revient à créer une suite d'entiers :

In+1 = f(In)

où f est une fonction qui doit être choisie judicieusement pour que la répartition des nombres In ne puisse pas être distinguée de ce que donnerait le hasard. On parle alors de nombres pseudo-aléatoires.

La suite peut fournir M nombres aléatoires dans l'intervalle [0, M-1]. M dépend du type des entiers :

La valeur de départ I0, appelée graine (seed), doit être fournie par l'utilisateur. La même graine donnera toujours la même suite de nombres. D'autre part, la suite se reproduit au bout d'un nombre de valeurs appelé période. Cette période doit être la plus grande possible.

Si la fonction f a été correctement choisie, chaque nombre a la même probabilité d'apparaître. On dit que les nombres aléatoires suivent une loi uniforme.

On montre que les autres lois de probabilité (binomiale, normale...) peuvent être simulées à partir de cette loi uniforme.

Nous décrirons ici des méthodes permettant de générer des nombres aléatoires répartis selon :


II. Loi uniforme


II.A. Générateurs congruentiels

C'est la base des générateurs implantés dans les langages de programmation. Ils sont du type :

In+1 = (aIn + c) mod b

avec b = 216 par exemple.

Ces générateurs ont plusieurs inconvénients qui les font déconseiller dans la pratique.


II.B. Générateurs de type "Multiplication avec retenue" (Multiply With Carry, MWC)

Ces générateurs, introduits par George Marsaglia, sont du type :

In+1 = (aIn + cn) mod b
cn+1 = (aIn + cn) div b

a est le multiplicateur, b la base, cn la retenue. On peut prendre c0 = 0.

Un générateur 32 bits peut aussi être obtenu en concaténant 2 nombres de 16 bits. La période est alors égale au produit des périodes des deux générateurs.

Ces générateurs ont de meilleures propriétés que les précédents et sont donc recommandés.


III. Loi normale


III.A. Introduction

La loi normale, notée N(m, s), est caractérisée par sa moyenne m et son écart-type s (ou sa variance s2). Elle est telle que :

La loi N(0, 1) est appelée loi normale réduite. Elle est représentée sur la courbe suivante (courbe de Gauss) :


Figure 1. Loi normale réduite.


III.B. Simulation d'une loi normale

On utilise la méthode de Box-Muller : si x1 et x2 sont deux nombres aléatoires uniformes sur ]0,1[, les nombres y1 et y2 définis par :

suivent la loi normale réduite.

On en déduit que les nombres z1 = m + sy1 et z2 = m + sy2 suivent la loi normale N(m, s).


IV. Loi multinormale


IV.A. Introduction

La loi multinormale correspond à l'extension de la loi normale au cas de n variables x1, x2,... xn. Elle est caractérisée par un vecteur de moyennes m et une matrice de variance-covariance V. On la note N(m, V).


IV.B. Simulation d'une loi multinormale

Pour simuler une loi multinormale N(m, V) de dimension n, on applique l'algorithme suivant :

  1. Soit u un vecteur constitué de n nombres aléatoires indépendants distribués selon la loi normale réduite.
  2. Soit L la matrice triangulaire inférieure résultant de la décomposition de Cholesky de la matrice V (voir cours sur le calcul matriciel).
  3. Le vecteur x = m + Lu suit la loi multinormale N(m, V).

V. Loi multi-lognormale


V.A. Introduction

On dit que le vecteur x suit la loi multi-lognormale LN(m, V), où m désigne le vecteur de moyennes et V la matrice de variance-covariance, si le vecteur tel que :

i = ln(xi)

suit une loi multinormale.


V.B. Simulation d'une loi multi-lognormale

Si x suit la loi multi-lognormale LN(m, V), de dimension n, on définit la variable auxiliaire distribuée selon la loi multinormale L(, ) telle que :

i = ln mi - V°ii

ij = ln [1 + Vij / (mi mj)]

Le vecteur x tel que xi = exp(x°i) suit alors la loi multi-lognormale LN(m, V).



Retour au sommaire