Python 3.2蒙特卡罗Pi估计?

时间:2012-12-17 11:18:56

标签: python montecarlo

我刚刚开始编程,这项任务给我带来了很多麻烦。如何更改下面的蒙特卡罗代码(用于曲线下面积)以便估算pi?

from random import uniform
from math import exp

def estimate_area(f, a, b, m, n=1000):
    hits = 0
    total = m * (b - a)
    for i in range(n):
        x = uniform(a, b)
        y = uniform(0, m)
        if y <= f(x):
            hits += 1
    frac = hits / n
    return frac * total

def f(x):
    return exp(-x**2)

def main():
    print(estimate_area(f, 0, 2, 1))

main()

非常感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:3)

我不会为你解决这个问题,但我会给你一个提示。考虑在2x2平方内嵌入unit circle,以及如何帮助您估算π。一旦你搞清楚了,就可以利用固有的对称性来处理四个象限中的一个。

答案 1 :(得分:0)

这是蒙特卡罗方法的常见示例,例如参见Monte Carlo Method上的维基百科页面。 仅在一个象限中考虑这个问题,因此四分之一圆以0,0为中心,半径为1,方形从(0,0)到(1,1)。 如果您在x=uniform(0,1)y=uniform(0,1)的方格中随机添加一个点,则可以检查该点是否在四分之一圆圈(x^2.+y^2.)^0.5 <= 1.0内。 这种情况发生的可能性与两个物体的体积比有关。