python计算圆周率_用python计算圆周率Π
一、要求:
1.計(jì)算到圓周率后面越多位越好。
2.用進(jìn)度條顯示計(jì)算的進(jìn)度。
3.要求給出圓周率Π的具體計(jì)算方法和解釋。
二、算法:
1.拉馬努金公式:
2.高斯-勒讓德公式:
設(shè)置初始值:
反復(fù)執(zhí)行以下步驟直到
與
之間的誤差到達(dá)所需精度:
則π的近似值為:
下面給出前三個(gè)迭代結(jié)果(近似值精確到第一個(gè)錯(cuò)誤的位數(shù)):
3.140...
3.14159264...
3.1415926535897932382...
該算法具有二階收斂性,本質(zhì)上說就是算法每執(zhí)行一步正確位數(shù)就會(huì)加倍。
3.波爾文四次迭代式
這個(gè)公式由喬納森·波爾文和彼得·波爾文于1985年發(fā)表的。
bailey-borwein-plouffe算法
這個(gè)公式簡稱BBP公式,由David Bailey, Peter Borwein和Simon Plouffe于1995年共同發(fā)表。它打破了傳統(tǒng)的圓周率的算法,可以計(jì)算圓周率的任意第n位,而不用計(jì)算前面的n-1位。這為圓周率的分布式計(jì)算提供了可行性。
4.丘德諾夫斯基公式
這是由丘德諾夫斯基兄弟發(fā)現(xiàn)的,十分適合計(jì)算機(jī)編程,是目前計(jì)算機(jī)使用較快的一個(gè)公式。
5.萊布尼茨公式
π/4=1-1/3+1/5-1/7+1/9-1/11+……
6.蒙特卡羅法(打鳥法)
一個(gè)正方形內(nèi)部相切一個(gè)圓,圓和正方形的面積之比是π/4。
在這個(gè)正方形內(nèi)部,隨機(jī)產(chǎn)生n個(gè)點(diǎn)(這些點(diǎn)服從均勻分布),計(jì)算它們與中心點(diǎn)的距離是否大于圓的半徑,以此判斷是否落在圓的內(nèi)部。
統(tǒng)計(jì)圓內(nèi)的點(diǎn)數(shù),與n的比值乘以4,就是π的值。理論上,n越大,計(jì)算的π值越準(zhǔn)。
三、算法實(shí)現(xiàn)
以下采用蒙特卡羅法(打鳥法),代碼及圖片如下。
importmathimporttime
scale=10
print("執(zhí)行開始")
t=time.process_time()for i in range(scale+1):
a,b='**'*i,'..'*(scale-i)
c=(i/scale)*100π=4*(4*math.atan(1/5)-math.atan(1/239))print("[{}{}->%{}]".format(a,b,c))
time.sleep(0.1)print(π)print("程序用時(shí):{:.2f}s".format(t))print("執(zhí)行結(jié)束")
運(yùn)行結(jié)果:
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32bit (Intel)] on win32
Type"help", "copyright", "credits" or "license()" formore information.>>>
================= RESTART: C:/Users/Benny/Desktop/打鳥法求圓周率.py =================執(zhí)行開始
[....................->%0.0]
[**..................->%10.0]
[****................->%20.0]
[******..............->%30.0]
[********............->%40.0]
[**********..........->%50.0]
[************........->%60.0]
[**************......->%70.0]
[****************....->%80.0]
[******************..->%90.0]
[********************->%100.0]
3.1415926535897936
程序用時(shí):0.11s
執(zhí)行結(jié)束>>>
另外,進(jìn)度條還可以用python的pip庫來實(shí)現(xiàn):
import mathimport timescale=10print("執(zhí)行開始")t=time.process_time()for i in range(scale+1): a,b='**'*i,'..'*(scale-i) c=(i/scale)*100 π=4*(4*math.atan(1/5)-math.atan(1/239)) print("%{:3}[{}->{}]".format(a,b,c)) time.sleep(0.1)print(π)print("{:.2f}s".format(t))print("執(zhí)行結(jié)束")
總結(jié)
以上是生活随笔為你收集整理的python计算圆周率_用python计算圆周率Π的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用python批量下载数据_使用Py
- 下一篇: 360浏览器app怎么设置兼容模式(从3