Ahora vamos a utilizar Python para realizar un experimento virtual, es decir, que reproduzca una situación real en la que es difícil realizar experimentos controlados pero también realizar cálculos exactos.
Se trara de escribir un programa que calcule la desviación típica de la riqueza de N personas que juegan a la lotería una tasa r de su patrimonio. El programa presentará una gráfica que muestre el valor de la desviación típica sigma tras T apuestas si el capital inicial de cada apostante es 1/N Meuros.
Para ello, coinviene seguir los siguientes pasos.
Para empezar, debemos asegurarnos de que tenemos implementadas dos funciones:
average(X), que calcula y devuelve el promedio de los valores de una lista X de números
std_dev(X), que calcula y devuelve la desviación típica de una lista X de números
Para ello, conviene reutilizar alguna de las funciones implementadas en el ejercicio 1.
A continuación, implementaremos una función select(X) que, dada la lista de números reales X de tamaño N, elige un valor n al azar en el intervalo [0,N[. La probabilidad de que la función devuelva el valor n debe ser proporcioanl al valor X[n]. Para ello, podemos utizarar la función random del módulo random, que genera un valor aleatorio en el intervalo [0,1[.
import random
def select (X):
N = len(X)
r = random.random() # get random number
acc = [X[0]]
# create cummulative list acc
# until acc[n] >= r * sum(X)
n = 0
while acc[n] < r * sum(X):
# ............
return n
Después, implementaremos otra función, transfer (X, r, n) que devuelve una nueva lista de números reales Z en la que todos los valores disminuyen su valor en un factor r respecto al valor de X correspondiente, salvo Z[n], que es X[n]*(1-r)+r*sum(X).
Finalmente, escribiremos una función simula(X,T, r) que realiza la simulación de T apuestas con una tasa de apuestas r y devolverá una lista S de tamaño T con el valor de la desviación típica tras cada apuesta.
La función principal creará una renta inicial X, promediará los resultados de cada componente de S para para un número de simulaciones M y mostrará en una gráfica la desviación típica como función de t=0,1,...,T.
Para probar el programa con distintos valores de los parámetros N, r, T y M, haremos que el programa los lea de la línea de isntrucciones tal y como se explica en la sección Parámetros de un programa.