【发布时间】:2016-11-27 21:26:12
【问题描述】:
我有一个任务,我需要以一种计算有效的方式来近似 Pi。这是我的策略:我使用单位圆、等腰三角形的角平分线和 sin 的定义。我画了一张图:
例如,如果我想使用六边形(6 点/6 边),我只需计算 a:(0.5*sin(2*pi/2*x) 并将其乘以 (2*x)。最后,因为Pi = Circumference/Diameter,那么我的 Pi 近似值 = 多边形周长(因为Diameter = 1)。
基本上:
from math import sin, pi
def computePi(x): #x: number of points desired
p = x*sin(pi/x)
print(p)
computePi(10000)
3.141592601912665
它很有效,而且我认为它的效率很高,不是吗?感谢您的宝贵时间!
编辑:为了避免循环,我使用阿基米德算法重新编写了它,只使用了毕达哥拉斯定理:
代码:
from math import sqrt
def approxPi(x): #x: number of times you want to recursively apply Archmidedes' algorithm
s = 1 #Unit circle
a = None; b = None;
for i in range(x):
a = sqrt(1 - (s/2)**2)
b = 1 - a
print('The approximate value of Pi using a {:5g}-sided polygon is {:1.8f}'.format(6*2**(i),(s*6*2**(i))/2))
s = sqrt(b**2 + (s/2)**2)
【问题讨论】:
-
那么,您使用
pi的值计算pi?嗯 -
如果你要导入 pi,为什么不直接使用呢?
-
实际上,这是一个很好的家庭作业问题(尽管可能在 Stack Overflow 上偏离主题,因为它是工作代码)。可以使用
math.sin(math.radians(y))隐藏圆形度,其中y是以度为单位的适当角度。由于这是近似pi的历史准确方法,因此可以例如将 360 除以 2 的幂,以便可以使用半角公式从第一原理计算出所需的正弦,而无需事先了解pi。 -
@UrielEli 实际上,我可以使用度数而不是弧度:sin(pi/x) = sin(180/x),不是吗?三角函数只是表示直角三角形中比率的函数,不是吗?
-
@JohnColeman 谢谢!使用弧度确实会引入圆度,但度数不会
标签: python python-3.x trigonometry