Está en la página 1de 7

1

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 Cuntos juegos deben darse antes de que la casa este realmente segura de ir adelante? Este escenario es comn entre los matemticos y se utiliza la estadstica para los clculos. Con MATLAB puede realizarse sin mucha complejidad. Primero utilizamos una expresin 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 funcin 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 lnea limite que no debe pasar para no entrar en bancarrota. La siguiente expresin 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 nmeros 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 funcin 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 =

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 simulacin 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 funcin que calcule la canasta de utilidades para k diferentes pruebas de n juegos cada una.

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 simulacin en las utilidades (valor en negrita) hist(utilidades(100,1000),-40:2:40); axis tight

Nuevamente, otro cambio >> hist(utilidades(100,10000),-40:2:40); axis tight

>> hist(utilidades(1000,10000),-100:10:150); axis tight

>> hist(utilidades(1000,100),-100:10:150); axis tight

>> hist(utilidades(1000,1000),-100:10:150); axis tight

Para generar un vector de utilidades >> vector=[]; >> for i = 1:10 vector=[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

REFERENCIAS: A GUIDE TO MATLAB, MATH WORKS INC. 2003