发现利用蒙特卡罗PI数字
-
13-09-2019 - |
题
我曾尝试使用蒙特卡洛发现π许多算法。 一种解决方案(在Python)是这样的:
def calc_PI():
n_points = 1000000
hits = 0
for i in range(1, n_points):
x, y = uniform(0.0, 1.0), uniform(0.0, 1.0)
if (x**2 + y**2) <= 1.0:
hits += 1
print "Calc2: PI result", 4.0 * float(hits) / n_points
不幸的是,即使与十亿精度非常不好(的 3.141 ... 强>)。
这是最大精度这种方法可以提供? 我选择蒙特卡洛的原因是,它很容易突破它平行的部分。 有另一种算法为π,很容易碎裂成片,并计算?
解决方案
这是蒙特卡洛的一个典型的例子。但是,如果你想打破圆周率计算到并行的部分,为什么不使用一个无穷级数,并让每个核心需要的范围,再总结的结果,当您去?
其他提示
您的分数误差由sqrt(N)/N = 1/sqrt(N)
去,所以这是一个非常低效的方式来获得精确的估计。此限制是由测量的统计特性设置,并且不能被打
您应该能够获得有关良好的精度floor(log_10(N))/2-1
抛出N
数字。也许-2
只是为了安全起见...
即使在它假设你使用的是真正的RNG或一个足够好的PRNG。
使用的准随机数发生器( http://www.nag.co。英国/ IndustryArticles / introduction_to_quasi_random_numbers.pdf )而不是标准伪RNG。准随机数覆盖区域一体化(你在做什么是MC集成)比更加均匀的伪随机数,从而更好的收敛性。
不隶属于 StackOverflow