蒙特·卡羅算法的Python實現

一 背景

此算法誕生的背景是:算法

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

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

二 概念

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

三 實例

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

1.問題描述

  • 一個圓半徑R,它有一個外切正方形邊長2R。
    能夠知道:
  • 圓面積=Pi R^2
  • 正方形面積 2R x 2R=4R^2
  • 從這個正方形內隨機抽取一個點,對這個點的要求是在正方形內任意一點的機率平均分佈。
    那麼這個點在圓之內的機率大概就是pi*R^2/4R^2=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.結果

相關文章
相關標籤/搜索