Anda di halaman 1dari 24

2.

Métodos de Monte Carlo


•  Los problemas habituales en Ciencia pueden considerarse deterministas:
son problemas descritos por alguna ecuación matemática, como una
ecuación diferencial, que tienen una única solución.
•  En este tema vamos a estudiar otro tipo de problemas, denominados
aleatorios o estocásticos.
•  Un ejemplo típico es el de la difusión, que se puede ilustrar con el hecho
de depositar una gota de leche en una taza de café: la leche se va
dispersando hasta que ocupe el mismo volumen del café.
•  Si tratásemos de describir este sistema a nivel molecular, tendríamos
aproximadamente 1023 moléculas de leche. Cada molécula sigue una
trayectoria complicada, con tramos rectos y bruscos cambios de
dirección y velocidad.
•  Para describir este sistema habría que escribir las ecuaciones de
movimiento de las 1023 moléculas, lo que daría 1023 ecuaciones
diferenciales.
•  Aún cuando esto fuera posible, la información proporcionada no nos
serviría para entender el proceso de la difusión de la gota de leche:
habría demasiada información no relevante.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
•  Para obtener la información adecuada para este problema, lo mejor es
plantearlo estadísticamente: no nos interesan las trayectorias detalladas
de cada molécula de leche, nos interesa su promedio.
•  Puesto que el número de partículas es muy grande, las desviaciones
respecto a este promedio serán pequeñas y además se pueden estimar
con métodos estadísticos.
•  Un concepto muy importante para describir este problema en términos
estadísticos es el de la aleatoriedad: la trayectoria de una molécula de
leche se puede describir como un camino aleatorio.
•  En un camino aleatorio, el caminante se mueve en trayectorias rectas
durante ciertos intervalos de tiempo, tras los cuales cambia de dirección
aleatoriamente. Esto se cumple para las moléculas de leche.
•  Esto no quiere decir que la trayectoria de una molécula determinada sea
aleatoria. Al contrario, está perfectamente definida por sus condiciones
iniciales y la fuerza de interación durante la colisión.
•  Pero podemos hacer un tratamiento estadístico de estas colisiones, ya
que al ser muy elevado el número de moléculas y de colisiones, dicho
tratamiento es una buena aproximación.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  Un ordenador es un dispositivo completamente determinista: sólo hace
aquello que le ordenamos. ¿Cómo es posible que un ordenador genere
un número aleatorio?
•  Normalmente, los lenguajes de programación incluyen una función para
generar números aleatorios en una secuencia. En realidad, estos
números deberían llamarse pseudo-aleatorios.
•  En C++ existen funciones que generan este tipo de números.
Dependiendo del compilador suelen llamarse “rand”. Generalmente
proporcionan una secuencia de números pseudo-aleatorios entre 0 y el
mayor entero posible, como 231-1. Otros lenguajes de programación
proporcionan números entre 0 y 1.
•  Consideremos una función random que proporcione valores entre 0 y 1.
Cada vez que llamamos a esta función nos da un número distinto, pero
todos los números deben estar uniformemente distribuidos entre el
mínimo y el máximo valor: todos los posibles valores son igualmente
probables.
•  La pregunta que nos surge es: ¿cómo puede generar un ordenador a
través de un lenguaje de programación un número aleatorio?
Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  Existen varios métodos para generar métodos aleatorios desde un
ordenador. Uno de los más extendidos y de los más probados utiliza una
ecuación de la forma:
xn+1 = (axn + b)mod(m)
•  El operador “mod” es el operador módulo o resto, que devuelve el resto
de la división entre el primer y el segundo operando. Los valores más
tipicos de m son 216 y 232.
•  En esta expresión se determina xn+1 a partir del n-ésimo término de la
serie aleatoria. Las constantes a y b deben ser cuidadosamente elegidas
para que el método funcione.
•  Este generador de números aleatorios se llama “generador congruencial
lineal”. Necesita un valor inicial o semilla y, a partir del mismo, va
generando todos los demás.
•  Los compiladores tienen un valor predeterminado para la semilla. Si se
usa este valor, se obtiene la misma secuencia de números cada vez que
se ejecute el programa

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  Por tanto, si se usa el valor predeterminado de la semilla, la secuencia
generada no es muy “aleatoria”: se repite en cada ejecución del problema
y, por tanto, se puede predecir.
•  No obstante, esta semilla por defecto puede ser útil para depurar un
programa que no funcione bien: los errores en el programa se
encuentran más fácilmente cuando los resultados del programa son
reproducibles.
•  Una vez que se está convencido de que el programa funciona
perfectamente, se puede cambiar de semilla y elegir una distinta cada
vez que se ejecute el programa.
•  Los lenguajes de programación tienen una segunda función aleatoria
para generar semillas. En C++ suele llamarse srand y suele ir
acompañada de una variable temporal, de manera que generan un
número en función del reloj del sistema (por ejemplo:
srand(time(NULL)) ).
•  Una vez elegida la semilla, se genera la secuencia con la ecuación
recursiva anterior. La elección de las constantes a y b determina la
eficiencia del método.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  Si los valores de a y b están bien elegidos, la secuencia será realmente
aleatoria, es decir, recorrerá todo el rango posible llenándolo de manera
uniforme, ya que la probabilidad debe ser la misma en todo el intervalo y
no debe haber correlación entre dos términos de la secuencia:
independencia y uniformidad.

