MCMC蒙特卡洛算法

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的元素打亂

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章