python解决数值计算问题(Python详解π的计算)

在数学界,有这么一个困扰人们多年的问题,至今都有人在研究,那就是大名鼎鼎的——π。

π在数学界十分出名的,圆的面积公式就用到了π,S=πr²,π=3.14相信大家肯定知道吧,有些人或许能背得更多(你能背到几呢?欢迎评论![偷笑])。

但你以为就此结束了吗?目前,人们通过超级计算机算到了π的第808亿位,可是你知道他们是用什么方法算的吗?

今天,就给大家科普科普,以及用Python实现一下。

1、BBP公式

BBP公式,又称贝利-波尔温-普劳夫公式,具体公式如下:

python解决数值计算问题(Python详解π的计算)(1)

这公式看起来很复杂,实际就是求和公式的简化,原式子:

k=0

π=[1/(16^k)]*[4/(8^k 1)-2/(8^k 4)-1/(8*k 5)-1/(8*k 6)]

k=1

π =[1/(16^k)]*[4/(8^k 1)-2/(8^k 4)-1/(8*k 5)-1/(8*k 6)]

k=2

π =[1/(16^k)]*[4/(8^k 1)-2/(8^k 4)-1/(8*k 5)-1/(8*k 6)]

k=3

……

k=无限

π =[1/(16^k)]*[4/(8^k 1)-2/(8^k 4)-1/(8*k 5)-1/(8*k 6)]

这个用Python实现十分简单:

k=0 times=1000 pi=0 for i in range(times): pi =(1/pow(16,k))*(4/(8*k 1)-2/(8*k 4)-1/(8*k 5)-1/(8*k 6)) k =1

pi就代表π

k是从0~times

times是k的最大值

π=3.141592653589793

不知大家学了decimal标准库了没有

import decimal a=decimal.Decimal(1.23456789) b=decimal.Decimal(3.141592653589793) decimal.getcontext().prec=20 print(a*b)

结果可以精确小数点后20位

我们也可以将π精确化,顺便加计时:

import decimal as dec import time start=time.time() k=0 times=1000 pi=0 for i in range(times): pi =(1/pow(16,k))*(4/(8*k 1)-2/(8*k 4)-1/(8*k 5)-1/(8*k 6)) k =1 end=time.time() pi=dec.Decimal(pi) dec.getcontext().prec=20 print("pi:" str(pi)) print("time:" str(end-start))

pi=3.141592653589793115997963468544185161590576171875

这是个万能公式![思考]

2、蒙特卡罗算法

python解决数值计算问题(Python详解π的计算)(2)

步骤如下:

如图所示的单位正方形和圆,随机抛洒点在正方形里,计算每个点到圆心的距离(0,0),从而得出点在圆内或圆外,用园内点数除以总点数就是π/4值,点个数越大越,π越精准。

这里有个小知识:

求二维坐标轴中任意一点到(0,0)点的距离=根号(x² y²)

import random import math import time import decimal darts=1000000 hits=0 start=time.time() for i in range(1,darts 1): x,y=random.random(),random.random() dist=math.sqrt(x**2 y**2) if dist<=1: hits =1 pi=4*(hits/darts) pi=decimal.Decimal(pi) decimal.getcontext().prec=20 end=time.time() print("pi:" str(pi)) print("times:" str(end-start))

darts是点数

hits是在圆内的点数

x,y是坐标

dist是到(0,0)的距离

得pi=3.14155199999999990012611306156031787395477294921875

不是很精准,但比较接近了,darts越多越精准。

今天就给大家分享到这里![强]

大家还知道什么计算圆周率π的方法吗?欢迎留言!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页