首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >啊!圆周率怎么玩?

啊!圆周率怎么玩?

作者头像
小Bob来啦
发布2020-12-08 15:11:16
发布2020-12-08 15:11:16
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

小谈圆周率

圆周率是圆的周长与直径的比值,一般用希腊字母π表示,是一个在数学及物理学中普遍存在的数学常数。π也等于圆形之面积与半径平方之比,是精确计算圆周长、圆面积、球体积等几何形状的关键值。

小谈蒙特卡罗

蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。

考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点,有M个点落于“图形”内,则该“图形”的面积近似为M/N。

借助计算机技术,蒙特卡罗方法实现了两大优点:

一是简单,省却了繁复的数学报导和演算过程,使得一般人也能够理解和掌握;

二是快速。简单和快速,是蒙特卡罗方法在现代项目管理中获得应用的技术基础。

蒙特卡罗方法有很强的适应性,问题的几何形状的复杂性对它的影响不大。该方法的收敛性是指概率意义下的收敛,因此问题维数的增加不会影响它的收敛速度,而且存贮单元也很省,这些是用该方法处理大型复杂问题时的优势。因此,随着电子计算机的发展和科学技术问题的日趋复杂,蒙特卡罗方法的应用也越来越广泛。它不仅较好地解决了多重积分计算、微分方程求解、积分方程求解、特征值计算和非线性方程组求解等高难度和复杂的数学计算问题,而且在统计物理、核物理、真空技术、系统科学 、信息科学 、公用事业、地质、医学,可靠性及计算机科学等广泛的领域都得到成功的应用。

用蒙特卡罗方法求解圆周率

工程上常用蒙特卡罗方法求解圆周率。

用Python表示其公式为:

代码语言:javascript
代码运行次数:0
运行
复制
pi=0
N=100
for k in range(N):
    pi+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))
print("圆周率的值为:{}".format(pi))

上次我们学过了random库,用于产生随机数。

现在即可用random库产生的随机数来模仿蒙特卡罗的随机性,即在一个正方形内有一个1/4圆,在正方形内随机的丢石子,最后根据石子在圆内的数量来计算圆周率的近似值。相关计算以及代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
from random import  random#调用random库
from time import perf_counter#time库中的计时函数
darts= 1000*1000#抛洒点的数量,这里设为100万
hit=0.0#目前在圆内部点的数量
start=perf_counter()#当前系统时间内的值
for i in range (1,darts+1):#用循环进行抛洒
    x,y=random(),random()
    dist=pow(x**2+y**2,0.5)
    if dist<=1.0:#判断是否在圆的内部
        hit+=1
pi=4*(hit/darts)
print("圆周率为:{}".format(pi))
print("运行时间为:{:.5f}s".format(perf_counter()-start))
#需要关注循环运行所占时间,且循环一般比较占用运行时间

(Python系列)未完待续...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员Bob 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档