Méthode de Box-Muller
La méthode de Box-Muller (George E. P. Box et Mervin E. Muller, 1958[1]) consiste à générer des paires de nombres aléatoires à distribution normale centrée réduite, à partir d'une source de nombres aléatoires de loi uniforme.
La transformation prend communément deux formes.
- La forme « simple » transforme des coordonnées polaires uniformément distribuées en des coordonnées cartésiennes normalement distribuées.
- La forme « polaire » transforme des coordonnées cartésiennes uniformément distribuées dans le cercle unité (obtenues par rejet) en des coordonnées normalement distribuées.
On peut également utiliser la méthode de la transformée inverse pour générer des nombres normalement distribués ; la méthode de Box-Muller est plus précise et plus rapide[1]. On peut également envisager la méthode ziggourat, qui est beaucoup plus rapide.
La méthode polaire est celle utilisée par la bibliothèque standard du C++ du compilateur GCC pour échantillonner des variables de distribution normale[2].
Écritures
Transformation de Box-Muller
Soient et deux variables aléatoires indépendantes uniformément distribuées dans ]0,1].
Soient
et
Alors Z0 et Z1 sont des variables aléatoires indépendantes suivant une loi normale centrée réduite.
Méthode polaire
Cette méthode, due à George Marsaglia (en) et T.A. Bray[3],[4], est basée sur le fait suivant : si est un point choisi uniformément sur le disque unité, alors est une variable uniforme sur le segment , et un point uniforme sur le cercle, tous deux indépendants. Il en résulte, par la transformée de Box-Muller, que
sont des variables aléatoires indépendantes suivant une loi normale centrée réduite.
Le couple est échantillonné par la méthode du rejet. Les variables et sont tirées uniformément et indépendamment sur le segment . On calcule ensuite . Si ou , rejetons-le et choisissons à nouveau un couple , jusqu'à ce que appartienne à .
Explications
La justification de cette transformation vient de la transformation de la mesure de probabilités de la loi normale en coordonnées polaires[5] :
en posant s = r2.
On voit ainsi que les variables S et Θ sont indépendantes (la densité du couple est le produit des densités) et suivent deux lois distinctes :
- : S suit une loi exponentielle de paramètre 1/2.
- : Θ suit une loi uniforme continue sur .
La variable S est alors générée par la méthode de la transformée inverse. Il suffit ensuite d'écrire les égalités et .
Comparaison entre les deux formes
La méthode polaire est une méthode d'échantillonnage à rejet, qui n'utilise qu'une partie des nombres générés par la source aléatoire, mais elle est en pratique plus rapide que la transformation de Box-Muller car elle est plus simple à calculer :
- elle n'utilise pas de fonction trigonométrique, coûteuses en temps de calcul ;
- la génération de nombres aléatoires uniformes est plutôt rapide, il n'est donc pas gênant d'en gaspiller une partie. En moyenne, la part de points rejetés est (1-π/4) ≈ 21,46 %. On génère donc en moyenne 4/π ≈ 1,2732 nombres aléatoires uniformes pour obtenir chaque nombre aléatoire normal.
Notes et références
- George E. P. Box, Mervin E. Muller, « A Note on the Generation of Random Normal Deviates », The Annals of Mathematical Statistics Vol. 29, No. 2 (Jun., 1958), pp. 610-611 DOI:10.1214/aoms/1177706645, JSTOR:2237361
- « c++ - How do distributions of C++11 class transform the underlying generator? », sur Stack Overflow (consulté le )
- (en) G. Marsaglia et T. A. Bray, « A Convenient Method for Generating Normal Variables », SIAM Review, vol. 6, no 3, , p. 260–264 (ISSN 0036-1445 et 1095-7200, DOI 10.1137/1006063, lire en ligne, consulté le )
- Devroye, Luc., Non-uniform random variate generation, Springer-Verlag, , 843 p. (ISBN 978-1-4613-8643-8, 1-4613-8643-8 et 978-1-4613-8645-2, OCLC 696038277, lire en ligne), Chapitre 5
- Sheldon Ross, A First Course in Probability, (2002), p.279-81
- Portail des probabilités et de la statistique