对于某些不能精确求解的问题,蒙特.卡罗方法是一种非常巧妙的寻找近似解的方法。
以求解圆周率的问题为例,假设有一个单位圆及其外切正方形,我们往正方形内扔飞镖,当扔的次数足够多以后,“落在圆内的次数/落在正方形内的次数”这个比值会无限接近“圆的面积/正方形的面积”这个比值,也就是圆周率的四分之一。模拟扔飞镖的次数越多,圆周率的近似结果越精确。
实现代码为:
from random import random
def estimatePI(times):
hits = 0
for i in range(times):
x = random()*2 - 1
y = random()*2 - 1
if x*x + y*y <= 1:
hits += 1
return 4.0 * hits/times
print(estimatePI(10000))
print(estimatePI(1000000))
print(estimatePI(100000000))
print(estimatePI(1000000000))
运行结果为:
3.1396
3.1419
3.141688
3.141591436
----------相关阅读----------
Python按位异或运算符^应用案例一则:查找只出现一次的数字
Python组合列表中多个整数得到最小整数(一个算法的巧妙实现)
哈夫曼编码原理与Python实现代码(附手动推导过程原稿真迹)
Python版归并排序算法(附Python程序__name__属性用法演示视频)
----------喜大普奔----------
1、继《Python程序设计基础》(2017年9月第5次印刷)、《Python程序设计(第2版)》(2017年9月第4次印刷)、《Python可以这样学》(2017年7月第3次印刷)系列图书之后,董付国老师新书《Python程序设计开发宝典》(2017年10月第2次印刷)。为庆祝新书《Python程序设计开发宝典》全面上架,清华大学出版社联合“赣江图书专营”淘宝店推出特价优惠活动,《Python程序设计开发宝典》原价69元,新书上架期间超低价39.8元,可以复制下面的链接使用浏览器打开查看图书详情和购买:
https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-14464369246.84.46f16db0roWfX4&id=557107249812&rn=339cbc9df2bac424664103917dedfbd2&abbucket=8&tbpm=3
2、董付国老师新作《中学生可以这样学Python》已于2017年10月正式出版,很快会在各大书城全面上架。
4、董老师免费视频地址: http://pan.baidu.com/s/1c14WYn2 密码: 9xwr
5、董老师收费视频课:
CSDN学院:http://edu.csdn.net/search?keywords=%E8%91%A3%E4%BB%98%E5%9B%BD&type=0
龙果学院:http://www.roncoo.com/course/list.html?courseName=Python%E5%8F%AF%E4%BB%A5%E8%BF%99%E6%A0%B7%E5%AD%A6