Montecarlo en matlab

Post on 16-Jun-2015

13.569 views 2 download

Transcript of Montecarlo en matlab

V. Torres-Zúñiga 1

Introducción a la técnica Monte-Carlo con Matlab

Prof. Vicente Torres Zúñiga

V. Torres-Zúñiga

Introducción

• En análisis numérico, se conocen como métodos de Montecarlo a una serie de métodos de integración numérica que se basan en la utilización de números pseudoaleatorios.

2

V. Torres-Zúñiga 3

¿Qué es un número pseudo-aleatorio?

Es un número generado en un proceso que parece producir números al azar, pero no lo hace realmente.

Las secuencias de números pseudo-aleatorios no muestran ningún patrón o regularidad aparente desde un punto de vista estadístico, a pesar de haber sido generadas por un algoritmo completamente determinista, en el que las mismas condiciones iniciales producen siempre el mismo resultado.

Los mecanismos de generación de números aleatorios que se utilizan en la mayoría de los sistemas informáticos son en realidad procesos pseudo-aleatorios.

V. Torres-Zúñiga 4

Obtener números aleatorios

Método de congruencias: 4 números mágicosModulo: m Multiplicador: a, 0≤a ≤ m,Incremento: c, 0≤c ≤ mSemilla: x0

La secuencia se obtiene como:

1 ( )modn nx ax c m

V. Torres-Zúñiga 5

Ejemplo: Maple V

m = 1012-11, primo a = 3x61x491x4756877 c = 0x0 = 2x5x17x23x47x1249x1399

1 ( )modn nx ax c m

V. Torres-Zúñiga 6

RANDU: .

Introducido por IBM en los 60s.

Secuencia de 1000 núm.

Secuencia de 100,000 núm.

311 (65539 )mod 2n nx x c

V. Torres-Zúñiga 7

De lo continuo a lo discreto

1

1( ) ( ) ( )

Nb

iai

I f x dx b a f xN N

V. Torres-Zúñiga 8

Ejemplo1: Integral simplefunction [z, err] = montecarlo(a,b) exacta = sin(b) - sin(a);avg = [0 0]; % donde se va a contener <f> <f^2>for N = 1: 100 ; x = a + (b-a)*(rand(1000,1)); term = sum([(cos(x)) (cos(x)).^2])/1000; avg = ((N-1)*avg + term)/N; err(N) = (b-a)*sqrt((avg(2) - avg(1).^2)/1000/N); z(N)=(b-a)*avg(1); endN = 1000*(1:100);V = [z' exacta+err' exacta-err' exacta*ones(100,1)];plot(N,V);xlabel('N')

1

1( )

( ) cos( )

N

ii

I f xN N

f x x

V. Torres-Zúñiga 9

Prueba de estabilidad,intervalo (0,1), 11 veces

N

V. Torres-Zúñiga 10

Diferentes resultados

(0,10)

(0,0.2)

No se nota el efecto aleatorio porque en err(N) se divide entreN la desviación estándar, que produce también la convergencia en err(N)

V. Torres-Zúñiga 11

Velocidad de convergencia

• N forza a hacer más sumas, más tiempo de máquina

• Disminuir s, implica trasformar una función accidentada a una función constante

410N

V. Torres-Zúñiga 12

Cómo Mejorar

• Con cambios de variable

1

1( )

N

ii

I f xN N

V. Torres-Zúñiga 13

2

2

Ejemplo 2: Estimación de p

Sea A el área del un circulo, r el radio del círculo

Para el caso unitario: r=1

2A r

A

V. Torres-Zúñiga 14

Ejemplo 2: Estimación de p (2)

Para generar los puntos utilizamos dos sucesiones de números aleatorios X0 y Y0.

Si queremos saber si un punto pertenece al cuarto de círculo, establecemos, a partir de la relación pitagórica, la condición de pertenencia:

Si se verifica la relación anterior, el punto pertenece al cuarto de círculo (y al cuadrado). De lo contrario pertenecerá sólo al cuadrado.

2 20 0 1X Y

V. Torres-Zúñiga 15

Código a utilizar para encontrar p Nrand = input(‘Cuantos numeros aleatorios '); NInside = 0; for nloops=1:Nrand Xrand = rand; % genera puntos XY aleatorios Yrand = rand; Rrand = Xrand^2 + Yrand^2; % encuentra la distancia al origen if (Rrand < 1) NInside = NInside + 1; end end disp(['Total Generated: ' num2str(Nrand) ' Inside Pts: ' ... num2str(NInside)]); piapprox = 4*NInside/Nrand; disp([' Aproximacion de pi = ' num2str(piapprox)]);

V. Torres-Zúñiga 16

Precisión de método

Para el caso de una simulación con 25 pares de números aleatorios, es decir, para 25 puntos generados, nos dará una fracción tal como 21/25 = 0,840, mientras que el área buscada será:

π r² ¼ = π ¼ = 0.785La precisión del método se mejora utilizando una gran

cantidad de simulaciones, siendo el error del orden del 0.001 cuando se emplean unos 15.000 puntos simulados

V. Torres-Zúñiga 17

Ejemplos de resultados obtenidos

(4)5/10 = 2(4)81/100 = 3.24(4)783/1000 = 3.132(4) 7839/10000 = 3.1356(4) 78462/100000 =3.1385

Tiempo de trabajo:0.05 segundos.

1

1

V. Torres-Zúñiga 18

Conclusiones

• La importancia de este tipo de métodos (Montecarlo) es que abrió la posibilidad de utilizar el azar para cálculos analíticos. Algo que se puede utilizar en la práctica con los ordenadores.

• Es un método numérico de integración lento que se puede mejorar con un cambio adecuado de variables

• En las computadoras, usamos números que parecen aleatorios.

• El método Montecarlo es sencillo de implementar en Matlab.

V. Torres-Zúñiga 19

Para saber más:

• Monte Carlo Simulation in Statistical Physics, K.Binder, D.W. Heermann, Springer, 1997.

• Numerical Methods with MATLAB: A Resource for Scientists and Engineers, G. J. Borse, Inter. Thomson, 1996

V. Torres-Zúñiga 20

Gracias por su atención

vicentz@gmail.com

vicente1064.blogspot.com