对圆的区域执行Python函数

时间:2019-03-09 20:39:09

标签: python

如何编写一个执行以下操作的Python函数:以一个总和S = 0开始。然后,进行N次迭代:

  1. 在单位平方中生成随机点(0
  2. 如果随机点满足x ^ 2 + y ^ 2 <1,则将S加1,否则不添加
  3. 找到点的移动平均值(即,总和S除以到目前为止的迭代次数)

移动平均数取什么值?

代码(我知道是pi):

def area(N=1000):

    '''Approximate area of quarter-circle using a Monte Carlo Method'''
    S = 0
    av = np.zeros(N)
    for j in range(N):
            r = np.random.random(2)
            if r[0]**2 + r[1]**2 < 1:
                    S = S+1
            av[j] = float(S)/(j+1.)
    return av

但是,我不确定如何执行此操作-我可以输入它,并且没有错误,但是我不确定如何获取pi。

3 个答案:

答案 0 :(得分:1)

您不需要存储迭代中的所有值。如果您为N设置较高的值,这将使内存消耗很大:

def area(N):
    '''Approximate area of quarter-circle using a Monte Carlo Method'''
    S = 0
    for j in range(N):
        r = np.random.random(2)
        if np.dot(r,r) < 1:
            S += 1
    return S/N

您可以这样使用:

print(area(10**6))

收益大约:0.784734

答案 1 :(得分:0)

print ((S/N)*4)

对于大量点(N> 10000)

area of the circle/area of the square = No:of points inside the circle/No:of points inside the square

(pi/4)/1 = s/N => pi = 4 * (s/N)

答案 2 :(得分:0)

Numpy only解决方案:

def f(N):
    x = np.random.random(N)
    y = np.random.random(N)
    return (x*x + y*y < 1).mean()