0% encontró este documento útil (0 votos)
410 vistas7 páginas

Metodo Box Muller

El documento describe el método de Box-Muller para generar variables aleatorias normales a partir de números aleatorios uniformes. Primero, convierte pares de números aleatorios uniformes en coordenadas polares de una variable bivariada normal. Luego, transforma estas coordenadas de nuevo a coordenadas cartesianas para obtener pares de variables aleatorias normales independientes. El documento explica las ecuaciones matemáticas involucradas y proporciona un ejemplo de código en C++ para implementar el método.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
410 vistas7 páginas

Metodo Box Muller

El documento describe el método de Box-Muller para generar variables aleatorias normales a partir de números aleatorios uniformes. Primero, convierte pares de números aleatorios uniformes en coordenadas polares de una variable bivariada normal. Luego, transforma estas coordenadas de nuevo a coordenadas cartesianas para obtener pares de variables aleatorias normales independientes. El documento explica las ecuaciones matemáticas involucradas y proporciona un ejemplo de código en C++ para implementar el método.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

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.

También podría gustarte