•  En la tabla de la siguiente página


se muestran algunos valores de
distintos generadores
congruenciales lineales.

•  En la siguiente figura se muestra


cómo se rellena el espacio con
una buena distribución de
números aleatorios uniformes:

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios

(la constante c corresponde a la b de la expresión anterior. La última


columna muestra el truncamiento que realiza el compilador)

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  No siempre se busca tener una distribución uniforme de números
aleatorios, a veces se necesita una distribución no-uniforme.
•  Por ejemplo, ciertos fenómenos radiactivos están gobernados por la
distribución de Poisson, o la distribución de velocidades de un gas ideal
sigue una distribución de Maxwell.
•  Veremos a continuación cómo se pueden generar números aleatorios que
sigan una cierta distribución no uniforme mediante dos métodos distintos.
•  El primer método se denomina “Método de la transformación”. Este
método utiliza una de las propiedades fundamentales de la Probabilidad.
Sea una colección de variables, {x1,x2,...}, que están distribuidas según
una función, Px(x).
•  Esto quiere decir que la probabilidad de encontrar un valor entre x y x+dx
es Px(x)dx.
•  Ahora supongamos una segunda variable, y, que es función de x: y=f(x).
•  Los valores de la variable y estarán dispuestos según una función Py(y),
de forma que la probabilidad de encontrar un valor entre y e y+dy es
Py(y)dy

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  Entonces se cumple que:
Px (x)dx = Py (y)dy
•  Podemos tomar la colección de valores de x como el resultado de utilizar
la función rand del compilador, de manera que Px(x)=constante=C. Por
tanto, tenemos que:
dx dx
Py (y) = Px (x) =C
dy dy
(las barras de valor absoluto se ponen para asegurar que la probabilidad
es siempre positiva).
•  Por tanto, para generar una secuencia de números según la distribución
Py(y) debemos encontrar la función y=f(x), de forma que la inversa de su
derivada sea Py: −1
dy
∝ Py
dx
−1
•  En general: dy
C =1 → = Py
dx

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  Veamos este método con un ejemplo: vamos a generar números aleatorios
que sigan la distribución de Poisson:
Py (y) = exp(−y)
dx
•  Tenemos que encontrar la función y=f(x) que hace que = e− y
dy
•  Expresando x en función de y e integrando:


−y −y
x= e dy = −e ⇒ x = e− y

•  Ahora despejamos la y para encontrar la relación inversa:


y = − ln(x)
•  Como x está entre 0 y 1, y es mayor que cero.
•  El siguiente paso es tomar una secuencia de números aleatorios, {x1,x2,...}
y calcular para cada uno su correspondiente valor de y, yi=-ln(xi).
•  El conjunto de puntos resultante debería obedecer la ecuación de Poisson.
•  La siguiente figura muestra el resultado para secuencias de distinta
longitud.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios

•  Los cuadrados corresponden a una secuencia de 100 valores, las cruces


