我在做一个练习,要求用莱布尼兹公式求一个近似π值的函数。以下是维基百科上的解释:
逻辑思维对我来说很容易,但我没有受过多少正规的数学教育,所以我有点迷失了,第二个符号中最左边的代表什么。我试图使代码pi = ( (-1)**n / (2*n + 1) ) * 4
,但它返回的是1.9999990000005e-06
,而不是3.14159…,所以我使用了累加器模式(因为指南中的这一章也提到了它们),它工作得很好。不过,我还是忍不住觉得这有点做作,而且考虑到Python关注的是简单性和尽可能缩短程序的长度,可能还有更好的方法。这是完整的代码:
def myPi(n):
denominator = 1
addto = 1
for i in range(n):
denominator = denominator + 2
addto = addto - (1/denominator)
denominator = denominator + 2
addto = addto + (1/denominator)
pi = addto * 4
return(pi)
print(myPi(1000000))
有人知道更好的函数吗?
这里的大写sigma是sigma notation。它是用简明扼要的形式表示总和的符号。
所以你的和实际上是一个无穷的和。n=0的第一项是:
这被添加到
然后去
永远如此。求和在数学上被称为收敛和。
在Python中,您可以这样编写:
如果你想稍微优化一下,你可以避免指数化。
使用纯Python可以执行以下操作:
然后用达到给定精度所需的项数计算
pi
:莱布尼茨公式直接翻译成Python,没有混乱或大惊小怪:
相关问题 更多 >
编程相关推荐