小谈圆周率
圆周率是圆的周长与直径的比值,一般用希腊字母π表示,是一个在数学及物理学中普遍存在的数学常数。π也等于圆形之面积与半径平方之比,是精确计算圆周长、圆面积、球体积等几何形状的关键值。
小谈蒙特卡罗
蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。
考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点,有M个点落于“图形”内,则该“图形”的面积近似为M/N。
借助计算机技术,蒙特卡罗方法实现了两大优点:
一是简单,省却了繁复的数学报导和演算过程,使得一般人也能够理解和掌握;
二是快速。简单和快速,是蒙特卡罗方法在现代项目管理中获得应用的技术基础。
蒙特卡罗方法有很强的适应性,问题的几何形状的复杂性对它的影响不大。该方法的收敛性是指概率意义下的收敛,因此问题维数的增加不会影响它的收敛速度,而且存贮单元也很省,这些是用该方法处理大型复杂问题时的优势。因此,随着电子计算机的发展和科学技术问题的日趋复杂,蒙特卡罗方法的应用也越来越广泛。它不仅较好地解决了多重积分计算、微分方程求解、积分方程求解、特征值计算和非线性方程组求解等高难度和复杂的数学计算问题,而且在统计物理、核物理、真空技术、系统科学 、信息科学 、公用事业、地质、医学,可靠性及计算机科学等广泛的领域都得到成功的应用。
用蒙特卡罗方法求解圆周率
工程上常用蒙特卡罗方法求解圆周率。
用Python表示其公式为:
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圆,在正方形内随机的丢石子,最后根据石子在圆内的数量来计算圆周率的近似值。相关计算以及代码如下:
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系列)未完待续...