999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Python求解圓周率的方法

2022-01-24 16:43:16王德貴
電腦報 2022年2期
關鍵詞:程序方法

王德貴

圓周率π和e一樣,都是常用的數學常數,且都是無理數,也稱為超越數。在數學和物理課程中,經常用到π和e兩個常數,也經常會想,它們是怎么算出來的?怎么被發現的呢?今天我們來學習用Python求圓周率π的近似值。

其實圓周率求解方法很多,歸納起來有大致四類方法,故稱“求解圓周率四法”。我們選擇其中兩種來學習。

使用隨機數(或更常見的偽隨機數)來解決很多計算問題的方法,稱為蒙特卡洛法,它是統計模擬方法。當所求解問題是某種隨機事件出現的概率,或者是某個隨機變量的期望值時,通過某種“實驗”的方法,以這種事件出現的頻率估計這一隨機事件的概率,或者得到這個隨機變量的某些數字特征,并將其作為問題的解。主要步驟:構造或描述概率過程;實現從已知概率分布抽樣;建立各種估計量。

正方形內部有一個相切的圓,它們的面積之比是π/4(圖1)。

現在,在這個正方形內部,隨機產生n個點,計算它們與中心點的距離,并且判斷是否落在圓的內部。若這些點均勻分布,則圓周率 PI=4 * m/n, 其中m表示落到圓內投點數,n表示總的投點數。

顯然投點數目越多,數值越精確,誤差越小。于是我們采用循環的方法產生n個(0,1.0)區間上的隨機數,即第一象限內的點,然后判斷在單位圓內的個數m,求得圓周率近似值。

從前面的分析, 得出程序如下。這里用到了隨機函數模塊(random),利用random()生成一個(0,1.0)之間的隨機浮點數(圖2)。

單位圓標準方程為x+y=1:,條件判斷里,“x*x+y*y<=1”表示點(x,y)在圓上或圓內。投入1億個點,某次運行結果為3.1515122。

利用隨機數求圓周率,每次求得的近似值不一定相同。

所謂“割圓術”,是用圓內接正多邊形的面積去無限逼近圓面積并以此求取圓周率的方法。

魏晉時期數學家劉徽在《九章算術注》中為“割圓術”計算圓周率建立了嚴密的理論和完善的算法。約480年,南北朝時期的祖沖之在此基礎上算出圓周率在3.1415926和3.1415927之間,相當于精確到小數第7位,他是第一位將圓周率值計算到小數第7位的科學家。

用割圓術來求解圓周率。可以設置初始正多邊形為正三角形、正方形、正六邊形等等,我們用正六邊形,因為此時圓半徑和邊長相等,計算上簡便一些(圖3)。

如圖3所示,設圓半徑為1,這樣圓面積就是s=πr=π,計算出面積,即求出圓周率。基本思路就是無限的成倍分割,這樣新的正多邊形面積,就是在原正多邊形面積基礎上,每條邊與圓弧之間多了一個等腰三角形,對于正六邊形到正十二邊形的分割中,就是多了6個的?△ABC?面積。下面進行計算。

這樣依次計算下去,正多邊形的面積就會越來越接近圓面積,因此,正多邊形邊數越多,計算越精確。

這里用到了math模塊(數學基本運算庫),應用之前需要導入,有兩種導入方法:(1)import math;(2)from math import* 。兩種導入方法的區別,是Python等級考試四級內容,大家可以注意一下,本文不做贅述。sqrt()是開平方運算(圖4)。

運行程序,輸出結果如圖(圖5):

誤差已經很小了。當然如果邊數小于6,那就按六邊形算的了,所以取值要盡量的大,才會更接近圓周率的真值。

Python默認有效數字為17位,那么如何得到更精確的位數呢?

我們可以利用decimal模塊求解18-100位精度的有效數字,默認值為28位。decimal意思為十進制,提供了十進制浮點運算支持,主要是用來處理要求特別精確的小數。decimal所表示的數是完全精確的,而float浮點數不能使用decimal,因為float浮點數本身就不精確。

getcontext().prec = 50,即設置精度為50位(圖6)。結果如圖7。

從輸出可以看到第一行是28位有效數字,這是默認值。第三行是50位有效數字。第二和第四行,與設置精度無關,因為它們是浮點數轉換過來的,不準確。要想精度提高,必須將數值轉換為字符再輸出。

下面是割圓術基礎上,設定有效數字位數,來求近似值的程序(圖8)。

運行結果(圖9):

如果超過100位呢?那么后面就都用0補充了。更多位也不會有區別了(圖10)。

