MCMC算法
蒙特卡羅方法又稱統計模擬法、隨機抽樣技術,是一種隨機模擬方法,以概率和統計理論方法爲基礎的一種計算方法,是使用隨機數(或更常見的僞隨機數)來解決很多計算問題的方法。
當所求解問題是某種隨機事件出現的概率,或者是某個隨機變量的期望值時,通過某種“實驗”的方法,以這種事件出現的頻率估計這一隨機事件的概率,或者得到這個隨機變量的某些數字特徵,並將其作爲問題的解。
個人淺見:隨機數模擬+概率論=MCMC
示例:蒙特卡洛算法求積分
首先考慮如下積分
求如上積分就是求下圖中陰影面積。
利用蒙特卡洛算法,隨機模擬正方形中的點(Xi,Yi),其總數爲n,若1/Xi大於等於Yi,則表示點(Xi,Yi)位於陰影面積內,滿足這一條件的點個數爲m。由概率論可知,
S=m/n*(2-1)*(1-0)
import random
max=10000000
def getPoint():
x=random.uniform(1.0,2.0)
y=random.uniform(0.0,1.0)
p=(x,y)
return p
def getResult():
m=0
n=max
for i in range(n):
p=getPoint()
if(1/p[0]>=p[1]):
m+=1
return m/n*(2-1)*(1-0)
print(getResult())
Python中隨機數的生成:
import random
random.randint(1,10) #產生1-10的一個隨機整數
random.random() #產生[0,1)中的一個隨機浮點數
random.uniform(1.1,3.2) #生成1.1到3.2間隔中的一個隨機浮點數,區間可以不是整數
random.choice('beautiful') #從序列中隨機選一個元素
random.randrange(1,100,2) #生成1到100間隔爲2的一個元素
a=[1,2,3,4,5]
random.shuffle(a) #將序列a的元素打亂