用随机投掷飞镖法计算Pi值(Randomness Throwing dart Pi Python)
Posted HuZihu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用随机投掷飞镖法计算Pi值(Randomness Throwing dart Pi Python)相关的知识,希望对你有一定的参考价值。
画一个边长为r的正方形和半径为r的四分之一的圆(如下图所示),向上面随机投掷飞镖,通过计算落在星星区域和整体区域的飞镖比例,即可求出π值。
公式推导如下:
假设正方形的边长r为1,那么飞镖落在星星区域内的任意点(x, y),其坐标的平方相加值(x2+y2)必然小于1。
代码如下:
import random def find_pi(num_of_times): #num_of_times为投掷飞镖的次数 num1,num2=0,0 #num1为飞镖投掷在星星区域内的次数,num2为飞镖投掷在圆点区域内的次数 for i in range(num_of_times): #每次投掷飞镖后,飞镖落下的点坐标(x,y),都为0~1之间的浮点数 x=random.random() y=random.random() if (x**2+y**2)<1: num1+=1 #如果其点坐标平方相加的值小于1,那么说明该飞镖落在圆弧区域内,num1增加一次,反之,num2增加一次 else: num2+=1 pi=(4*(num1/(num1+num2))) return pi
投掷1000000次飞镖试一下:
print(find_pi(1000000))
几次运行结果都已经和实际π值相差不大:
3.14326
3.140684
3.141544
参考:麻省理工学院公开课:计算机科学及编程导论(第20课)
以上是关于用随机投掷飞镖法计算Pi值(Randomness Throwing dart Pi Python)的主要内容,如果未能解决你的问题,请参考以下文章
Python圆周率 Pi (π) 的计算(蒙特卡罗法+公式法)
数据结构与算法之深入解析“圆形靶内的最大飞镖数量”的求解思路与算法示例