蒙特卡洛近似的一些例子
Monte Carlo Algorithms
Calculating Pi
-
假設我們有一個隨機數生成器,它可以隨機生成[-1,1]之間的實數,我們每次生成兩個隨機數,一個作為x,一個作為y,這樣我們就有了一個點,所有的點都會落在藍色的正方形里面,由于x和y都是在[-1,1]之間均勻分布,所以正方形中所有的點都有相同的概率密度,正方形中包含一個綠色的原,半徑為1,圓心是原點。剛剛隨機生成的點可能會落在圓里面,可能會落在圓外面。這里我們不難得到落在圓中的概率為π4\frac{\pi}{4}4π?。
-
假設我們在正方形區域中隨機抽樣n個點,那么點落在圓中的期望就是Pn=πn4Pn=\frac{\pi n}{4}Pn=4πn???。當然這里只是期望,可能我們抽五個點,他們都不在圓中。
-
那么我們怎么判斷點是不是在圓中呢?我們可以使用圓的方程可以得到下面一個不等式:x2+y2≤1x^2+y^2 \leq 1x2+y2≤1
-
假設我們均勻隨機抽樣n個點,通過上述不等式,我們發現有m個點在圓中。如果我們的抽樣n非常大,這樣我們就可以觀測到m≈πn4m\approx \frac{\pi n}{4}m≈4πn?,所以我們得到π≈4mn\pi\approx\frac{4m}{n}π≈n4m?。大數定律保證蒙特卡洛的正確性,當n→∞n \rightarrow \inftyn→∞?,4mn→π\frac{4m}{n}\rightarrow\pin4m?→π。
-
這樣我們可以得出結論,當我們在正方形中隨機抽樣n個點,有m個點落在圓中,我們就可以將π\piπ近似為4mn\frac{4m}{n}n4m???。這里我們需要保證抽樣是均勻的,抽到所有點的概率都相同,否則就不成立。
Buffon’s Needle Problem
- 這也是一個計算Pi的例子,通過畫幾條平行線,然后撒一把針,通過針與平行線相交的個數可以推算出pi。
- 先畫一些平行線,兩個平行線之間的距離為d
- 取一些針,針的長度為l。
- 隨機把針拋到紙上,針的長度是l,針可能與平行線相交也可能不相交。
- 假設針的位置和角度都是均勻隨機的,那么針和平行線有一定概率相交,通過微積分可以計算出相交的概率為P=2lπdP=\frac{2l}{\pi d}P=πd2l??。
- 上面我們得到了針與平行線相交的概率$ P=\frac{2l}{\pi d}??,這樣我們就可以得到期望??,這樣我們就可以得到期望??,這樣我們就可以得到期望Pn = \frac{2ln}{\pi d},這樣我們不難計算,這樣我們不難計算,這樣我們不難計算\pi \approx \frac{2ln}{dm}$?
近似求積分
-
假設給我們一個函數:f(x)=11+sin(x)?(logex)2f(x)=\frac{1}{1+sin(x)\cdot (log_e x)^2}f(x)=1+sin(x)?(loge?x)21?
-
計算定積分:I=∫0.83f(x)dxI = \int_{0.8}^{3} f(x)dxI=∫0.83?f(x)dx
-
這個函數太復雜了我們沒有辦法求它的定積分,這時候我們就需要用數值方法近似求它的定積分了,蒙特卡洛就是最常用的數值方法。
- 我們首先在[0.8,3]上均勻隨機抽樣n個樣本
- 然后我們計算n個樣本的函數值
- 然后用Qn=(b?a)?1nΣi=1nf(xi)Q_n=(b-a)\cdot\frac{1}{n}\Sigma_{i=1}^{n}f(x_i)Qn?=(b?a)?n1?Σi=1n?f(xi?)
- 然后就可以使用QnQ_nQn?來近似定積分。
-
剛剛計算的是一元函數的定積分,下面我們看看多元函數的定積分
- 假設f(x)是一個多元函數,自變量是向量x
- 計算函數在集合Ω\OmegaΩ上的定積分:I=∫Ωf(x)dxI=\int_{\Omega}f(x)dxI=∫Ω?f(x)dx
- 從集合Ω\OmegaΩ中隨機抽樣n個向量
- 計算Ω\OmegaΩ集合的體積:V=∫ΩdxV=\int_{\Omega}dxV=∫Ω?dx
- 然后計算Qn=V?1nΣi=1nf(i)Q_n=V\cdot\frac{1}{n}\Sigma_{i=1}^nf(i)Qn?=V?n1?Σi=1n?f(i)
- 然后我們使用QnQ_nQn?來近似定積分
近似求期望
-
定義X為d維的隨機變量
-
P(x)為概率密度函數,它描述了變量X在某個點附近取值的可能性。有這樣的性質:∫Rdp(x)dx=1\int_{\mathbb{R}^d}p(x)dx = 1∫Rd?p(x)dx=1
-
使用蒙特卡洛來近似求期望
- 根據概率密度函數p(x)p(x)p(x)來隨機抽樣
- 計算每個樣本f(xi)f(x_i)f(xi?)的值,然后求所有n個函數值的平均,將平均值記為:QnQ_nQn?
- 使用QnQ_nQn?作為期望的估計。
總結
以上是生活随笔為你收集整理的蒙特卡洛近似的一些例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker自动部署脚本
- 下一篇: 快速开发实用工具VRTK-011