李毅 刘凯峰 陈巧琳 胡春兵
摘要:基于Python与蒙特卡洛算法对圆周率进行研究[1],为了实现对圆周率更加准确的计算,需要进行大量的实验及计算归纳,在实验中将计算机编程技术加以运用,能够有效降低重复运算次数[2]。根据已有二维平面模型拓展为三维模型,使实验效果更加直观、立体。
关键词:Python;蒙特卡洛法;圆周率;三维模型
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2022)10-0110-03
1 圆周率的含义及历史
圆周率Pi是圆的周长与直径的比值,一般用希腊字母π表示,是普遍存在数学及物理学中的数学常数(约等于3.1415926) ,也是一个无理数。它是圆的周长与直径的比值,也等于圆的面积与半径平方之比,π在准确计算圆周长、圆面积、球体积等问题中扮演着极其重要的角色。
圆周率散发着经久不衰的吸引力,以至于在人类几千年的历史长河中,许多数学家都在寻求π的值,甚至为之付出了毕生的心血。从古至今,能像圆周率一样吸引众多的学者的数字屈指可数,计算圆周率的值具有极其重要的含义,查阅历史上对π的求值程度往往能反映出这个区域甚至这个时代数学发展的大致水平。
圆周率π在计算界占有重要的地位,纵观古今中外历史,我们可以将圆周率计算方法的发展史大略分为四个时期[3]:实验时期、几何法时期、分析法时期、计算机时期。电子计算机的迅速普及使π值计算有了日新月异的进展,计算圆周率π值的方法和求解速度都实现了前所未有的突破,使对π的求值运算步入了一个崭新的发展期,圆周率π的数值达到了难以想象的精度。
2 采用的工具
随着近代计算机技术的发展,蒙特卡洛方法也因自身的特性而得到广泛应用。蒙特卡洛方法现已成为人们处理复杂的数据建模和更高维度问题的主要工具,它在电子学、生物学、高分子化学,近似计算等学科与方法的研究中有着重要的应用[4]。通过科学合理的统计建模,把较为复杂的研究对象,转化成对随机数及其数字特征的模型及运算,从实质上简化了研究问题,减少了运算的复杂性,从而获得最佳的近似解[5]。
大数定理则是蒙特卡罗法最为关键的数理基石,如果要使用蒙特卡罗方法来求解问题,则需要重复大量同样的实验,只有实验次数足够多,所获得的结论才会接近于真实值。蒙特卡洛法的本质是构造出一个具有随机性的問题,并使数学上推导出来的结论正好是所求问题的解,多次重复实验后,求得问题的多个解,即可获得近似的结果[6]。
现在计算机技术飞速发展,编程语言早已是计算机应用软件开发中不可或缺的一部分,Python编程语言拥有编写简洁快速、语法优美易读等优势,在各领域都能看得到它的身影[7]。本文将Python的诸多优势融入实验过程中,既可以清晰明了地展现出实验的结果,又能够使学习者更加注重问题的思想本质,而不是烦琐的代码。除此之外,使用Python 语言还能轻松简洁地编写图形界面程序[8],大大降低了本次研究的难度。
3 二维模型建立
首先通过二维平面图像来介绍实验过程,研究表明可以通过圆和正方形的面积计算公式得到圆面积=正方形的面积*(圆中的点/正方形中的点) 。实验中,本文选择一个含有内切圆且边长为2的正方形,如图1所示,向其中投射大量的针,每根针在正方形上形成一个“投点”,依靠投点在内切圆的个数与正方形内投点个数的比值等于Pi/4,再进行简单地变换就得到Pi的值。为保证实验结果的精确度,投点总数通常较大,由于计算落在圆内投点数显得较为困难,故可以运用Python及蒙特卡罗算法的来协助探究。
使用Python代码来实现上述过程,如图2所示,需要定义N代表投点的总个数,n代表投射在内切圆中小点的总个数,用两个从-1到1之间的随机值来代表投点的横坐标和纵坐标,并创立两个列表分别来记录横坐标和纵坐标的值,然后利用公式求得Pi值并用列表记录。调用画图工具将实验过程呈现出来,得到如图3所示。
接着通过调用数学函数将列表之中大量的实验结果所求Pi值取平均值、方差及标准差,将所有Pi值放进图中形成散点图,同时将Pi的平均值画成一条红线与Pi的原值(3.1415926) 画出的黑线相对比就可以发现红线和黑线几乎重叠,如图5所示,证明所用的方法是比较合理的。如果做一个领域半径r来剔除出实验所求Pi的异常值,即可使实验数据更加精确,方差和标准差都会缩小,所求的值离Pi的真实值更接近,如图6所示。
4 三维模型建立
根据二维的平面模型可以延伸到三维的立体模型,三维模型的实验数据将比二维模型的实验数据更加合理。与二维模型相比,三维模型具有更多优势,三维模型的空间信息呈现更直接,三维模型给空间信息提供了更为丰富展示空间,而且三维模型在可视化方面有着巨大的优势[9]。实验中二维模型转化为三维模型即是将边长为2的正方形内切圆转化为边长为2的正方体内切球,如图8所示,投射针将要从正方体的多个方向发射,确保“投点”在三维的坐标系下分布均匀。同理,经过简单的数学公式推导变化,使用内切球和正方体的体积公式与投点在球内和正方体内的比值等于Pi/6,最后就能得到Pi的值,如图7中公式所示。
使用Python代码来实现三维模型的图像,同样需要定义N代表投射点的总个数,n则代表投射在内切球体之中小点的总个数,用三个从-1到1之间的随机值来代表投点所在的坐标(即x轴,y轴和z轴) 就能近似地认为投射在一个边长为2的正方体内,并创立三个列表来分别记录这些坐标,然后利用公式求得Pi值并用列记录。最后利用画图工具将整个实验过程呈现出来,如图10所示。
将二维模型求出Pi近似值的方法略做修改即可等价地将三维模型Pi的近似值求出,如图7中公式所示,利用数学函数将三维模型实验所求大量Pi值取平均值、方差和标准差,将实验中产生的大量Pi值都放进图中形成散点图,并将这些值的平均值画成一条红线与Pi的真实值(3.1415926) 画出的黑线相对比,如图11所示。使用相同的坐标刻度,可以清晰地对比二维图形和三维模型的精确程度。同理,对三维模型实验数据大量Pi值做一个领域半径r,来剔除异常实验数据值Pi,可以让数据更加精确,方差和标准差都会缩小,所求的平均值离Pi的真实值更接近,如图12所示。
5 总结
即使近现代计算机技术高速发展,然而对圆周率π的求值并没有停止,计算仍在继续,但它已经不再被用在日常生活之中,研究的π意义已经不再局限于简单的数值计算,一方面基于个人的兴趣爱好,另一方面被用来检测计算机性能的好坏以及公式的优劣。现如今,圆周率往往不再是一种被检验的对象,而是同最大素数相类似地被当作检测工具,两者皆用于检测设备的先进程度和算法的优劣。
在本次研究中,使二维平面模型转化为三维立体的模型,是秉持逐步向高纬度空间探索的精神。想要探索四维甚至更高维空间,就需要先投影到三维世界来看,将二维模型拓展到三维模型是不可或缺的一部分。人类向高维度的探求是科学发展以来的永恒目标,假设拥有足够的数学知识,从众多三维模型中得到启发,极有可能带动科学研究迈出一大步。
参考文献:
[1] 何光.用蒙特卡罗方法计算圆周率的近似值[J].内江师范学院学报,2008,23(4):14-16.
[2] 王玉华,李娇,方曙东.基于Python实现圆周率的蒙特卡罗算法的研究[J].池州学院学报,2019,33(3):17-18.
[3] 张晓贵.圆周率计算的四个时期[J].辽宁教育学院学报,2000,17(5):66-69.
[4] 朱陆陆.蒙特卡洛方法及应用[D].武汉:华中师范大学,2014.
[5] 楊筱珊.蒙特卡罗方法在定积分近似计算中的应用[J].安顺师专学报(自然科学版),1998(2):34-40.
[6] 李姣娜.蒙特卡罗方法的原理及在数值计算方面的应用——以定积分为例[J].潍坊工程职业学院学报,2018,31(5):104-108.
[7] 姚建盛,李淑梅.Python在科学计算中的应用[J].数字技术与应用,2016(11):76.
[8] 程丽玲.浅谈Python在科学计算中的应用[J].信息系统工程,2018(10):55.
[9]徐鹏飞,丁榆城,张炜,等.基于三维CAD造型内螺旋铣刀精确建模[J].中国机械,2019(17):1.
【通联编辑:梁书】
收稿日期:2021-11-28
基金项目:四川民族学院泸定校区校园网建设关键技术研究(XYZB2009ZB) ;四川民族学院基于微信小程序的食堂在线预约系统研究(XYZB2008ZB)
作者简介:李毅(1990—) ,男,四川巴中人,硕士研究生,助教,研究方向为最优化算法。