第九篇:使用Python来实现蒙特卡洛法计算圆周率π
Python小案例
一、前置内容
蒙特卡罗法也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。是按抽样调查法求取统计值来推定未知特性量的计算方法。蒙特卡罗是摩纳哥的著名赌城,该法为表明其随机抽样的本质而命名。故适用于对离散系统进行计算仿真试验。在计算仿真中,通过构造一个和系统性能相近似的概率模型,并在数字计算机上进行随机试验,可以模拟系统的随机特性。 [1]
1.1、了解random库
random库是使用随机数的Python标准库 伪随机数 :采用 梅森旋转算法 (伪)随机序列中元素 random库主要用于生成随机数 使用random库: import random
1.2、基本随机数函数
为什么要随机种子呢? 因为给了随机数种子, 调用的random()出的随机数是相同 , 那么对于一个随机数程序来说 , 可以做到复现的作用
1.3、扩展随机数函数
二、案例需求
看四分之一的部分 , 使用蒙特卡洛方法 , 模拟1000000次点随机落在这个四分之一上面 , 记录落在四分之一⚪内的,最后 4*( 四分之一落入圆内的随机点/四分之一部分面积), 算出来就是圆周率。
使用蒙特卡洛法计算圆周率 输入:无 输出:一般为3.14...
三、案例分析与解决过程
一、怎么使用蒙特卡洛方法计算圆周率? 答案:看四分之一的部分 , 使用蒙特卡洛方法 , 模拟1000000次点随机落在这个四分之一上面 , 记录落在四分之一⚪内的,最后 4*( 四分之一落入圆内的随机点/四分之一部分面积), 算出来就是圆周率。
二、怎么判断落入点在圆中? 答案:在单位⚪中 , 半径为1 , 那么随机点的x,y值 , (x平方+y平方之和的开方) 为随机点到圆心的距离 , 如果该距离小于1,那么判断该随机点在圆心中. 距离代码 pow(x2+y2 , 0.2)
四、完整代码
from random import random
# 投入1000000个随机点
DARTS = 1000*1000;
hits = 0.0
for i in range (1 , DARTS +1 ):
x , y =random() ,random() ;
# 点到圆心的距离
dist = pow(x**2 + y**2 , 0.5 )
# 判断抛出点与圆心距离 , 小于半径 , 在圆中
if(dist < 1.0):
hits = hits +1 ;
pi = 4 * (hits / DARTS)
print("圆周率为:{}".format(pi))
五、检验与验收代码
六、复盘所学知识
1、随机数库random是python的标准库 2、常用随机函数random() , seed()
转载自:https://juejin.cn/post/7245942451105103933