Scratch趣味程序:欧拉和巴塞尔问题

接着上集来说,伯努利 兄弟还对一个著名的数学问题非常感兴趣,那就是“所有自然数的倒数平方和是多少”。由于伯努利兄弟住在瑞士的巴塞尔,他们对这个问题讨论最多,因此,这个问题也被称为“巴塞尔问题”。

为了让低年级的小朋友明白这个问题的意思,我们编造了一个故事:

说伯努利兄弟的父亲——尼古拉斯老爷子是个大善人,见不得穷人受苦。尼老爷子家里有个牧场,每天能产 6 大桶牛奶。有一天,老爷子突发奇想,决定从今往后把这些牛奶分给穷人。

尼老爷子吩咐家丁去周边寻找穷人。第 1 天,家丁搜寻了家边上 1 排、1 列村庄,找来了 1 位穷人。尼老爷子就把当天产的 6 大桶奶都给了他。

第 2 天,家丁搜寻了家边上 2 排、2 列村庄,2 排、2 列也就是 4 座村庄,因此找来了 4 位穷人。尼老爷子就把当天产的 6 大桶奶平分给这 4 个穷人,每人得到了 1 桶半(1.5 桶)。

第 3 天,家丁搜寻了家边上 3 排、3 列村庄,3 排、3 列也就是 9 座村庄,因此找来了 9 位穷人。老爷子又就把当天产的 6 大桶奶平分给这 9 个穷人,每人得到了不到 1桶。仔细算的话,6 除以 9,得到的是一个小数,只有 0.666666… 桶。

Basel Problem
Basel Problem

以此类推,照这样永远进行下去,以后每天找来的穷人越来越多,每个人分到的牛奶越来越少。

问,从第 1 天就开始领牛奶的那个人,他永远不断地领下去,最多能领多少桶牛奶。

这个问题难倒了当时全世界的数学家,伯努利兄弟还写信问 莱布尼兹、牛顿,他们也给不出准确的数字。

但是他们可以证明,由于越往后能领到的牛奶就越少,最终接近于无穷小,把这无限多个无穷小加在一起,最后得到的是一个有限大小的数字。只不过,没人知道这个总数具体是几。

Scratch Game: Basel Problem

时间到了 18 世纪,这时还是在瑞士的巴塞尔,有一位天才少年破解了这个问题。他的名字叫莱昂哈德·欧拉(Leonhard Euler)。

欧拉是怎么解决巴塞尔问题的,在学习大学数学以前无法讲明白,但我们可以用 Scratch 编一个程序,用电脑算一算巴塞尔问题的结果接近多少,看看跟欧拉的计算是否吻合。

代码量:29块积木

背景:Scratch 内置的 Urban

角色:Scratch 内置的 Milk、Witch(上图中的 Bernoulli 没有实际作用,可加可不加)

变量我的变量,此外,再创建两个变量:suma

代码

Witch(代表欧拉)的代码:

Scratch Game Basel Problem - code part 1

其中的文字为:“如果从第一次就开始领,总共领到的量,是这个数的平方:”

Milk 的代码:

Scratch Game Basel Problem - code part 2

运行

点击绿旗子后,我的变量从 1 开始逐渐增大,代表累加的次数;牛奶盒将汇报每次的奶量,也就是变量 a;牛奶盒的大小会不断缩小,并往右移动;sum 就是从第 1 次算起,程序运行过程中领到牛奶的总量。

用鼠标点一下欧拉,可以显示当前 sum 的平方根是多少。

当我的变量增长到 600 次以上后,sum 的平方根就会超过 3.14,并还将继续缓慢增大。

Scratch Game Basel Problem - result

3.14 不是一个陌生的数字,对了,我们前面提到的圆周率 π,不就是 3.1415926… 吗。如果你有耐心,再等下去,程序运算的结果会更接近圆周率。

欧拉计算的结果也正是这样:

1 + 1/2² + 1/3² + 1/4² + … = π²/6

这就是巴塞尔问题的答案。具体到我们的故事,从第一次就开始领奶的那个人,最终得到的总数将是圆周率乘以圆周率,也就是:

3.1415926…   ×  3.1415926…  =  9.8696044… 桶

它的平方根,也就是圆周率本身,π。

这位年轻的瑞士少年——莱昂哈德·欧拉,通过解决巴塞尔问题一夜成名,跻身那个时代最聪明的数学家行列。事实上,不如说是数学从此迎来了一个新的时代,一个欧拉大放光彩的时代。

发表评论

邮箱地址不会被公开。