simulacion montecarlo con matlab

8
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. 1

Upload: fernando-alvarez

Post on 02-Aug-2015

447 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Simulacion Montecarlo Con Matlab

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

Page 2: Simulacion Montecarlo Con Matlab

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

Page 3: Simulacion Montecarlo Con Matlab

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

Page 4: Simulacion Montecarlo Con Matlab

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

4

Page 5: Simulacion Montecarlo Con Matlab

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

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

5

Page 6: Simulacion Montecarlo Con Matlab

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

Page 7: Simulacion Montecarlo Con Matlab

REFERENCIAS:

A GUIDE TO MATLAB, MATH WORKS INC. 2003

7