教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率

教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

可能没有一个数字像π那样神秘、浪漫、被误解或激发人们的兴趣 。
——威廉·舒哈夫
《π的自然与历史》
数学可以说是无处不在 。从自然模式到气候科学 , 从医学成像到搜索引擎 , 从运输网络到AI的优化 , 从建模到流行病的控制……数学在我们日常生活的几乎每个领域都发挥着至关重要的作用:
联合国教科文组织在2019年11月26日第四十届大会批准宣布 , 3月14日为“国际数学日(International Day of Mathematics,简称IDM)” 。 因为“3.14”是圆周率数值最接近的数字 , 所以这一天也叫圆周率日(π Day ) 。
圆周率π是一个迷人的数字 , 人们对它的认识推动了数学的长足进步
圆周率 , 一般以π来表示 , 是一个在数学及物理学中普遍存在的数学常数 , 它是圆形的周长与直径的比值 。 研究π的历史可以追溯到几千年前 , 它是数学家们一直以来追踪的目标之一 。
公元前250年 , 希腊数学家阿基米德通过 割圆术计算圆周率 , 阿基米德进行了96边形的割圆之后 , 将圆周率推到了小数点后两位3.14 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

直到公元265年 , 中国的数学家刘徽用割圆术的方法 , 通过正3072边形计算出π的数值为3.1416 , 艰难地把圆周率推到了小数点后四位 。
200年后 , 祖冲之继续使用割圆术计算12,288形的边长 , 将圆周率推到了小数点后六位 , 可惜的是 , 由于文献的失传 , 祖冲之的计算方法我们现在已经不得而知了 。
祖冲之将圆周率π的记录保持了800年 。 随着近代数学的发展 , 数学家韦达、罗门、科伊伦、司乃耳、格林伯格通过割圆术陆续将圆周率推到了小数点后39位 , 这个精度是什么概念呢 , 如果我们通过小数点后39位的圆周率计算一个一个可观察宇宙大小的圆 , 计算的误差仅仅只有一个氢原子大小 。
十六世纪到十七世纪 , 人们发现了一种新的圆周率计算方法—— 无穷级数法 , 让计算圆周率的工作变得更加快速 。 无穷级数是一组无穷数列的和 , 数学家梅钦通过无穷级数将圆周率推算到小数点后100位 , 在很短的时间里 , 人们通过梅钦类公式反复打破了新的圆周率记录 。
18世纪 , 法国数学家布丰 提出了随机投针法 , 即利用概率统计的方法来计算圆周率π的值 , 也就是著名的 投针实验 。 布丰在地板上画出若干平行的直线 , 再将一根根短于平行直线距离的针撒到地板上 , 通过统计针的总数和与直线相交的针的个数 , 从而计算圆周率 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

这种算法虽然虽然没有打破圆周率的记录 , 但这种将几何与概率结合起来的思想催生了蒙特卡洛算法 , 也让人工智能成为了可能 。
用蒙特卡洛法计算圆周率
2016年 , 围棋AI AlphaGo击败了顶尖的人类棋手李世石 , 一时轰动世界 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

围棋有19×19总共361个交叉点 , 每个交叉点可以有黑棋、白棋、没有棋子三种情况 , 除去围棋规则不允许和对称的情况外 , 总共约为2x10170种情况 。 比整个宇宙的原子还多 , 穷举法无法计算所有情况 。
AlphaGo的战胜人类的秘密是依靠 蒙特卡洛树搜索和深度神经网络 , 无需遍历所有情况 , 即可在有限的时间内找出最佳一着 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

1、什么是蒙特卡洛算法?
20世纪40年代美国开启了研制原子弹的“曼哈顿计划” , 这个计划的领导者是现代计算机之父冯诺依曼 。
在研制原子弹的过程中 , 冯诺依曼提出了一种新的算法 , 通过大量随机样本去了解一个高度复杂的系统 , 并把这个算法命名为“蒙特卡洛算法” 。
蒙特卡洛是摩洛哥的一座城市 , 以赌博出名 。 赌博还是算法 , 都与概率和随机性有关 。 所以 ,蒙特卡洛算法的核心就是——蒙 。
2、怎样认识蒙特卡洛法?
我们可以用NetLogo设计一个蒙特卡洛法计算圆周率的程序 , 让学习数学变得更简单 , 也为我们提供一个新的思维方式 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