a una de 1000 valores, los círculos a una de 10 000 y la línea continua a
una de 100 000. La gráfica es un histograma con un intervalo de
muestreo de 0,2. La frecuencia máxima se normaliza a uno.
Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  En la gráfica anterior se ha conseguido una distribución de Poisson, si
bien hay algo de dispersión, que es mayor cuanto menor sea el tamaño
de la muestra.
•  En ocasiones no es tan fácil encontrar la función f(x) y, por tanto, la
distribución que buscamos no puede ser hallada por métodos analíticos.
•  En esos casos se puede recurrir a un algoritmo conocido como “Método
del rechazo”.
•  En primer lugar generamos una secuencia de números aleatorios
uniformes, {y1,y2,...}. A continuación se trata de generar a partir de esta
secuencia uniforme otra secuencia con una distribución arbitraria. Por
ejemplo, la de la figura:

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  Para ello vamos recorriendo los valores de
la secuencia y los aceptamos o rechazamos
con una probabilidad Py
•  Imaginemos que la probabilidad máxima es 1
y que vamos a decidir si aceptamos o
rechazamos un valor yi cuya probabilidad es,
digamos, 0,2. Py(yi)=0.2
•  De cada 5 veces que encontremos este valor, 4 deberíamos rechazarlo y
1 aceptarlo. ¿Cómo podemos implementar esto en un algoritmo?
•  En primer lugar, generamos un nuevo número aleatorio, Ptest. Este
número va a estar distribuido uniformemente entre 0 y 1.
•  La condición de rechazo la establecemos al comparar este Ptest con Py(yi).
Si Py(yi)<Ptest, entonces rechazamos esta ocurrencia de yi, y si Py(yi)>Ptest,
entonces la aceptamos. En promedio habrá 4 rechazos de cada 5
intentos.
•  Este proceso se repite para todos los valores de la secuencia original,
{y1,y2,...}. Los números aceptados estarán distribuidos de acuerdo a Py.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  En general, la probabilidad de que un cierto número yn no sea rechazado
será proporcional a la altura de la función Py(yn).
•  Este método tiene la ventaja importante de que sólo se necesita el valor
de Py en cada punto. De hecho, Py no tiene por qué ser analítica, podría
ser una función de distribución numérica. Y tampoco tiene por qué ser
una función suave, puede ser todo lo irregular que se quiera.
•  Para demostrar el método del rechazo vamos a generar números
aleatorios distribuidos según una función gaussiana centrada en y=1 y
con anchura, σ=1:
Py = exp ⎡⎣( y − 1) ⎤⎦
2

•  Esta función está normalizada de manera que su máxima probabilidad es


igual a 1, aunque esto no es necesario: Pmax puede tomar cualquier valor.
Eso sí, los valores de Ptest tienen que estar uniformemente distribuidos
entre 0 y Pmax.
•  Ejercicio: Escribir un programa que genere números aleatorios en el
intervalo [-2,4] según la distribución gaussiana anterior por el método del
rechazo. Generar una secuencia de 100, 1000 y 10 000 valores y
representar los correspondientes histogramas.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.1 Generación de números aleatorios
•  Se necesitará:
#include <iostream> /* Voy a leer y escribir datos */
#include <fstream> /* Voy a leer o escribir en ficheros */
#include <math.h> /* Uso el valor absoluto, fabs */
#include <stdlib.h> /* para poder usar srand y rand */
#include <time.h> /* para poder usar la función time*/

•  La variable del sistema INT_MAX, cuyo valor es el máximo número entero


