Last active
August 29, 2015 14:17
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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