蒙特卡洛法其实很简单 , 如上图 , 首先我们作圆以及圆的外界正方形 。 假设圆的半径为R , 则外接正方形边长为2R 。
接下来 , 我们在正方形内随机投点如果随机投点 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

假设我们总共投进了a个点 , 落入圆内的点有b个 , 那么 , a和b的比例是多少呢?
根据面积公式可求 , S圆=πR2 , S方=4R2 , 我们很容易得知 , b/a ≈ S圆/S方 = πR2/4R2=π/4 。
这样我们就建立起一个落在圆内的概率(b/a)和圆周率π的关系 , 通过简单的移项 , 我们获得了π与投点个数的关系: π ≈ b/a×4 , 这样我们就可以通过计算b和a的数据计算圆周率π 。
点击运行 , 右侧的舞台上就会随机出现小海龟 , 我们可以通过统计站在绿色区域的小海龟和总共出现的海龟比例 , 来估算圆周率 。 点击运行 , 我们可以看到无填上出现了很多小海龟 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

通过下方误差率表统计着估算的圆周率与高精度的圆周率之间的误差率变化 , 我们看到 , 一开始是误差率非常高 , 随着投点数量的增加 , 误差率慢慢接近于0.也就是说 , 只要我们进行足够多的投点 , 就可以获得精度较高的圆周率 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

3、如何用NetLogo设计蒙特卡洛法计算圆周率的程序?
我们用下面两个流程图展现初始化与运行两个按钮的程序 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

而计算圆周率的程序可以通过监视器完成 , 程序只有一句话:
( turtles_in_green / total ) * 4
这就是我们之前说的 π ≈ b/a×4 。
4、蒙特卡洛法有哪些特点?
我们来总结一下 。
首先 , 蒙特卡洛法需要进行多次重复试验 , 多次投点才能获知圆周率;蒙特卡洛法的精确度低 , 数万次乃至数十万次投点 , 才将圆周率误差提高到0.01% 。
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

从另一方面看 , 蒙特卡洛法有较高的泛用性 , 许多很多可以使用积分求面积的计算也可以通过蒙特卡洛法得到 , 对于不规则图形甚至可能是唯一方法 。
蒙特卡洛法还有计算简便的特点 , 对于复杂度极其高的计算 , 蒙特卡罗法更为简便 。
正是这些特点 , 使得蒙特卡洛法成为围棋AI 战胜人类的秘密武器 。
人类对于圆周率精度的追求从未停止
计算机诞生之后 , 好奇心使得人类在追求圆周率精度的道路上变得疯狂, 记录急剧增加 。
  • 1949年 , 第一台计算机在ENIAC(第一台通用电子计算机)上进行了70小时的首次尝试 , 计算出了2037位小数 。
  • 到1967年 , 这一记录达到50万位数 。
  • 2009年 , 高桥等人用超级计算机计算了2.5万亿的π 。
人类并没有就此止步......
教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率
文章图片

随着科技的不断进步和发展 , 高精度计算π值被用作测试计算机处理能力的基准 , 更加精确的 π值也随之出现 。
  • 2019年 , 谷歌云计算系统将圆周率的数值计算到小数点后31万亿位 。
  • 2020年 , 一个名为北阿拉巴马慈善计算的非营利组织的创始人蒂莫西·穆利肯使用个人电脑 , 将数值计算到小数点后50万亿位 , 耗时303天 。
  • 截止到2021年8月17日 , 瑞士的研究人员使用了一台超级计算机 , 经历了108天 , 精准的将圆周率π计算到了小数点后的62.8万亿位 , 创下该常数迄今最精确值记录!
尽管我们现实的计算中完全不需要用到精度如此高的圆周率 , 但对于圆周率精度的追求正是人类好奇心的呈现 , 这种好奇心驱使着科学的不断前进 。
戳·分享
戳·点赞
【教你用|走近神秘的数字π!手把手教你用蒙特卡洛法来计算圆周率】戳·在看

    推荐阅读