伪·从零开始学算法 - 2.3 - 求圆周率

伪·从零开始学算法 - 2.3 - 求圆周率
丁俊尧本文为圆周率日特辑~
简介
圆周率
据说远古时期的人们根据经验以 3 作为圆周率的值(“径一周三”),这个值至今也能够用于一些对精度要求不高的场合(如手工做木桶)。但是,对于天体运行和面积测量等方面,3 这个值未免太粗略。人们对于它的计算绝不仅限于此。
古埃及、古巴比伦、古印度、古代中国的遗迹中都能够找到关于圆周率的较精确的值,它们都能够达到 3.1 这个值。实际上,绝大多数情况下,那时的人还是把它当作有理数来计算的。总之,那时的计算可能仍然属于观测值加以拟合。
割圆术
割圆术是第一个有纪录、严谨计算
一般来说,它是通过计算圆内接正多边形和/或圆外切正多边形的周长的方式来计算圆周率。随着正多边形的边数增长,其形状越接近圆,因此可以据它的周长或面积计算圆周率。理论上来说,它可以计算任意精度的圆周率的值。
目前所知最早这么做的是约公元前 250
年的阿基米德。阿基米德的算法是在计算圆的外切正六边形及内接正六边形的边长,以此计算
此后的托勒密等人也使用割圆术来计算圆周率,但他们是单向迫近,不如阿基米德的双向迫近精确。
三国时期的中国,刘徽也创立了割圆术。与之前不同的是,他的理论是数学史上最严谨完备简洁的割圆术:使用极限论来论证割圆术的正确性;双向迫近。
割之弥细,所失弥少。割之又割,以至于不可割,则与圆周合体而无所失矣。
与阿基米德相似,刘徽也是从正六边形开始计算的。不同的是,刘徽以面积来计算。他自己通过分割圆为
192 边形,计算出圆周率在 3.141024 与
3.142704 之间,取其近似值
在下图中可以发现,如果计原多边形(黄色部分)面积为
或
后来刘徽发明一种快捷算法,通过新的多边形与原多边形的面积之差近似成等比级数来计算,可以只用 96 边形得到和 1536 边形同等的精确度,从而得令他自己满意的 3.1416。
南北朝的祖冲之,运用刘徽的算法,继续分割到 12288 边形,求得 24576
边形的面积,得 3.14159261864 <
至于割圆术的算法,简要解释如下:
设上图中圆半径为
得
而且我们可以得到,正
随着 n 的增大,
于是我们可以据此编制割圆术的算法:
据此求在正
割圆术在 16 ~ 17 世纪之前一直都是精确计算圆周率的解决方法。奥地利天文学家克里斯托夫·格林伯格在 1630 年用 1040 边形计算到第 38 位小数,至今这仍是利用多边形算法可以达到最准确的结果(当然,是人工的情况下,我在测试算法的时候,仅用 53.6 ms 就能计算到小数点后 100 位)。
无穷级数
16 世纪及 17 世纪时,
算法如下:
此外,还有莱布尼茨公式:
尼拉卡莎级数:
等一系列级数。但是许多级数的收敛速度很慢,莱布尼茨公式要到 500000
项之后,才会精确到
印度数学家斯里尼瓦瑟·拉马努金在 1914 年发表了许多与
以下为一例:
第一位使用拉马努金公式计算
拉马努金公式开创了现代数值近似算法的先河。此后波尔文兄弟和楚德诺夫斯基兄弟进一步发展了这类算法。后者于 1987 年提出了楚德诺夫斯基公式,如下所示:
此公式每计算一项就能得到
但是很显然,这些公式已经变得非常复杂,难以记忆(虽然没有多少人需要记这个的)。
迭代算法
二十世纪中期计算机技术的发展、革新再次引发了计算
迭代算法因为收敛速度比无穷级数快很多,在 1980 年代以后广为使用。无穷级数随着项次的增加,一般来说正确的位数也会增加几位,但迭代算法每多一次计算,正确的位数会呈几何级数增长。
有一个比较有名的算法是高斯-勒让德算法,于 1975
年被理查德·布伦特和尤金·萨拉明独立发现。日本筑波大学于 2009 年 8 月 17
日宣布利用此算法计算出
该算法的步骤如下:
第一步:设置初始值:
第二步:反复执行以下步骤直到
则
流程图如下:
它以迅速收敛著称,算法每执行一步正确位数就会加倍,只需 25
次迭代即可产生
蒙特卡罗方法
前面介绍的是靠计算得出的方法,但这个却与概率与统计有关。
蒙特卡罗方法(Monte Carlo
method)是以概率统计理论为指导的一类非常重要的数值计算方法,通过进行大量重复试验计算事件发生的频率,按照大数定律,可以求得
布丰投针问题就是其中一个应用的例子。当一枚长度为
另一个例子是随机地往内切四分之一圆的正方形内抛掷大量的点,落在四分之一圆内的点的数量与抛掷点的总量的比值会近似等于
我们以第二个例子为例,如果要编制算法,我们可以使用解析几何的方法,把“随机地往正方形内抛掷大量的点”转化为“定义一个点,该点的横坐标和纵坐标取
它的缺点也很明显:随机、不精确。
结语
还有很多算法,在此我就不一一列举了。
最后我放上一张图,以展示
一般而言,
有人问英国登山家乔治·马洛里为何想要攀登珠穆朗玛峰。他回答说:“因为山就在那儿。”
参考资料
- 圆周率 - 维基百科,自由的百科全书
- 圆周率计算年表 - 维基百科,自由的百科全书
- 割圆术 (刘徽) - 维基百科,自由的百科全书
- 普通高中课程标准实验教科书(必修) 数学(A 版) 必修 3. 人民教育出版社
- 高斯-勒让德算法 - 维基百科,自由的百科全书