莱布尼兹的圆周率算法

在《带孩子玩 Scratch 编程》的那个系列 里,本站给出了一个计算圆周率的示例程序。在那个程序中,我们让笛卡尔的头像沿着圆弧走了一圈,计算了路径的总长度,最后用周长除以直径得到圆周率。

这种圆周率的算法,其实还真有个名字,叫做“割圆法”。简单来说,割圆法就是用多边形逼近圆形,通过计算多边形周长,进而逼近圆周率。像我们那个示例程序,笛卡尔大师走的路径其实是个正360边形,我们计算的也不过是正360边形的周长。所以,较真的读者发现了,程序算出的圆周率,并不是 3.1415926…,而只能精确到小数点后的第4位。

其实,计算圆周率还有更好的算法,只不过那个系列定位于让学龄前儿童可以理解,小朋友连圆周率是什么还懵懵懂懂,如果一上来就搬弄算法,肯定是不可取的。

作为续集,今天则可以扩展一下,介绍另一位数学大师和他的圆周率算法。说来也巧,今天说的这位大师,正是笛卡尔的学生,德国数学家 戈特弗里德·威廉·莱布尼茨(Gottfried Wilhelm Leibniz)。 

莱布尼兹

莱布尼兹生于 1646 年,是德国近代最伟大的哲学家、数学家之一,伟大到“之一”都可以近似忽略的地步。他以和牛顿同时发明了微积分而闻名。今天我们还在使用的积分符号“∫”,就是莱布尼兹首先采用的记号。

我们在介绍笛卡尔时,讲了一段花边趣闻,关于莱布尼兹,也有很多有趣的故事。他有一段名言,可能会很受小朋友欢迎:

It is unworthy of excellent men to lose hours like slaves in the labour of calculation which could safely be relegated to anyone else if machines  were used.

“聪明人不值当在计算上浪费时间,那样是像奴隶一样的重复劳动,交给别人用机器算就得了。”

读者没有看错,这是出于 17 世纪的莱布尼兹之口。他那时连电子计算器的影子都没有(只有一些齿轮式机械计算器),就已经说出了这等豪言壮语。而我们今天科技这么发达,很多国内家长和教育机构还以强化孩子的口算、心算能力为追求,不能不令人唏嘘。

我们言归正传,莱布尼兹计算圆周率的办法是利用无穷级数

1 – 1/3 + 1/5 – 1/7 + 1/9 – … = π/4

在大学一年级的微积分课程中,就会知道,这是将反正切函数 arctan(x) 做泰勒展开,在 x = 1 时得到的无穷级数。显然,arctan(1) =  π/4。

这个算法非常便于用计算机程序实现,只需要 12 块 Scratch 积木:

莱布尼兹圆周率算法

在“重复执行”之中,让“我的变量”从1开始,每次递增2,然后计算 4 除以“我的变量”,将结果累计在变量 pi 中,累计时加一次、减一次,如此循环 50万次。

得到结果:

莱布尼兹圆周率算法运行结果

这几乎是在 Scratch 中计算圆周率 π 最简单的方法,也很忠实地践行了莱布尼兹“能用计算机算的就不值得聪明人自己手算”的原则。

最后,相信读者发现了,重复执行 50 万次才能把圆周率的精度算到小数点后6位,实在不算“高效”。事实上,如今用计算机计算圆周率的科学家,早已不再使用莱布尼兹的方法。关于圆周率的精确计算,有一本小书《从圆周率计算浅谈计算数学》进行了深入浅出地介绍,感兴趣的读者可以在京东上凑单哦。

发表评论

电子邮件地址不会被公开。