Ingeniera Estadstica Informtica
Estadstica Computacional
METODO DE BOX- MULLER PARA LA GENERACIN
DE VARIABLES ALEATORIAS NORMALES.
Introduccin
El procedimiento general para generar nmeros aleatorios es : primero
generar nmeros aleatorios que se originen a partir de la distribucin
uniforme y luego se les aplica una transformacin que los convierta
en los nmeros aleatorios deseados para que puedan ser utilizados en
la simulacin.
INTRODUCCIN
Variables Aleatoria Normales
Una variable aleatoria X est distribuda normalmente con
media media y varianza , si su funcin de densidad de
probabilidad est dada por :
1
f ( x) =
e
2
( x )2
2 2
Aplicacin del Mtodo:
Sean X y Y variables aleatorias normales unitarias independientes y
sean R y las coordenadas polares del vector ( X , Y ). Es decir:
R2 = X 2 + Y 2
Y
Tan =
X
Como X y Y son independientes, su densidad conjunta es el
producto de sus densidades individuales y por lo tanto est dada por:
Ingeniera Estadstica Informtica
Estadstica Computacional
f ( x, y ) =
1
2
ex
/2
ey
/2
( 1)
f ( x, y ) =
1 (x2 + y2 ) / 2
e
2
Para determinar la densidad conjunta de R 2 y , llammosla f ( d , ),
hacemos el cambio de variables:
d = x 2 + y 2 , = tg
y
x
Vemos que el cambio de variable fue expresado en las dos funciones
en trminos de x y y para luego calcular el Jacobiano. Antes de
calcularlo recordaremos su definicin:
Jacobiano.- Sean x = g(u ,v) y y = h(u ,v) entonces el jacobiano de x y
y con respecto a u y v es como se muestra a continuacin denotado
por:
x
u
( x, y )
=
(u , v )
x
v
y
u
y
v
x y x y
.
.
u u v v
En nuestro caso antes de encontrar el Jacobiano , vamos a calcular
las derivadas parciales de d y con respecto de x y y .
d = x2 + y2
d
= 2x
x
d
= 2y
y
Ingeniera Estadstica Informtica
Estadstica Computacional
= tg
y
x
=
x
y
. 2
y x
1+
x
=
y
1
.
2
y x
1+
x
Luego de haber calculado las derivadas parciales procedemos a
calcular el determinante de ellas, aplicando la definicin anterior del
jacobiano pero con respecto a dos variables x y y.
Entonces nos queda:
2x
J xyf =
( d , )
=
( x, y )
2y
y
. 2
y x
1+
x
1
1
.
2
y x
1+
x
1
1
y
= 2 x.
. 2 y.
. 2
2
2
x
x
y
y
1+
1+
x
x
J xyf = 2
Como es fcil ver que el jacobiano de esta transformacin (es decir,
el determinante de las derivadas parciales de d y con respecto de x y
Ingeniera Estadstica Informtica
Estadstica Computacional
y ) es igual a 2., la ecuacin (1) implica que la funcin de densidad
conjunta de R 2 y est dada por:
f ( d , ) =
1 1 d / 2
e
,
2 2
0 < d < , 0 < < 2
Sin embargo, como esto es igual al producto de una densidad
1 d / 2
e
exponencial con media 2 (a saber,
) y la densidad uniforme
2
en (0, 2) ( a saber, 1/2), esto implica que:
son independientes; R 2 es exponencial con media 2 y se
distribuye uniformemente en (0,2).
R2 y
Como
las variables R y
densidad vienen dadas por:
son independientes, sus funciones de
r2
r2
f (r ) = r exp F (r ) = 1 exp
2
2
R = 2 ln U
f ( ) =
F ( ) =
= 2U
2
2
Ahora podemos generar un par de variables aleatorias normales
estndar independientes X y Y, utilizando R 2 y para generar primero
sus coordenadas polares (X = R Cos
Y = R Sen) y luego
transformarlas de nuevo en coordenadas rectangulares.
Para generar entonces variables aleatorias normales hacemos uso del
Ingeniera Estadstica Informtica
Estadstica Computacional
Mtodo de Box-Muller.
Usamos el siguiente algoritmo :
PASO 1: Generar nmeros aleatorios U1 y U 2
PASO 2: R 2 = 2 log U1 ( y entonces R 2 es exponencial con media 2).
Sea = 2 U2 ( y entonces es uniforme entre 0 y 2 )
PASO 3: Ahora, sean
X =R
Cos = 2 log U1 Cos (2U 2 )
Y=R
Sen = 2 log U 1 Sen (2U 2 )
Las transformaciones dadas por las ecuaciones en el paso 3, se
conocen como transformaciones de Box - Muller. El uso de las
transformaciones de Box Muller para generar un par de normales
unitarias independientes no es eficiente desde el punto de vista
computacional, y la razn est en la necesidad de calcular funciones
trigonomtricas seno y coseno. Sin embargo, hay una manera casual
de evadir esta dificultad mediante un clculo indirecto del seno y el
coseno de un ngulo (opuesto a un clculo directo, el cual genera U
y luego el seno y el coseno de 2U ). Es decir haciendo uso del
Mtodo de Marsaglia.
PROGRAMA DE BOX MULLER: ( En Visual C++)
//METODO DE BOX MULLER
//
#include "stdafx.h"
#include "MLCG.h"
#include "iostream.h"
#include "time.h"
#include "fstream.h"
#include "math.h"
int main(int argc, char* argv[])
{
MLCG u;
MLCG u2;
//cambiar semillin
[Link](12345);
[Link](12345);
double u_1;
double u_2;
double R;
double X;
Ingeniera Estadstica Informtica
Estadstica Computacional
double Y;
double teta;
fstream datos ("[Link]", ios::out);
u_1=u.va_Uniforme() ;
u_2=u2.va_Uniforme() ;
R=-2*log(u_1);//R cuadrado
teta=2*(3,1415)*u_2;
X=sqrt(R)*sqrt(-2*log(u_1))*cos(2*3.1415*u_2);
Y=sqrt(R)*sqrt(-2*log(u_1))*sin(2*3.1415*u_2);
datos<<X<<endl;
datos<<Y<<endl;
return 0;
}
Corrida del Programa:
Estos son los valores generados con el mtodo de Box- Muller
0.440248
2.93865
Ingeniera Estadstica Informtica
Estadstica Computacional
BIBLIOGRAFA:
Sheldon M . Ross, Simulacin, 2da. Edicin ,Prentice H. ,Mxico,1999
pp. 72-75.