1. 程式人生 > >蒙特.卡羅方法求解圓周率近似值原理及程式碼實現

蒙特.卡羅方法求解圓周率近似值原理及程式碼實現

  • 原理

    • 對於某些不能精確求解的問題,蒙特.卡羅方法是一種非常巧妙的尋找近似解的方法。
    • 以求解圓周率的問題為例,假設有一個單位圓及其外切正方形,我們往正方形內扔飛鏢,當扔的次數足夠多以後,“落在圓內的次數/落在正方形內的次數”這個比值會無限接近“圓的面積/正方形的面積”這個比值,也就是圓周率的四分之一。模擬扔飛鏢的次數越多,圓周率的近似結果越精確。
      圖示
      πr2/4r2=S/S正方形 ===》 π/4=S/S正方形
  • 程式碼實現

# -*- coding: utf-8 -*-
# @Time     : 2018/8/8 14:54
# @Author   : ypc
# @File     : estimatePi
# PI=4*圓/正方形
import random
def estimatePi(times):      # 落入正方形的次數
    hists=0     # 落入圓的次數
    for i in range(times):
        x=random.random()*2-1         # [0, 1)*2-1
        y=random.random()*2 - 1
        if x*x+y*y <=1:
            hists+=1
    return 4.0*hists/times
if __name__=="__main__":
    pi=estimatePi(10000000)
    print(pi)