对圆的面积执行Python函数

对圆的面积执行Python函数,python,Python,如何编写执行以下操作的Python函数:从运行的总和S=0开始。然后,对于N次迭代: 在单位平方中生成一个随机点(0

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

  • 在单位平方中生成一个随机点(0
  • 如果随机点满足x^2+y^2<1,则向S添加一个,否则不添加任何内容
  • 求点的运行平均值(即,总和S除以迄今为止的迭代次数)
  • 运行平均值接近什么值

    代码(我推测是pi):

    def区域(N=1000):
    “使用蒙特卡罗方法计算四分之一圆的近似面积”
    S=0
    av=np.零(N)
    对于范围(N)内的j:
    r=np.随机。随机(2)
    如果r[0]**2+r[1]**2<1:
    S=S+1
    av[j]=浮点数/(j+1)
    返回av
    

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

    您不需要存储迭代中的所有值。如果运行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
    
    产量约:
    0.784734

    print ((S/N)*4)
    
    对于非常多的点(N>10000)

    就是

    (pi/4)/1 = s/N => pi = 4 * (s/N)
    
    仅限Numpy的解决方案:

    def f(N):
        x = np.random.random(N)
        y = np.random.random(N)
        return (x*x + y*y < 1).mean()
    
    def(N):
    x=np.random.random(N)
    y=np.随机。随机(N)
    返回值(x*x+y*y<1)。平均值()
    
    您的总和应接近$\frac{\pi}{4}$。由于半径为1的圆的面积为$\pi$,并且您只关心该圆的四分之一,并且您在1x1正方形(完全包含圆的四分之一)的区域内随机拾取,因此您拾取四分之一圆内某点的总次数将为$\frac{\frac{\pi}{4}{1}=\frac{\pi 4}{4}4}$。请查看返回值的最后值
    av
    ,它们应该是最佳估计值。感谢您的帮助。我应该指出我以前实现过:importnumpyasnp
    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)
    
    def f(N):
        x = np.random.random(N)
        y = np.random.random(N)
        return (x*x + y*y < 1).mean()