0

我刚开始编程,这个任务给我带来了很多麻烦。如何更改下面的蒙特卡洛代码(用于曲线下面积)以估计 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()

任何帮助将不胜感激。谢谢你。

4

2 回答 2

3

我不会为你解决这个问题,但我会给你一个提示。考虑在 2x2 正方形中嵌入单位圆,以及如何帮助您估计 π。一旦你弄清楚了,利用固有的对称性来处理四个象限中的一个。

于 2012-12-17T11:29:05.680 回答
0

这是 Monte Carlo 方法的一个常见示例,例如参见Monte Carlo Method的 Wikipedia 页面。仅在一个象限中考虑这个问题,即以 0,0 为中心、半径为 1 的四分之一圆和从 (0,0) 到 (1,1) 的正方形。x=uniform(0,1)如果您在和处随机放置一个点y=uniform(0,1),您可以检查该点是否在四分之一圆内,(x^2.+y^2.)^0.5 <= 1.0。发生这种情况的机会与两个物体的体积比有关。

于 2014-12-05T01:23:37.313 回答