如何编写一个执行以下操作的Python函数:以一个总和S = 0开始。然后,进行N次迭代:
移动平均数取什么值?
代码(我知道是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。
答案 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()