蒙特·卡羅算法的Python實現


一 背景

此算法誕生的背景是:

  1. 曼哈頓計划,有極大的計算需求。
  2. 計算機剛開始發展,最適合做計算。

蒙特卡洛算法理論基礎是概率論,實際就是暴力計算逼近理想結果。正是在以上兩個背景下,它剛好得到了極大的應用和發展。

二 概念

蒙特·卡羅算法,也稱統計模擬方法,是二十世紀四十年代中期由於科學技術的發展和電子計算機的發明,而被提出的一種以概率統計理論為指導的一類非常重要的數值計算方法。是指使用隨機數(或更常見的偽隨機數)來解決很多計算問題的方法。與它對應的是確定性算法。蒙特·卡羅方法在金融工程學,宏觀經濟學,計算物理學(如粒子輸運計算、量子熱力學計算、空氣動力學計算)等領域應用廣泛。

三 實例

上面敘述的是定義,我來描述一個例子:蒙特卡羅法計算圓周率

1.問題描述

  • 一個圓半徑R,它有一個外切正方形邊長2R。
    可以知道:
  • 圓面積=Pi R^2
  • 正方形面積 2R x 2R=4R^2
  • 從這個正方形內隨機抽取一個點,對這個點的要求是在正方形內任意一點的概率平均分布。
    那么這個點在圓以內的概率大概就是pi*R2/4R2=pi/4
  • 生成若干個這樣的點,利用平面上兩點間距離公式計算這個點到圓心的距離來判斷是否在圓內。
    當我們使用足夠多的點來進行統計時,我們得到的概率值十分接近pi/4
    這樣就可以得到pi值

2.代碼

import random 
import math
def main():
    print '請輸入迭代的次數:'
    n=int(raw_input())   #n是隨機的次數  
    total=0   #total是所有落入圓內的隨機點
    for i in xrange(n):
        x=random.random()
        y=random.random()
        if math.sqrt(x**2+y**2)<1.0:   #判斷是否落入圓內
            total+=1
    mypi=4.0*total/n   #得到Pi值
    print '迭代次數是',n,'Pi的值是:',mypi
    print '數學pi:',math.pi
    print '誤差是:',abs(math.pi-mypi)/math.pi   #計算誤差
    
main()

3.結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM