蒙特卡洛法求積分

2021-02-18 數據科學CLUB

問題一:我們如何用蒙特卡洛方法求積分?問題二:如何近似求一個隨機變量的數學期望?問題三:估計的誤差是多少?問題四:如何從理論上對蒙特卡洛估計做分析?結論

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')

問題一:我們如何用蒙特卡洛方法求積分?

你眼中的蒙特卡洛方法求積分,可能是這樣子的:

Image Name
最最經典的例子就是求  
但是這種方法的計算量非常大,而且隨著維數的增長需要的計算量也會成倍上升,收斂速度也並不快。

但是我要講的蒙特卡洛求積跟這個些許不一樣。

假如我想求  
設隨機變量  
那麼就有: 
事實上,藉助這個公式,我們將求積分轉化為求某個隨機變量的數學期望

接下來我們就可以用統計學的手段來處理了。

問題二:如何近似求一個隨機變量的數學期望?

通常情況下, 

設隨機變量  
那麼 

容易知道,上式中的  

所以我們的做法可以總結如下:

生成 

計算函數值 

積分 

接下來看一個例子來驗證我們的結果:

 
取 

N = 1000
x = 2 * np.random.random(size=N)  # [0, 2] 上的均勻分布
ans = 2 / N * np.sum(x ** 2)
print(ans)

2.6431046604313226

目前看來效果還算不錯,但是問題就這樣結束了麼?

問題三:估計的誤差是多少?

凡估計必有誤差

每一次採樣都可以得到一個估計值,我們多次採樣,得到多個估計值,畫出多個估計值的分布圖,從圖上就可以近似看出估計的誤差了。

record = []  # 記錄多次採樣的估計值
N = 1000  # 每次採樣取1000個點
for _ in range(1000):
    x = 2 * np.random.random(size=N)
    ans = 2 / N * np.sum(x ** 2)
    record.append(ans)
plt.title('N=1000')
sns.distplot(record); plt.show()

驚訝的觀察到:

把單次採樣點增加到2000個,直覺告訴我們,誤差會減小!

record = []  # 記錄多次採樣的估計值
N = 2000  # 每次採樣取2000個點
for _ in range(1000):
    x = 2 * np.random.random(size=N)
    ans = 2 / N * np.sum(x ** 2)
    record.append(ans)
plt.title('N=2000')
sns.distplot(record); plt.show()

明顯看到分布更加緊湊了一些。

問題四:如何從理論上對蒙特卡洛估計做分析?

在統計學上,我們評價一個估計好不好的標準有哪些呢?
統計量有三大基本性質:

無偏性表示這個估計有沒有 bias;有效性指這個估計的方差夠不夠小;相合性或者說一致性,說的是當樣本容量非常大的時候,估計值是否趨近於真實值。

接下來我們從理論上來討論這三點:
設  

 

 

有效性沒法說明,但是我們可以知道 
通過中心極限定理,還可以知道,當樣本容量很大的時候, 

最後,我想展示一下,本文所述的轉化為估計隨機變量期望的蒙特卡洛方法 與 傳統的往正方形內投點計算落在圓內的點個數來估計  

Image Name

plt.figure(figsize=(12, 4))
record = []
for _ in range(1000):
    x = np.random.random(size=(2, 200))
    ans = 4 * np.mean(np.linalg.norm(x, axis=0) < 1)  # 是否落在圓內
    record.append(ans)
plt.subplot(121)
sns.distplot(record, kde=False)

record = []
for _ in range(1000):
    x = np.random.random(size=200)
    ans = 4 * np.mean(np.sqrt(1 - x ** 2))  # y = sqrt(1 - x ^ 2)
    record.append(ans)
plt.subplot(122)
sns.distplot(record, kde=False); plt.show()

同樣是取了2000個點(做200次計算),統計1000次結果。左圖為傳統方法,右圖為本文所述轉化為求期望的方法。

明顯右邊的效果更好!

結論

本文簡要介紹了蒙特卡洛方法求積分的思路,以及相應的理論推導。蒙特卡洛求積分的本質是利用隨機模擬估計一個隨機變量的期望。理解好蒙特卡洛求積的思想有助於進一步學習MCMC方法。

進一步還可以思考:

