Montecarlo en matlab

20
Introducción a la técnica Monte-Carlo con Matlab Prof. Vicente Torres Zúñiga 1 V. Torres-Zúñiga

Transcript of Montecarlo en matlab

Page 1: Montecarlo en matlab

V. Torres-Zúñiga 1

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

Prof. Vicente Torres Zúñiga

Page 2: Montecarlo en matlab

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

Page 3: Montecarlo en matlab

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.

Page 4: Montecarlo en matlab

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

Page 5: Montecarlo en matlab

V. Torres-Zúñiga 5

Ejemplo: Maple V

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

1 ( )modn nx ax c m

Page 6: Montecarlo en matlab

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

Page 7: Montecarlo en matlab

V. Torres-Zúñiga 7

De lo continuo a lo discreto

1

1( ) ( ) ( )

Nb

iai

I f x dx b a f xN N

Page 8: Montecarlo en matlab

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

Page 9: Montecarlo en matlab

V. Torres-Zúñiga 9

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

N

Page 10: Montecarlo en matlab

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)

Page 11: Montecarlo en matlab

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

Page 12: Montecarlo en matlab

V. Torres-Zúñiga 12

Cómo Mejorar

• Con cambios de variable

1

1( )

N

ii

I f xN N

Page 13: Montecarlo en matlab

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

Page 14: Montecarlo en matlab

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

Page 15: Montecarlo en matlab

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)]);

Page 16: Montecarlo en matlab

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

Page 17: Montecarlo en matlab

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

Page 18: Montecarlo en matlab

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.

Page 19: Montecarlo 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

Page 20: Montecarlo en matlab

V. Torres-Zúñiga 20

Gracias por su atención

[email protected]

vicente1064.blogspot.com