蒙特.卡罗方法求解圆周率近似值原理

Python,算法 2018-01-22

需求:

  • 1.利用蒙特卡罗算法近似求解圆周率
  • 2.落入圆内的飞镖次数/落入矩形(矩形的内切圆)*4=Pi

简介:

  • 对于某些不能精确求解的问题,蒙特.卡罗方法是一种非常巧妙的寻找近似解的方法。
  • 以求解圆周率的问题为例,假设有一个单位圆及其外切正方形,我们往正方形内扔飞镖,当扔的次数足够多以后,“落在圆内的次数/落在正方形内的次数”这个比值会无限接近“圆的面积/正方形的面积”这个比值,也就是圆周率的四分之一。模拟扔飞镖的次数越多,圆周率的近似结果越精确。

         

用python实现pi的求解:

import random

# times表示的是落入正方形的次数
def estimatePI(times):
    # 统计落入圆内的次数
    hist = 0
    for i in range(1, times):
        # 约束x的取值在[-1,1]之间
        x = random.random() * 2 - 1
        # 约束x的取值在[-1,1]之间
        y = random.random() * 2 - 1
        if x * x + y * y <= 1:
            hist += 1
    return 4.0 * hist / times

esPi = estimatePI(100000)
print esPi

测试结果:

3.1472

每一个成功的背后都有无数个无人知晓的黑夜。

因为

夜晚,是超越对手的最佳时机。

===================== 码农1024 ========================#蔺光岭#


本文由 蔺光岭 创作,采用 知识共享署名 4.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论