无法在Python上准确计算pi

斯图尔特·艾特肯

我是这里的新成员,我将一整天都在努力,直到我努力解决这个问题。

我是Python的新手,以前学习过C ++的编码,并且达到了基础中级水平(这是一个为期10周的大学课程)。

我正在尝试几种迭代技术来计算Pi,但是两者都略有不准确,我不确定为什么。

我在大学里教过的第一种方法-我确定你们中有些人以前见过这种方法。

x=0.0
y=0.0
incircle = 0.0
outcircle = 0.0
pi = 0.0
i = 0
while (i<100000):
    x = random.uniform(-1,1)
    y = random.uniform(-1,1)
    if (x*x+y*y<=1):
        incircle=incircle+1
    else:
        outcircle=outcircle+1
    i=i+1
pi = (incircle/outcircle)
print pi

本质上,它是在两个轴上从-1到+1的平面上的随机(x,y)坐标的生成器。然后,如果x ^ 2 + y ^ 2 <= 1,我们知道该点位于由坐标轴形成的框内半径为1的圆内。

根据点的位置,计数器会增加incircleoutcircle

pi的值就是圆内外的值之比。坐标是随机生成的,因此应该均匀分布。

但是,即使在非常高的迭代值下,Pi的结果也始终在3.65左右。

第二种方法是另一种迭代,该迭代计算边数不断增加的多边形的周长,直到该多边形几乎是一个圆为止,然后,Pi =圆周/直径。(我有点被骗,因为编码中有一个math.cos(Pi)术语,所以看起来我在用Pi查找Pi,但这只是因为您不能轻易地用度数来表示Python上的角度)。但是即使对于高迭代,最终结果似乎仍在3.20左右结束,这也是错误的。代码在这里:

S = 0.0
C = 0.0
L = 1.0

n = 2.0
k = 3.0
while (n<2000):
    S = 2.0**k
    L = L/(2.0*math.cos((math.pi)/(4.0*n)))
    C = S*L
    n=n+2.0
    k=k+1.0

pi = C/math.sqrt(2.0)
print pi

我记得在上C ++课程时,有人告诉我这个问题很常见,这不是由于数学问题,而是由于编码中的某些问题,但是我记不清了。这可能与随机数的产生,使用浮点数的局限性有关,或者实际上与任何事情有关。甚至可能只是我的数学...

谁能想到这个问题是什么?

TL; DR:尝试计算Pi,无论执行多少次迭代,我都可以接近它,但永远不会非常准确。

(哦,另一点-在第二个代码中,有一行显示S = 2.0 ** k。如果我将'n'设置为大于2000的值,则S的值太大而无法处理,并且代码崩溃。我该怎么办?解决这个问题?)

谢谢!

迈克·米勒

您的第一个版本的算法应如下所示:

from __future__ import division, print_function

import sys
if sys.version_info.major < 3:
    range = xrange

import random 


incircle = 0
n = 100000
for n in range(n):
    x = random.random()
    y = random.random()
    if (x*x + y*y <= 1):
        incircle += 1
pi = (incircle / n) * 4
print(pi)

印刷:

3.14699146991

这更近了。增加n以进一步接近pi。

算法仅考虑单位圆的四分之一,即半径为1

四分之一圆的面积的公式为:

area_c = (pi * r **2) / 4

对于包含该圆的正方形的面积:

area_s = r **2

r圆的半径在哪里

现在比率是:

area_c / area_s

替换上面的方程,重新排列,您会得到:

pi = 4 * (area_c / area_s)

前往蒙特卡洛,只需用代表它们的非常高的数字替换这两个区域。通常,这里使用随机投掷飞镖的类比。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与python相比,为什么Javascript无法为科学计算提供准确的结果

来自分类Dev

javascript-Pi更准确的价值?

来自分类Dev

无法在我的PC上正常运行的Python代码在我的Raspberry Pi上无法正常工作

来自分类Dev

无法将R日期序数准确转换为Python

来自分类Dev

无法从Python运行Apache Spark的Pi示例

来自分类Dev

Python pi计算?

来自分类Dev

无法在计算机“。”上启动服务。

来自分类Dev

Flutter-无法获得状态栏高度以准确计算可用屏幕高度

来自分类Dev

Python:使用TensorFlow计算神经网络的准确性

来自分类Dev

度数计算不准确

来自分类Dev

第一个项目pi上的Python 3似乎无法在一开始就正确运行

来自分类Dev

Python-计算arcsin时的不准确性

来自分类Dev

标签令牌生成器不起作用,无法计算损失和准确性

来自分类Dev

使用GPS计算准确的速度

来自分类Dev

与python相比,为什么Javascript无法为科学计算提供准确的结果

来自分类Dev

如何使我的计算更准确

来自分类Dev

使用Math.PI计算在画布上绘制点

来自分类Dev

如何准确计算iOS 8上的硬件解码的FPS?

来自分类Dev

Laravel 4范围无法准确计算数量

来自分类Dev

无法将R日期序数准确地转换为Python

来自分类Dev

MathJax无法使用自定义字体准确计算指数结尾

来自分类Dev

C ++不准确的计算

来自分类Dev

使用多个进程在python中计算pi

来自分类Dev

Python:为什么%r无法准确表示\“与\'上的原始数据

来自分类Dev

Raspberry Pi Zero上的Python非法指令

来自分类Dev

Pygame无法在Raspberry Pi上打开歌曲

来自分类Dev

测量准确的GPU计算时间

来自分类Dev

计算准确的 Ibeacon 距离

来自分类Dev

使用 watchPosition 在 ios 设备上无法获得准确的纬度经度

Related 相关文章

热门标签

归档