Skip to content

Instantly share code, notes, and snippets.

@mmngreco
Last active August 29, 2015 14:17
Show Gist options
  • Save mmngreco/a92c727bc91051989f26 to your computer and use it in GitHub Desktop.
Save mmngreco/a92c727bc91051989f26 to your computer and use it in GitHub Desktop.
Simulación por el método de montecarlo, un aproximación al número Pi.
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from __future__ import division
from numba import jit
from random import uniform
from math import *
@jit(nopython=True)
def sim_pi_numba(nn):
n = 10000 # cantidad de valores aleatorios
pi_hat = []
# nn = 1000 numero de veces que repite la simulación
for i in range(nn):
x = []
y = []
dist = []
cond = []
for i in range(n):
x += [uniform(0, 1)] # valores aleatorios de un eje
y += [uniform(0, 1)]
dist += [sqrt((x[i] - 0.5) ** 2 + (y[i] - 0.5) ** 2)] # distancia al centro
for d in dist: # filtramos los que cumplen la condición de círculo
if d > 0.5: continue
cond += [d]
area_o = len(cond) / n # calculamos el área del círculo
pi_i = area_o * 4 # aplicamos la ecuación de pi
pi_hat += [pi_i] # guardamos la estimación de pi de cada simulación
return sum(pi_hat) / len(pi_hat)
sim_pi_numba(1000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment