simulacion montecarlo con matlab
TRANSCRIPT
SIMULACION MONTECARLO CON MATLAB
Considere una casa de juegos (casino) en la cual un jugador apuesta sucesivamente y la casa gana el 51% de veces. La pregunta es ¿Cuántos juegos deben darse antes de que la casa este realmente segura de ir adelante? Este escenario es común entre los matemáticos y se utiliza la estadística para los cálculos. Con MATLAB puede realizarse sin mucha complejidad.
Primero utilizamos una expresión que calcule el conjunto de renta o ganancia de la casa para un juego, basados en un numero aleatorio entre 0 y 1. MATLAB posee la función rand. Si el numero aleatorio es menor o igual que 0.51, la casa gana una unidad, de otro modo si el numero excede 0.51 la casa pierde una unidad. En un juego real cada apuesta puede ser $1, 10, 100, 1000. Por ello es importante que la casa conozca cual es la línea limite que no debe pasar para no entrar en bancarrota.
La siguiente expresión representa lo dicho:
ganancia = sign(0.51 – rand)
Donde ganancia será 1 si la salida de rand es menor que 0.51 y –1 si la salida de rand es mayor que 0.51 y será 0 si la salida rand es exactamente igual a 0.51.
Para simular un conjunto de jugadas, por ejemplo 10 juegos, debemos crear un arreglo de 10 números aleatorios.
ganancia = sign(0.51 – rand(1,10))
La casa en un determinado juego gana 6 veces y pierde 4, en otro gana 7 y pierde 3, y en un tercero gana 5 y pierde 5.
Veamos ahora para un numero de juegos mayor, 100 por ejemplo. Matlab psee la función sum para acumular las ganancias individuales de las apuestas, tal como sigue.
utlidades = sum(sign(0.51-rand(1,100))utlidades =
14
y en otro instante
utilidades=sum(sign(0.51-rand(1,100)))
utilidades =
1
6
en otro
utilidades=sum(sign(0.51-rand(1,100)))
utilidades =
2
y en otro
utilidades=sum(sign(0.51-rand(1,100)))
utilidades =
-4
utilidades=sum(sign(0.51-rand(1,100)))
utilidades =
0
Se observa que en determinados momentos la casa gana y en otros la casa pierde. Lo optimo para la casa es ganar en 51 juegos en promedio para tener ganancias.
Realizamos otra simulación
utilidades=sum(sign(0.51-rand(100,10)))
utilidades =
Columns 1 through 8
-10 12 0 12 10 -14 6 4
Columns 9 through 10
-8 14
Veamos hora una función que calcule la canasta de utilidades para k diferentes pruebas de n juegos cada una.
2
utilidades=inline('sum(sign(0.51-rand(n,k)))','n','k')
utilidades =
Inline function: utilidades(n,k) = sum(sign(0.51-rand(n,k)))
Para n = 100 y k = 100 se puede generar un histograma de diferencias entre –40 y 40 en incrementos de 2.
>> hist(utilidades(100,100),-40:2:40); axis tight
Podemos realizar cambios en los argumentos para la simulación en las utilidades (valor en negrita)
hist(utilidades(100,1000),-40:2:40); axis tight
3
Nuevamente, otro cambio>> hist(utilidades(100,10000),-40:2:40); axis tight
4
>> hist(utilidades(1000,10000),-100:10:150); axis tight
>> hist(utilidades(1000,100),-100:10:150); axis tight
5
>> hist(utilidades(1000,1000),-100:10:150); axis tight
Para generar un vector de utilidades
>> vector=[];>> for i = 1:10vector=[vector,utilidades(1000,100)];end>> hist(vector,-100:10:150); axis tight>> utilidades(1000,10)
ans =
Columns 1 through 9
0 30 8 46 -4 14 -8 -8 24
Column 10
14
6
REFERENCIAS:
A GUIDE TO MATLAB, MATH WORKS INC. 2003
7