1. Introducción a la técnica Monte-
Carlo con Matlab
Prof. Vicente Torres Zúñiga
1V. Torres-Zúñiga
2. 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.
2V. 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.
3V. Torres-Zúñiga
4. Obtener números aleatorios
Método de congruencias: 4 números mágicos
Modulo: m
Multiplicador: a, 0≤a ≤ m,
Incremento: c, 0≤c ≤ m
Semilla: x0
La secuencia se obtiene como:
V. Torres-Zúñiga 4
1 ( )modn nx ax c m
5. Ejemplo: Maple V
m = 1012-11, primo
a = 3x61x491x4756877
c = 0
x0 = 2x5x17x23x47x1249x1399
V. Torres-Zúñiga 5
1 ( )modn nx ax c m
6. RANDU: .
Introducido por IBM
en los 60s.
Secuencia de 1000
núm.
Secuencia de 100,000
núm.
V. Torres-Zúñiga 6
31
1 (65539 )mod 2n nx x c
7. De lo continuo a lo discreto
1
1
( ) ( ) ( )
Nb
ia
i
I f x dx b a f x
N N
7V. Torres-Zúñiga
8. Ejemplo1: Integral simple
function [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);
end
N = 1000*(1:100);
V = [z' exacta+err' exacta-err' exacta*ones(100,1)];
plot(N,V);
xlabel('N')
8V. Torres-Zúñiga
1
1
( )
( ) cos( )
N
i
i
I f x
N N
f x x
11. Velocidad de convergencia
• N forza a hacer más sumas, más tiempo de
máquina
• Disminuir , implica trasformar una función
accidentada a una función constante
4
10
N
11V. Torres-Zúñiga
12. Cómo Mejorar
• Con cambios de
variable
12V. Torres-Zúñiga
1
1
( )
N
i
i
I f x
N N
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
2
A rp
A p
13V. 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 2
0 0 1X Y
14V. 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)]);
15V. 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.785
La 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
16V. 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
17V. 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.
18V. 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 19
20. Gracias por su atención
vicentz@gmail.com
vicente1064.blogspot.com
20V. Torres-Zúñiga