y1 = sqrt( - 2 ln(x1) ) cos( 2 pi x2 )
y2 = sqrt( - 2 ln(x1) ) sin( 2 pi x2 )
Pour ce on commence avec deux nombres indépendamment pris au hasard
d'un loi uniforme [0,1]: x1 et x2 puis, après les tranformations ci-dessus,
on obtient deux nouveaux nombres (indépendants) dont la distribution est
celle d'une loi Normale centrée et réduite.
Les limites de cette transformation:
1. Elle est très lente en raison du
nombre d'appel à la libraire mathématiques pour les fonctions de trigo
2.
Problèmes de stabilité au voisinage de 0 pour x1, de même que si vous
travaillez sur des séries numériques de l'ordre du million à des fin
de modellisation stochastique.
La forme polaire de la transformation de Box-Muller est à la fois plus rapide et plus robuste numériquement. Voici un exemple d'algorithme:
float x1, x2, w, y1, y2; do { x1 = 2.0 * ranf() - 1.0; x2 = 2.0 * ranf() - 1.0; w = x1 * x1 + x2 * x2; } while ( w >= 1.0 ); w = sqrt( (-2.0 * log( w ) ) / w ); y1 = x1 * w; y2 = x2 * w;ou ranf() donne un nombre tiré au hasard selon une loi uniforme [0,1]. La rapidité de cet algorithme provient de la méthode de calcul du cosinus et du sinus qui est géométrique, elle n'appelle pas de fonctions trigonométriques. Toutefois vu le nombre de fois ou la fonction ranf() est appellée, celle-ci se doit d'être rapide.
Carter, E.F, 1994; The Generation and Application of Random Numbers , Forth Dimensions Vol XVI Nos 1 & 2, Forth Interest Group, Oakland California
Knuth, D.E., 1981; The Art of Computer Programming, Volume 2 Seminumerical Algorithms, Addison-Wesley, Reading Mass., 688 pages, ISBN 0-201-03822-6
MacDougall,M.H., 1987; Simulating Computer Systems, M.I.T. Press, Cambridge, Ma., 292 pages, ISBN 0-262-13229-X
Press, W.H., B.P. Flannery, S.A. Teukolsky, W.T. Vetterling, 1986; Numerical Recipes, The Art of Scientific Computing, Cambridge University Press, Cambridge, 818 pages, ISBN 0-512-30811-9
Rubinstein, R.Y., 1981; Simulation and the Monte Carlo method, John Wiley & Sons, ISBN 0-471-08917-6