鱼C论坛

 找回密码
 立即注册
查看: 5822|回复: 4

[技术交流] python小练习(049):蒙特卡洛方法求解近似圆周率

[复制链接]
发表于 2016-12-13 11:35:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python小练习(048),精确求解自然对数底e,传送门

python小练习(047)中,我们已经精确求解了圆周率Pi的值,今天的小练习是对上次小练习的一个扩展,了解一下用蒙特卡洛方法求解近似圆周率的过程。

蒙特卡洛方法(英语:Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
20世纪40年代,在冯·诺伊曼,斯塔尼斯拉夫·乌拉姆和尼古拉斯·梅特罗波利斯在洛斯阿拉莫斯国家实验室为核武器计划工作时,发明了蒙特卡洛方法。因为乌拉姆的叔叔经常在蒙特卡洛赌场输钱得名,而蒙特卡罗方法正是以概率为基础的方法。

在解决实际问题的时候应用蒙特卡洛方法主要有两部分工作:
用蒙特卡洛方法模拟某一过程时,需要产生各种概率分布的随机变量。
用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。

蒙特卡洛方法可用于近似计算圆周率:让计算机每次随机生成两个0到1之间的数,看以这两个实数为横纵坐标的点是否在单位圆内。生成一系列随机点,统计单位圆内的点数与总点数,(圆面积和正方形面积之比为PI:4,PI为圆周率),当随机点获取越多时,其结果越接近于圆周率(然而准确度仍有争议:即使取10的9次方个随机点时,其结果也仅在前4位与圆周率吻合)。用蒙特卡洛方法近似计算圆周率的先天不足是:第一,计算机产生的随机数是受到存储格式的限制的,是离散的,并不能产生连续的任意实数;上述做法将平面分区成一个个网格,在空间也不是连续的,由此计算出来的面积当然与圆或多或少有差距。

可见,用蒙特卡洛方法只能计算近似值,但是当随机点的数量越大(越接近无穷大),其结果就离Pi的精确解越接近。
蒙特卡洛方法可以用来求解很多实际问题,计算圆周率只是分享一下用这个方法求解实际问题的过程,希望对大家有帮助。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-12-13 13:35:55 | 显示全部楼层
蒙特卡洛解法:
  1. from random import randrange
  2. c = 0
  3. count = 0
  4. while c<=100000000:
  5.     x = randrange(0,10001)/10000.0
  6.     y = randrange(0,10001)/10000.0
  7.     if x*x+y*y<=1:
  8.         count += 1
  9.     c += 1
  10. pai = count * 4.0 / c
  11. print pai
复制代码

输出:
3.14158884858

可以看到,用10**8次方组数据模拟的结果,小数点前4位已经吻合了。

另外一种解法,用均布的点来计算:
  1. count = 0
  2. for x in range(1,10001):
  3.     i = x / 10000.0
  4.     for y in range(1,10001):
  5.         j = y / 10000.0
  6.         if (i*i+j*j) <= 1:
  7.             count += 1
  8. pai = count * 4.0 / 100000000
  9. print pai  
复制代码

输出:
3.14119052
可见,只有小数点前3位吻合。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-13 12:59:11 | 显示全部楼层
jerryxjr1220 发表于 2016-12-13 13:35
蒙特卡洛解法:

输出:

请问第一段代码里,x*x +y*y <=1 意味着什么,没怎么看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-13 17:19:29 | 显示全部楼层
JAY饭 发表于 2018-2-13 12:59
请问第一段代码里,x*x +y*y

标准圆方程啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-13 18:58:19 | 显示全部楼层

啊?我都没印象了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 18:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表