相關焦點

  • 蒙特卡洛方法與定積分
    基本概念介紹求積分其實要麼是求面積,要麼就是在求體積
  • 談論不定積分及其求法
    記:合攏的加減積分可以分開加減積分2. 設函數f(x)及g(x)的原函數存在,k為非零常數,則∫ k f(x) dx=k ∫ f(x) dx 記:非零常數 乘以積分,可以把常數拿到外面乘不用積分。
  • 求一元函數定積分和不定積分的六種方法
    定積分和不定積分的求法沒必要分開,因為會求不定積分就會求定積分。
  • 蒙特卡洛模擬(Python)深入教程
    蒲豐投針問題:法國貴族Georges-Louis Leclerc,即蒲豐公爵在1777年提出了這樣一個問題[2] [3]:若在一張繪有等距平行線的紙上隨意拋一根短針,求針和任意一條線相交的概率。概率取決於方格紙的線間距(d),和針長度(l)——或者說,它取決於l/d的比值。
  • 《不定積分換元法》內容小結與課件節選
    一、不定積分換元法使用的注意事項●不定積分的換元是基於基本的不定積分公式和不定積分的線性運算法則的,所以對於基本的不定積分公式要非常熟練,常見的不定積分公式見課件與教材. ● 對於換元法求不定積分一定要在換元求積分以後,要記得利用相應的逆運算把元換回來,絕對不能使用符號的無關性,將中間變量的積分結果當作最終結果!
  • 辛普森法估算積分 - 《普林斯頓微積分讀本》
    16.1 基本思想 16.2 定積分的定義 16.3 定積分的性質 16.4 求面積 16.4.1 求通常的面積 16.4.2 求解兩條曲線之間的面積 16.4.3 求曲線與y軸所圍成的面積 16.5 估算積分 16.6 積分的平均值和中值定理 16.7 不可積的函數 第17 章微積分基本定理 17.1
  • 「高中數學積分」定積分求陰影面積舉例1
    在中小學練習中,經常出現求陰影面積的問題,其中大多數容易入手,套用面積公式或經簡單割補拼接湊可得方法。但有少數題目題目難以用常規方法處理,如下圖題:圖一:原題圖形矩形ABCD長AD=8寬AB=4,以邊AD為直徑的半圓與對角線BD交於點F,G是BC中點,求陰影BFG面積。
  • 一文讀懂蒙特卡洛方法:谷歌圍棋機器人科普
    比如,計算函數 y = x2 在 [0, 1] 區間的積分,就是求出下圖紅色部分的面積。使用蒙特卡羅方法估算π值。圖/維基百科前面提到,由於人們在設計具有一定通用性的圍棋盤面靜態評估函數的問題上長期止步不前,大概在2002年之後人們開始思考採用另一種完全不同的方式對盤面進行快速評估,這就是蒙特卡洛採樣。
  • 不定積分換元法使用基本原則總結與參考課件
    不定積分換元法使用的注意事項:●不定積分的換元是基於基本的不定積分公式和不定積分的線性運算法則的,所以對於基本的不定積分公式要非常熟練,常見的不定積分公式見課件. ● 不定積分的換元是基於求導或求微分運算的形式不變性的,即對最終變量的積分等於對中間變量的積分.
  • 無法用公式的形式求定積分時怎麼辦?——藉助幾何意義求定積分
    題型積分是求導的逆過程,求積分的公式也是求導公式的逆向推導而得,在考求積分的過程一般都是對該公式的考察,直接或者間接地利用該公式求積分的過程。那如果求定積分時出現圖一中題情況時,該如何求解呢?圖一題型思路圖一中求定積分出現了根號下1-x^2的形式,通過我們求導的逆向推導,發現很難找到該積分的原函數,即使是能找出該積分的原函數
  • 2018蒙特卡洛大師賽告訴我們的五件事
    對西班牙人來說,第31次在大師賽捧杯意味著新賽季的真正開始,但對其他球員而言,他們在蒙特卡洛鄉村俱樂部有哪些時刻值得銘記呢? ATP 官網盤點了本屆蒙特卡洛大師賽的五大事件。而在昨晚的蒙特卡洛,他又得到機會向職業生涯最具分量的冠軍發起衝擊。 老實說,錦織圭從腕傷手術後歸來表現不俗。職業生涯第二次參加蒙特卡洛大師賽,日本人就打進決賽,連續戰勝前溫網亞軍伯蒂奇、2018年雪梨賽冠軍梅德維德夫、 2號種子西裡奇和2屆大師賽冠軍小茲維列夫,這也是錦織圭時隔 14 個月首度闖進ATP巡迴賽決賽。
  • 數列極限的求法,你會幾種呢?
    數列極限的求法,也許大家都已經略有了解,但是一些細節可能未注意,小編在這裡會詳細地講述數列極限的求法,同時會對那部分容易被忽視的細節點出來。1.數列轉化為函數求極限在求下面這道數列極限題目時,最讓人忽視的地方就是錯誤運用洛必達法則,洛必達法則是需要對分子分母求導,因此運用洛必達法則前必須保證變量是連續變量而不是離散變量。請看下面這道例題:首先看看下面的解答過程,你發現幾處錯誤了呢?相信你已經看出來了,有兩處錯誤,即上面標紅的部分。兩處錯誤的共同點是沒有說明t與n的關係。
  • 網球——蒙特卡洛大師賽:弗格尼尼奪冠
    新華社發(尼古拉·馬裡攝)新華社照片,羅克布呂訥-卡普馬丹(法國),2019年4月22日 (體育)(3)網球——蒙特卡洛大師賽:弗格尼尼奪冠 4月21日,弗格尼尼捧杯慶祝奪冠。 當日,在2019ATP蒙特卡洛大師賽男子單打決賽中,義大利選手弗格尼尼以2比0戰勝塞爾維亞選手拉約維奇,獲得冠軍。
  • 你不知道的蒙特卡洛大師賽
    按照巡迴賽原本的賽程計劃,本周將是ATP1000系列蒙特卡洛大師賽舉辦的日子,然而受困於疫情,今年怕是欣賞不到蒙特卡洛的獨特美景了。那麼對於每年三大紅土大師賽的第一項,你對它的了解又是多少呢?1.法網風向標蒙特卡洛大師賽是一站相當有歷史的比賽,自1897年首次舉辦距今已有一百多年的時間,它的舉辦也標誌著每年歐洲紅土賽季的到來。
  • 在蒙特卡洛有幾位球員戰勝過納達爾?德約兩度直落獲勝
    我們都知道在法網上,納達爾僅僅輸給了索德林和德約科維奇兩位球員,那麼在奪冠次數僅僅比法網少一次的蒙特卡洛大師賽上,又有幾位球員戰勝過納達爾呢?今天小編就帶著大家回顧下,那些年在蒙特卡洛把紅土之神斬落在馬下的球員。
  • 兩種方法求不定積分∫dx/「(2+cosx)sinx」
    主要內容:本文主要通過待定係數法、三角換元法兩種方法,詳細介紹求不定積分∫dx/[(2+cosx)sinx]的具體步驟。方法一:主要思路:湊分和待定係數法綜合應用。tdt/(t^2+3)=(1/3)lnt+(1/3)∫dt^2/(t^2+3)=(1/3)ln(tanx/2)+(1/3)ln[(tanx/2)^2+3]+C=(1/3)ln{(tanx/2)*[(tanx/2)^2+3]}+C可見:同一個不定積分的原函數表達式不唯一
  • 「認識你自己」——自學習蒙特卡洛三部曲
    或者說,對於強關聯電子系統,(量子)蒙特卡洛模擬算法,有什麼瓶頸性的困難呢?茲事體大,這裡的篇幅沒法完全展開,在這篇文章中,筆者只希望講述我們最近發展「自學習蒙特卡洛方法(Self-leaning Monte Carlo method, SLMC)」三部曲[1,2,3],講述我們如何通過自我觀照、自我學習蒙特卡洛構型,設計出自學習蒙特卡洛方法,解決了凝聚態量子多體系統蒙特卡洛模擬中一些諸如臨界慢化和接收概率低等瓶頸性的問題,推動領域的發展。
  • 與網球一起旅行 假裝在蒙特卡洛大師賽
    那麼,最喜歡的紅土大師賽非蒙特卡洛莫屬!去年海姐休著年假趁機去了次蒙卡,雖然和大師賽失之交臂,但蒙特卡洛鄉村俱樂部令人窒息的美麗,至今難以忘懷。—海姐的蒙特卡洛一日遊—古樸的摩納哥蒙特卡洛站臺。我們坐著巴士,找到了蒙特卡洛大師賽的舉辦地,蒙特卡洛鄉村俱樂部。
  • FE「屋裡賽」摩納哥站:馬青驊首次獲得積分
    ABB國際汽聯電動方程式錦標賽「屋裡賽挑戰賽」繼測試輪後,再度來到舉世聞名的「虛擬」蒙特卡洛街道賽。第三輪較量中,蔚來333車隊的馬青驊以第十名,實現積分的「零突破」。此前表現穩健的奧利弗·特維則因排位賽的失誤,未能再度取分。隨著「屋裡賽」的不斷深入,每周六晚也成為關注電動方程式錦標賽中國車迷的線上派對。
  • 第99講 用Python實現蒙特卡洛模擬-馬爾科夫模型
    還有著名的隨機抽樣、統計試驗方法如蒙特卡洛模擬。蒙特卡洛模擬一個典型的例子是分子動力學模擬,AMBER是一款著名的分子動力學模擬程序,全世界在學術界與製藥企業中有超過60000名研究人員使用該程序來加速新藥的探索工作。