需求:
- 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 ========================#蔺光岭#
还不快抢沙发