李毅 劉凱峰 陳巧琳 胡春兵
摘要:基于Python與蒙特卡洛算法對圓周率進行研究[1],為了實現(xiàn)對圓周率更加準確的計算,需要進行大量的實驗及計算歸納,在實驗中將計算機編程技術(shù)加以運用,能夠有效降低重復(fù)運算次數(shù)[2]。根據(jù)已有二維平面模型拓展為三維模型,使實驗效果更加直觀、立體。
關(guān)鍵詞:Python;蒙特卡洛法;圓周率;三維模型
中圖分類號:TP311? ? ?文獻標識碼:A
文章編號:1009-3044(2022)10-0110-03
1 圓周率的含義及歷史
圓周率Pi是圓的周長與直徑的比值,一般用希臘字母π表示,是普遍存在數(shù)學(xué)及物理學(xué)中的數(shù)學(xué)常數(shù)(約等于3.1415926) ,也是一個無理數(shù)。它是圓的周長與直徑的比值,也等于圓的面積與半徑平方之比,π在準確計算圓周長、圓面積、球體積等問題中扮演著極其重要的角色。
圓周率散發(fā)著經(jīng)久不衰的吸引力,以至于在人類幾千年的歷史長河中,許多數(shù)學(xué)家都在尋求π的值,甚至為之付出了畢生的心血。從古至今,能像圓周率一樣吸引眾多的學(xué)者的數(shù)字屈指可數(shù),計算圓周率的值具有極其重要的含義,查閱歷史上對π的求值程度往往能反映出這個區(qū)域甚至這個時代數(shù)學(xué)發(fā)展的大致水平。
圓周率π在計算界占有重要的地位,縱觀古今中外歷史,我們可以將圓周率計算方法的發(fā)展史大略分為四個時期[3]:實驗時期、幾何法時期、分析法時期、計算機時期。電子計算機的迅速普及使π值計算有了日新月異的進展,計算圓周率π值的方法和求解速度都實現(xiàn)了前所未有的突破,使對π的求值運算步入了一個嶄新的發(fā)展期,圓周率π的數(shù)值達到了難以想象的精度。
2 采用的工具
隨著近代計算機技術(shù)的發(fā)展,蒙特卡洛方法也因自身的特性而得到廣泛應(yīng)用。蒙特卡洛方法現(xiàn)已成為人們處理復(fù)雜的數(shù)據(jù)建模和更高維度問題的主要工具,它在電子學(xué)、生物學(xué)、高分子化學(xué),近似計算等學(xué)科與方法的研究中有著重要的應(yīng)用[4]。通過科學(xué)合理的統(tǒng)計建模,把較為復(fù)雜的研究對象,轉(zhuǎn)化成對隨機數(shù)及其數(shù)字特征的模型及運算,從實質(zhì)上簡化了研究問題,減少了運算的復(fù)雜性,從而獲得最佳的近似解[5]。
大數(shù)定理則是蒙特卡羅法最為關(guān)鍵的數(shù)理基石,如果要使用蒙特卡羅方法來求解問題,則需要重復(fù)大量同樣的實驗,只有實驗次數(shù)足夠多,所獲得的結(jié)論才會接近于真實值。蒙特卡洛法的本質(zhì)是構(gòu)造出一個具有隨機性的問題,并使數(shù)學(xué)上推導(dǎo)出來的結(jié)論正好是所求問題的解,多次重復(fù)實驗后,求得問題的多個解,即可獲得近似的結(jié)果[6]。
現(xiàn)在計算機技術(shù)飛速發(fā)展,編程語言早已是計算機應(yīng)用軟件開發(fā)中不可或缺的一部分,Python編程語言擁有編寫簡潔快速、語法優(yōu)美易讀等優(yōu)勢,在各領(lǐng)域都能看得到它的身影[7]。本文將Python的諸多優(yōu)勢融入實驗過程中,既可以清晰明了地展現(xiàn)出實驗的結(jié)果,又能夠使學(xué)習(xí)者更加注重問題的思想本質(zhì),而不是煩瑣的代碼。除此之外,使用Python 語言還能輕松簡潔地編寫圖形界面程序[8],大大降低了本次研究的難度。
3 二維模型建立
首先通過二維平面圖像來介紹實驗過程,研究表明可以通過圓和正方形的面積計算公式得到圓面積=正方形的面積*(圓中的點/正方形中的點) 。實驗中,本文選擇一個含有內(nèi)切圓且邊長為2的正方形,如圖1所示,向其中投射大量的針,每根針在正方形上形成一個“投點”,依靠投點在內(nèi)切圓的個數(shù)與正方形內(nèi)投點個數(shù)的比值等于Pi/4,再進行簡單地變換就得到Pi的值。為保證實驗結(jié)果的精確度,投點總數(shù)通常較大,由于計算落在圓內(nèi)投點數(shù)顯得較為困難,故可以運用Python及蒙特卡羅算法的來協(xié)助探究。
使用Python代碼來實現(xiàn)上述過程,如圖2所示,需要定義N代表投點的總個數(shù),n代表投射在內(nèi)切圓中小點的總個數(shù),用兩個從-1到1之間的隨機值來代表投點的橫坐標和縱坐標,并創(chuàng)立兩個列表分別來記錄橫坐標和縱坐標的值,然后利用公式求得Pi值并用列表記錄。調(diào)用畫圖工具將實驗過程呈現(xiàn)出來,得到如圖3所示。
接著通過調(diào)用數(shù)學(xué)函數(shù)將列表之中大量的實驗結(jié)果所求Pi值取平均值、方差及標準差,將所有Pi值放進圖中形成散點圖,同時將Pi的平均值畫成一條紅線與Pi的原值(3.1415926) 畫出的黑線相對比就可以發(fā)現(xiàn)紅線和黑線幾乎重疊,如圖5所示,證明所用的方法是比較合理的。如果做一個領(lǐng)域半徑r來剔除出實驗所求Pi的異常值,即可使實驗數(shù)據(jù)更加精確,方差和標準差都會縮小,所求的值離Pi的真實值更接近,如圖6所示。
4 三維模型建立
根據(jù)二維的平面模型可以延伸到三維的立體模型,三維模型的實驗數(shù)據(jù)將比二維模型的實驗數(shù)據(jù)更加合理。與二維模型相比,三維模型具有更多優(yōu)勢,三維模型的空間信息呈現(xiàn)更直接,三維模型給空間信息提供了更為豐富展示空間,而且三維模型在可視化方面有著巨大的優(yōu)勢[9]。實驗中二維模型轉(zhuǎn)化為三維模型即是將邊長為2的正方形內(nèi)切圓轉(zhuǎn)化為邊長為2的正方體內(nèi)切球,如圖8所示,投射針將要從正方體的多個方向發(fā)射,確?!巴饵c”在三維的坐標系下分布均勻。同理,經(jīng)過簡單的數(shù)學(xué)公式推導(dǎo)變化,使用內(nèi)切球和正方體的體積公式與投點在球內(nèi)和正方體內(nèi)的比值等于Pi/6,最后就能得到Pi的值,如圖7中公式所示。
使用Python代碼來實現(xiàn)三維模型的圖像,同樣需要定義N代表投射點的總個數(shù),n則代表投射在內(nèi)切球體之中小點的總個數(shù),用三個從-1到1之間的隨機值來代表投點所在的坐標(即x軸,y軸和z軸) 就能近似地認為投射在一個邊長為2的正方體內(nèi),并創(chuàng)立三個列表來分別記錄這些坐標,然后利用公式求得Pi值并用列記錄。最后利用畫圖工具將整個實驗過程呈現(xiàn)出來,如圖10所示。
將二維模型求出Pi近似值的方法略做修改即可等價地將三維模型Pi的近似值求出,如圖7中公式所示,利用數(shù)學(xué)函數(shù)將三維模型實驗所求大量Pi值取平均值、方差和標準差,將實驗中產(chǎn)生的大量Pi值都放進圖中形成散點圖,并將這些值的平均值畫成一條紅線與Pi的真實值(3.1415926) 畫出的黑線相對比,如圖11所示。使用相同的坐標刻度,可以清晰地對比二維圖形和三維模型的精確程度。同理,對三維模型實驗數(shù)據(jù)大量Pi值做一個領(lǐng)域半徑r,來剔除異常實驗數(shù)據(jù)值Pi,可以讓數(shù)據(jù)更加精確,方差和標準差都會縮小,所求的平均值離Pi的真實值更接近,如圖12所示。
5 總結(jié)
即使近現(xiàn)代計算機技術(shù)高速發(fā)展,然而對圓周率π的求值并沒有停止,計算仍在繼續(xù),但它已經(jīng)不再被用在日常生活之中,研究的π意義已經(jīng)不再局限于簡單的數(shù)值計算,一方面基于個人的興趣愛好,另一方面被用來檢測計算機性能的好壞以及公式的優(yōu)劣?,F(xiàn)如今,圓周率往往不再是一種被檢驗的對象,而是同最大素數(shù)相類似地被當(dāng)作檢測工具,兩者皆用于檢測設(shè)備的先進程度和算法的優(yōu)劣。
在本次研究中,使二維平面模型轉(zhuǎn)化為三維立體的模型,是秉持逐步向高緯度空間探索的精神。想要探索四維甚至更高維空間,就需要先投影到三維世界來看,將二維模型拓展到三維模型是不可或缺的一部分。人類向高維度的探求是科學(xué)發(fā)展以來的永恒目標,假設(shè)擁有足夠的數(shù)學(xué)知識,從眾多三維模型中得到啟發(fā),極有可能帶動科學(xué)研究邁出一大步。
參考文獻:
[1] 何光.用蒙特卡羅方法計算圓周率的近似值[J].內(nèi)江師范學(xué)院學(xué)報,2008,23(4):14-16.
[2] 王玉華,李嬌,方曙東.基于Python實現(xiàn)圓周率的蒙特卡羅算法的研究[J].池州學(xué)院學(xué)報,2019,33(3):17-18.
[3] 張曉貴.圓周率計算的四個時期[J].遼寧教育學(xué)院學(xué)報,2000,17(5):66-69.
[4] 朱陸陸.蒙特卡洛方法及應(yīng)用[D].武漢:華中師范大學(xué),2014.
[5] 楊筱珊.蒙特卡羅方法在定積分近似計算中的應(yīng)用[J].安順師專學(xué)報(自然科學(xué)版),1998(2):34-40.
[6] 李姣娜.蒙特卡羅方法的原理及在數(shù)值計算方面的應(yīng)用——以定積分為例[J].濰坊工程職業(yè)學(xué)院學(xué)報,2018,31(5):104-108.
[7] 姚建盛,李淑梅.Python在科學(xué)計算中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2016(11):76.
[8] 程麗玲.淺談Python在科學(xué)計算中的應(yīng)用[J].信息系統(tǒng)工程,2018(10):55.
[9]徐鵬飛,丁榆城,張煒,等.基于三維CAD造型內(nèi)螺旋銑刀精確建模[J].中國機械,2019(17):1.
【通聯(lián)編輯:梁書】
收稿日期:2021-11-28
基金項目:四川民族學(xué)院瀘定校區(qū)校園網(wǎng)建設(shè)關(guān)鍵技術(shù)研究(XYZB2009ZB) ;四川民族學(xué)院基于微信小程序的食堂在線預(yù)約系統(tǒng)研究(XYZB2008ZB)
作者簡介:李毅(1990—) ,男,四川巴中人,碩士研究生,助教,研究方向為最優(yōu)化算法。