+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

莱布尼兹(Leibniz)公式π-这有什么用吗?(蟒蛇)

发布于2020-05-29 22:11     阅读(787)     评论(0)     点赞(20)     收藏(1)


我正在做一个练习,该练习使用莱布尼兹的公式要求一个近似pi值的函数。这些是维基百科上的解释:

在此处输入图片说明

在此处输入图片说明

逻辑思维很容易出现在我身上,但是我没有接受过正规的数学教育,因此我对第二个符号中最左边的符号表示什么有些困惑。我尝试编写代码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记号它是用于以简洁形式表示总和的符号。

因此,您的总和实际上是无限的总和。对于n = 0,第一项是:

(-1)**0/(2*0+1)

这被添加到

(-1)**1/(2*1+1)

然后到

(-1)**2/(2*2+1)

等等,直到永远。该求和在数学上称为收敛和

在Python中,您可以这样编写:

def estimate_pi(terms):
    result = 0.0
    for n in range(terms):
        result += (-1.0)**n/(2.0*n+1.0)
    return 4*result

如果要优化一点,可以避免取幂。

def estimate_pi(terms):
    result = 0.0
    sign = 1.0
    for n in range(terms):
        result += sign/(2.0*n+1.0)
        sign = -sign
    return 4*result

....

>>> estimate_pi(100)
3.1315929035585537
>>> estimate_pi(1000)
3.140592653839794


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/397415/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

20 0
收藏该文
已收藏

评论内容:(最多支持255个字符)