发布网友 发布时间:2022-04-06 04:14
共1个回答
热心网友 时间:2022-04-06 05:43
'''
蒙特卡洛方法实现计算圆周率的方法,其思想是假设我们向一个正方形的标靶上随机投掷飞镖,靶心在正*,标靶的长和宽都是2 英尺。同时假设有一个圆与标靶内切。圆的半径是1英尺,面积是π平方英尺。如果击中点在标靶上是均匀分布的(我们总会击中正方形),那么飞镖击中圆的数量近似满足等式:
飞镖落在圆内的次数/飞镖落在标靶内的总次数=π/4
因为环包含的面积与正方形面积的比值是π/4。
因为环所包含的面积与正方形面积的比值是π/4。
我们可以用这个公式和随机数产生器来估计π的值。
这种采用了随机(随机投掷)的方法称为蒙特卡洛(Monte Carlo)方法。
写程序时,一般默认采用单位圆来计算.R=1,正方形边长a=2.圆心即坐标轴原点.
'''
for i in range(1,DARTS): //运算次数 DARTS=1200
x,y = random(),random() //生成点坐标位置
dist = sqrt(x**2 + y**2) //计算此点与坐标轴原点(即圆心)的距离
if dist <=1.0: //与原点的距离小1,即在圆的半径内.该点落在单位圆内.
hits = hits + 1 //落在圆内的点数合计
pi = 4 * (hits/DARTS)
追问那正方形的边长是从哪里看出来的?
追答这个问题,一般都是用单位圆来计算.而单位圆与正方形内切.如果你非要纠结正方形的边长,那么,因为,圆的半径是1,直径是2,所以,正方形的边长为2.这个不重要的.本质是要理解圆与正方形的关系,落点的不同.建议你百度下 蒙特卡洛方法计算圆周率 ,好好理解下问题本质吧.