Python项目实践:蒙特卡罗方法计算圆周率
一、數學思維
# CalPi.py n = 100 Pi = 0 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("圓周率值是:{}".format(Pi))輸出: 圓周率值是:3.141592653589793二、工程思維:蒙特卡羅方法(Monte Carlo method)
圓周率:一個與正方形內切的圓的面積與該正方形的面積之商
πrr / 2r*2r = π/4
- 正方形的面積很好計算
- 圓的面積?
- 思考:對于一個區域面積,我們向它撒點或拋飛鏢或扔石子,每一個撒點,它隨機地可能會出現在這個區域中的任何一個位置上。如果我們給出的這個點的數量非常龐大,而且每一個點又盡可能地隨機,那么在圓的內部的點就構成了圓的面積,在整個正方形中的所有撒點就是正方形的面積。通過圓內部點的數量與方形內部點的數量的比值就能夠計算出圓周率
- 正方形內部有一個相切的圓,它們的面積之比是π/4。現在,在這個正方形內部,隨機產生n個點,計算它們與中心點的距離,并且判斷是否落在圓的內部。若這些點均勻分布,則圓周率 π/4 = count/n, 其中count表示落到圓內投點數 n:表示總的投點數。
-
數學思維的前提是需要有計算公式,如果沒有計算公式,就無法使用
-
蒙特卡羅方法是計算思維,抽象的撒點過程,抽象為計算點的數量的過程,并且用計算機通過循環自動化運行,抽象+自動化
-
如果一個問題有數學公式,用公式求解更精確,但很多問題沒有數學規則,比如四色定理并不能通過數學公式來解決,也是用計算機來解決的
-
對一個程序,運行的大部分時間只消耗在20%的代碼上,比如在循環上
三、蒙特卡洛方法的基本思想 -
通常蒙特卡羅方法可以粗略地分成兩類:**一類是所求解的問題本身具有內在的隨機性,借助計算機的運算能力可以直接模擬這種隨機的過程。**例如在核物理研究中,分析中子在反應堆中的傳輸過程。中子與原子核作用受到量子力學規律的制約,人們只能知道它們相互作用發生的概率,卻無法準確獲得中子與原子核作用時的位置以及裂變產生的新中子的行進速率和方向。科學家依據其概率進行隨機抽樣得到裂變位置、速度和方向,這樣模擬大量中子的行為后,經過統計就能獲得中子傳輸的范圍,作為反應堆設計的依據。
-
另一種類型是所求解問題可以轉化為某種隨機分布的特征數,比如隨機事件出現的概率,或者隨機變量的期望值。通過隨機抽樣的方法,以隨機事件出現的頻率估計其概率,或者以抽樣的數字特征估算隨機變量的數字特征,并將其作為問題的解。這種方法多用于求解復雜的多維積分問題。
PS. source, python123.io
總結
以上是生活随笔為你收集整理的Python项目实践:蒙特卡罗方法计算圆周率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何对K8s进行考核?Kuberheal
- 下一篇: Yii2一些方法技巧小记