#Funcion que genera numeros aleatorios
#de la distribucion poisson dada una
#variable lambda
def poissonrandom(lamb):
uniform = random.random()
p = math.exp(-lamb)
suma = p
#print uniform
if suma >= uniform:
return 0
for i in range(1, 10000):
p = p * (float(lamb)/float(i))
#print p
suma = suma + p
if (suma >= uniform):
break
return i
#Funcion que genera toda una secuencia de n
#numeros aleatorios de la distribucion poisson
def secuencia_poisson(n, lamb, n_canastas):
poisson_randoms = []
canastas = []
inferior = 0
superior = 2
file = open("test.dat", "w")
for i in range(n):
poisson_randoms.append(poissonrandom(lamb))
while len(canastas) != n_canastas:
canastas.append([inferior, superior, 0])
inferior = inferior + 2
superior = superior + 2
for i in range(len(poisson_randoms)):
for j in range(len(canastas)):
if poisson_randoms[i] in range(canastas[j][0], canastas[j][1]):
canastas[j][2] = canastas[j][2] + 1
for i in range(len(canastas)):
if canastas[i][2] != 0 :
file.write("%d %d\\n"%(i, canastas[i][2]))
file.close()