日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python项目实践:蒙特卡罗方法计算圆周率

發布時間:2024/1/1 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:表示總的投點數。

# CalPiV1.py import random import time DARTS = 1000 * 1000 # DARTS是總點數。同時通過下面循環的隨機數確保點都在正方形內 hits = 0.0 start = time.perf_counter() for i in range(1, DARTS + 1): # 使用循環生成隨機數來模擬隨機撒點x, y = random.random(), random.random()dis = pow(x * x + y * y, 0.5)if dis <= 1.0:hits += 1 Pi = 4 * (hits / DARTS) print("圓周率值是:{}".format(Pi)) print("運行時間是:{:.5f}s".format(time.perf_counter() - start))輸出: 圓周率值是:3.140584 運行時間是:1.29082s # CalPiV2.py import random def calpai():n = 1000000 # 總點數r = 1.0x_neg, x_pos = - r, ry_neg, y_pos = - r, rcount = 0 # 統計落到圓內的點數for i in range(0, n):x = random.uniform(x_neg, x_pos)y = random.uniform(y_neg, y_pos)if x*x + y*y <= 1.0:count += 1print((count / n) * 4)calpai()輸出: 3.140096

  • 數學思維的前提是需要有計算公式,如果沒有計算公式,就無法使用

  • 蒙特卡羅方法是計算思維,抽象的撒點過程,抽象為計算點的數量的過程,并且用計算機通過循環自動化運行,抽象+自動化

  • 如果一個問題有數學公式,用公式求解更精確,但很多問題沒有數學規則,比如四色定理并不能通過數學公式來解決,也是用計算機來解決的

  • 對一個程序,運行的大部分時間只消耗在20%的代碼上,比如在循環上

    三、蒙特卡洛方法的基本思想

  • 通常蒙特卡羅方法可以粗略地分成兩類:**一類是所求解的問題本身具有內在的隨機性,借助計算機的運算能力可以直接模擬這種隨機的過程。**例如在核物理研究中,分析中子在反應堆中的傳輸過程。中子與原子核作用受到量子力學規律的制約,人們只能知道它們相互作用發生的概率,卻無法準確獲得中子與原子核作用時的位置以及裂變產生的新中子的行進速率和方向。科學家依據其概率進行隨機抽樣得到裂變位置、速度和方向,這樣模擬大量中子的行為后,經過統計就能獲得中子傳輸的范圍,作為反應堆設計的依據。

  • 另一種類型是所求解問題可以轉化為某種隨機分布的特征數,比如隨機事件出現的概率,或者隨機變量的期望值。通過隨機抽樣的方法,以隨機事件出現的頻率估計其概率,或者以抽樣的數字特征估算隨機變量的數字特征,并將其作為問題的解。這種方法多用于求解復雜的多維積分問題。

PS. source, python123.io

總結

以上是生活随笔為你收集整理的Python项目实践:蒙特卡罗方法计算圆周率的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。