que tiene nuestro sistema. O mejor aún: RAND_MAX.
•  Un array para guardar la distribución (no es estrictamente necesario, se
podrían guardar los valores en un fichero directamente sin almacenarlos
en ninguna variable, pero es recomendable).
•  Para crear el histograma se necesitarán dos arrays, uno para los
intervalos de muestreo y otro para la población de los mismos.
•  La función que contenga la distribución. Conviene expresarla como una
función de C++ para poder cambiarla fácilmente si necesitamos usar el
código para crear otra distribución distinta.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.2 Integración de Monte Carlo
•  Los métodos numéricos para calcular la integral de una función se basan
en dividir el intervalo de interés en varios subintervalos y sumar sus
áreas. Los métodos de Monte Carlo ofrecen un enfoque diferente.
•  Para plantear el problema consideremos una diana para dardos
cuadrada, que contiene una región circular en su interior:

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.2 Integración de Monte Carlo
•  Ahora supongamos que podemos lanzar dardos
sobre el tablero con precisión suficiente para que
todos los dardos caigan en su interior, pero en
posiciones distribuidas aleatoriamente (pero
uniformemente) sobre su superficie.
•  En estas condiciones, la probabilidad de que
un dardo caiga en una determinada región del
tablero debe ser proporcional al área de dicha
región.
•  Por tanto, la fracción de dardos que acaba dentro
de la región circular será proporcional al cociente entre
el área del círculo y el área total del tablero. Este sencillo planteamiento es
la base de la integración mediante el método de Monte Carlo.
•  En el ejemplo de los dardos, la integral de interés es el área del círculo.
Para simular el lanzamiento de dardos, se pueden generar números
aleatorios que corresponderán a los puntos donde caen los dardos.
•  Consideremos en primer lugar sólo un cuadrante, el superior derecho.
Dada la simetría del problema, podremos escalar después a todo el tablero

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.2 Integración de Monte Carlo
•  Supongamos que el cuadrante se extiende en el
rango 0≤x≤1, y 0≤y≤1.
•  Para lanzar un dardo, obtenemos una pareja de
números aleatorios, x e y. A continuación
comprobamos si este punto, (x,y), está dentro
o fuera del círculo, es decir, si cumple la
condición:
y ≤ 1− x 2
•  Se repite este proceso un número grande de
veces, Ntotal. Después contamos el número de veces
que los dardos caen dentro del círculo, Ndentro. El área bajo la curva será
Ndentro/Ntotal multiplicado por el área del cuadrado (que, en este caso, es la
unidad.
•  La implantación de este método se ilustra en la siguiente subrutina, escrita
en basic

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.2 Integración de Monte Carlo

•  En la figura se muestran los


resultados en función del número
de dardos lanzados:

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.2 Integración de Monte Carlo
•  Se ha multiplicado por 4 para obtener el área
del círculo
•  En la figura se muestran los resultados de dos
simulaciones, con un total de 107 puntos
aleatorios cada una como máxmo,
anotándose los resultados parciales en
varios momentos.
•  El resultado numérico tiene algunas fluctuaciones
aunque, a medida que Ntotal crece, se van haciendo
más pequeñas
•  Las dos series diferentes no producen exactamente los mismos
resultados, anque ambas convergen al resultado exacto para valores de
Ntotal grandes.
•  En estadística es muy frecuente que los datos se distribuyan según una
distribución gaussiana. Este tipo de distribuciones se caracterizan por
tener un valor medio y una anchura, y ambas cantidades pueden variar al
aumentar el número total de sucesos, Ntotal.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.2 Integración de Monte Carlo
•  En el caso del área del círculo, todas las
fluctuaciones ocurren alrededor de un valor
central, 𝜋.
•  Este valor central lo podemos tomar como el
valor medio de la distribución asociada. Es
decir, si hiciéramos la integración muchas
veces usando siempre el mismo número de
dardos (el mismo Ntotal), obtendríamos una
serie de resultados cuyo valor medio sería 𝜋.
•  Estos resultados estarían distribuidos alrededor del valor medio con una
dispersión: 1/2
⎡ 1 N intentos
2⎤
σ =⎢ ∑ (i )⎥
I − I
⎣ N intentos i=1 ⎦
donde Nintentos es el número de veces que evaluamos la integral, Ii es el
valor obtenido en el i-ésimo intento, e I es el valor promedio.
•  Por tanto, combinando un número grande de evaluaciones de la integral
obtendremos un valor más preciso que con sólo una evaluación.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.2 Integración de Monte Carlo
1/2
⎡ 1 N intentos

∑ (I −I)
2
σ =⎢ i ⎥
⎣ N intentos i=1 ⎦

•  Aumentar el número de evaluaciones, Nintentos,


con un número de sucesos constante, Ntotal,
es equivalente a aumentar dicho número de
sucesos.
•  El resultado de este análisis es que el error o
imprecisión, σ, de un método aleatorio que da
como resultado una distribución gaussiana, se comporta como 1/(Nintentos)1/2,
ó, lo que es lo mismo, como (Ntotal)-1/2.
•  Por tanto, si se quiere duplicar la precisión tenemos que cuadruplicar el
número de sucesos.
•  Resulta interesante comparar la precisión del método de integración de
Monte Carlo con la del método de Simpson para el mismo número de
sucesos o de puntos, N.
•  Acabamos de ver que la precisión con los métodos de Monte Carlo va como
N-1/2. Veamos qué ocurre con el método de Simpson.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.2 Integración de Monte Carlo
•  En el método de Simpson, en d dimensiones, tenemos que hacer una malla
que contenga N puntos, lo que hace que en cada dimensión habrá N1/d
intervalos.
•  Por tanto, el espaciado en cada dimensión es Δx∼N-1/d. El error numérico
asociado a la regla de Simpson varía como N(Δx)d+2.

N ( Δx ) = N (N )
−1/d d+2
= N ⋅ N −1−2/d = N −2/d
d+2

•  Comparando este resultado con N-1/2 se ve que el método de Simpson es


más preciso hasta d=4, donde se iguala con el de Monte Carlo. Sin
embargo, para más de 4 dimensiones el método de Monte Carlo es más
preciso.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM
2. Métodos de Monte Carlo
2.2 Integración de Monte Carlo

Ejercicio: Escribir un programa que use el método de integración de


Monte Carlo para calcular el volumen de una esfera de radio r=2. Utilizar al
menos 107 eventos. El programa debe proporcionar en pantalla los datos
de número de eventos, volumen y valor de pi con una frecuencia de
muestreo de 0.5 en escala logarítmica de base 10. A continuación se
muestra un ejemplo de posible salida en pantalla:
N: 10, volumen: 32, valor de pi: 3
N: 32, volumen: 36, valor de pi: 3.375
N: 100, volumen: 30.08, valor de pi: 2.82
N: 316, volumen: 31.5949, valor de pi: 2.96203
N: 1000, volumen: 33.664, valor de pi: 3.156
...
Exportar los datos a un fichero para su representación gráfica.

Simulación y métodos numéricos en materiales y nanoestructuras Máster en Materiales Avanzados y Nanotecnologías, UAM

Anda mungkin juga menyukai