想要更精確的結果,必須設定小數點后位數,可以先放大多少倍,最后計算結束時再舍去多少位,以保證精度,這個過程稍難,程序如圖11。

運行結果可以看到,可以精確到小數點1000位(圖12)。

大家可以自己驗證,程序可以求出任意位數的小數。你注意到了嗎?程序是把計算結果,轉換為字符串后處理輸出的,這是因為輸出整數時,會自動轉換為科學記數法,不會顯示多于17位的有效數字。

SymPy模塊可以進行符號計算,可以定義符號變量,進行代數運算,以及微分運算、積分運算等。利用evalf()函數傳遞數據。比如要輸出1000位有效數字,則程序為(圖13):

結果如圖14:

從前面的分析和測試中,我們看到求解圓周率的方法很多,精度也不盡相同,一般來說Python默認的17位有效數字已經足夠了,如果需要高精度的結果,需要使用相應的方法。

通過圓周率的計算,我們也更深刻了解了圓周率的發展史。電子計算機的出現,把計算精度提高到了驚人的數量級。現在圓周率最高位數已計算到31.4萬億位,準確地說是31415926535897位,是2019年工程師愛瑪在谷歌云平臺的幫助下完成的。比2016年的紀錄又增加數萬億位。

其實π精度的追求更多的是人類對極限的追求,畢竟十位小數的π就足以使地球周界準確到一英寸以內,三十位小數的π便能使整個可見宇宙的四周準確到連最強大的顯微鏡都不能分辨的一個量。

如果你對此感興趣,可以繼續深入研究,求出更多位數,刷新圓周率計算史上的紀錄,成為一名數學家!

猜你喜歡
程序方法
學習方法
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
主站蜘蛛池模板: 亚洲v日韩v欧美在线观看| 一区二区理伦视频| 狂欢视频在线观看不卡| 亚洲二区视频| 国产区成人精品视频| 97在线免费| 亚洲一级毛片免费看| 免费看a级毛片| 992tv国产人成在线观看| 美女一级毛片无遮挡内谢| 国产日韩精品欧美一区喷| 99re免费视频| 亚洲国产欧洲精品路线久久| 白浆免费视频国产精品视频| 国产成人亚洲毛片| 久久久无码人妻精品无码| 亚洲国产av无码综合原创国产| 亚洲成人网在线播放| 国产96在线 | 69精品在线观看| 国产成人免费| 91在线播放免费不卡无毒| 尤物特级无码毛片免费| 国产在线视频福利资源站| 国产凹凸视频在线观看| 91在线一9|永久视频在线| 国产精品刺激对白在线| 亚洲无码在线午夜电影| 国产中文一区二区苍井空| 强奷白丝美女在线观看| 九九热视频在线免费观看| 欧美日韩另类在线| 国产农村妇女精品一二区| 最新国产网站| 国产精品熟女亚洲AV麻豆| 亚洲综合18p| 国产成人AV大片大片在线播放 | 一边摸一边做爽的视频17国产 | 欧美福利在线播放| 国产成人精品一区二区不卡| 国产菊爆视频在线观看| 欧美亚洲综合免费精品高清在线观看| 亚洲AⅤ综合在线欧美一区| 狼友av永久网站免费观看| 国产美女人喷水在线观看| 高清精品美女在线播放| 亚洲一区波多野结衣二区三区| 91精品日韩人妻无码久久| 久久久91人妻无码精品蜜桃HD| 六月婷婷精品视频在线观看| 丁香六月激情综合| 精品午夜国产福利观看| 无码免费的亚洲视频| 91在线高清视频| 秘书高跟黑色丝袜国产91在线| 一级毛片在线播放免费| 午夜久久影院| 国产亚洲高清在线精品99| 国产91精选在线观看| 高清视频一区| 国产成人AV男人的天堂| 91精品伊人久久大香线蕉| 五月丁香在线视频| 国产精品视频a| 亚洲国产天堂久久综合| 日韩二区三区| 日韩欧美色综合| 国产对白刺激真实精品91| av在线人妻熟妇| 99re这里只有国产中文精品国产精品 | 在线免费a视频| 欧美中文字幕在线视频| 国产亚洲精品97在线观看| 成人免费网站在线观看| 成人免费午夜视频| 国产一级视频久久| 99偷拍视频精品一区二区| 欧美中日韩在线| 无码国内精品人妻少妇蜜桃视频| 亚洲日韩国产精品综合在线观看| 亚洲中文字幕在线精品一区| 久久天天躁狠狠躁夜夜2020一|