Simulacion Montecarlo Con Matlab

1 SIMULACION MONTECARLO CON MATLAB Considere una casa de juegos (casino) en la cual un jugador apuesta sucesivamente y

Views 136 Downloads 4 File size 164KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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 ¿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 =

2

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.

3

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

4

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

5

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

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

6

>> 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

Column 10 14

8

46

-4

14

-8

-8

24

7

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