目录

1、公式法    

2、蒙特卡洛(Monte Carlo)方法


        圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母 π 表示,是一个在数学及物理学中普遍存在的数学常数。日常生活中,通常都用3.14代表圆周率去进行近似计算

        π 是一个无理数,即无限不循环小数。历史上不少数学大师穷一生精力计算其精确近似值。公元480年左右,南北朝时期的数学家祖冲之利用割圆法,将 π 精确到小数点后7位,给出不足近似值3.1415926和过剩近似值3.1415927,还得到两个近似分数值,密率355/113和约率22/7。之后的800年里,其计算出的 π 值都是最准确的。

        随着计算机的出现,π 值计算有了突飞猛进的发展。2021年8月17日,美国趣味科学网站报道,瑞士研究人员使用一台超级计算机,历时108天,将 π 计算到小数点后62.8万亿位,创下该常数迄今最精确值记录。

       本文简要介绍两种方法。

1、公式法    

         1995年,美国三位算法学家 Bailey-Borwein-Plouffe 共同提出一震惊数学界的公式,即著名的BBP公式,将 π 计算公式推向高峰:

         其代码如下:

#圆周率计算公式法

pi=0
N=eval(input())

for k in range(N):
    pi+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))

print(pi)

        当 N 赋值100时,所得 π 值为3.141592653589793,非常精确,随着 N 赋值的增大,可能越来越精确,当然,伴随的是计算时间的延长。

2、蒙特卡洛(Monte Carlo)方法

        蒙特卡洛为地名而非人名,位于赌城摩纳哥,象征概率。该方法由大名鼎鼎的数学家冯·诺伊曼提出,诞生于上世纪40年代美国的“曼哈顿计划”。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。

        鉴于一个正方形内切圆和正方形的面积之比为 π/4,在该正方形内部,随机填充 n 个点(这些点服从均匀分布),若它们与中心点的距离不大于圆的半径,则这些点均落在圆的内部。统计圆内的点数,与 n 的比值乘以4,就是 π 的值。理论上,n 越大,计算的 π 值越准。

         其代码为:

from random import *
seed(100)     #设定种子以固定随机数

dot=0
dots=eval(input('请输入您想填充的点数:')) 

for i in range(1,dots+1):
    x,y=random(),random()
    r=pow(x**2+y**2,0.5)
    if r<=1:
        dot+=1
pi=4*(dot/dots)
print('所得圆周率为:{}'.format(pi))

        当圆内填充点为10000个时,所得 π 值为3.1396,1000000时为3.143964,100000000时则为3.1418574。理论上,填充点数越多,计算的 π 值越精准,随之而来的,则是时间的延长……如果感兴趣,您也可以调用 time.perfcounter() 函数看一下不同填充点数时所需的时间☺。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