冯·诺伊曼可以,你也可以!

在关于顶级数学家如何牛B的各种段子里,一定少不了这个:

一次,冯·诺伊曼在晚会上,女主人勇敢地向他提出一个谜题:

两列火车在同一轨道上以每小时 30 英里的速度相对而行,且相距 1 英里,这时栖在一列火车前面的一只苍蝇以每小时 60 英里的速度朝着另一列火车飞去。当它飞到另一列火车时,它又迅速地飞回来。它一直这样飞过去飞回来,直到两列火车不可避免地发生碰撞。问这只苍蝇共飞了多少英里?

几乎在女主人刚解释完问题的同时,冯·诺伊曼就答道:“1 英里。”

 “太让我惊讶了,你这么快就算出来了。” 她说道。“大多数数学家都没能看出这里面的技巧,而是用无穷级数去计算,这花费了他们很长时间。”“什么技巧?我也是用无穷级数算的。” 冯·诺伊曼回答道。

长期以来,我一直以为是个江湖段子,没想到居然是真有其事。感谢B乎作者ZHANG Zaikun的考证:在1966年美国关于冯·诺伊曼的纪录片中,尤金·维格纳 (Eugene Wigner,理论物理学家及数学家,冯·诺伊曼的合作者,1963 年诺贝尔物理学奖得主) 接受采访时讲述了这个故事。据维格纳所说,向冯·诺伊曼提问者向冯·诺伊曼提问者为马克斯·玻恩 (Max Born,量子力学创始人之一,1954 年诺贝尔物理学奖得主);当冯·诺伊曼给出答案时,“Born was astounded and he said: ‘You are the first one of my scientist friends who saw the solution at once.’ Johnny said: ‘I can't understand that. It's a simple infinite geometrical series.’”

在Norman Macrae所著的《冯·诺伊曼传记》提到,当别人说起这个段子时,诺伊曼同学会补充:the figures actually put to me were not so simple. 估计当时的数字对计算挺不友好的。不过对于从小能心算9位数四则运算的诺伊曼同学来说估计也算不上什么。

单纯从难度来说,这道题即使放在小学奥数也是入门级的。两列火车相遇需要1/60分钟,苍蝇在这段时间里不停的来回飞,飞了多少来回不重要,关键是飞的时间确定了,所以飞过的距离是60英里/分钟 * 1/60分钟 = 1英里。

但人家大佬可是直接用无穷级数心算的,这怎么可能?其实一点也不复杂,你也可以做到。为了计算方便,我们把题目简化一下:

火车的距离是100公里,速度是20公里/小时,两列火车的出发点分别命名A,B。苍蝇的速度是30公里/小时,先从A点出发向B点飞。

每次苍蝇遇到对面方向的火车就掉头,我们可以计算出每次飞过的距离,然后全部加起来就可以了。根据题目条件,苍蝇与火车相对飞行的速度是50公里/小时,计算步骤如下:

  1. 与B点出发的火车距离100公里,2小时后相遇,飞行了60公里,折返点距离A点60公里。A点出发的火车行驶了40公里,与苍蝇距离20公里。B点出发的火车也行驶了40公里,与A点距离60公里。
  2. 与A点出发的火车距离20公里,2/5小时后相遇,飞行了12公里。折返点巨离A点48公里。B点出发的火车行驶了8公里,之前距离A点60公里,现在距离52公里。
  3. 与B点出发的火车距离4公里,4/50小时后相遇,飞行了12/5公里。折返点距离A点48 + 5/12公里。A点出发的火车行驶了8/5公里,位置距离A点48 + 8/5公里,与苍蝇的距离4/5公里。
  4. ...

经过几次推算,我们发现每一轮苍蝇飞过的距离是上一轮的1/5,显然构成了一个等比数列:初始值为60,比例系数1/5,我们就可以套用等比数列求和公式:Sn = a * (1 - q ^ n) / (1 - q),其中a是初始值,q是等比系数,n代表数列的前n项。因为q < 1,所以当n无穷大时,q ^ n我们可以认为是0,这样计算结果苍蝇总共飞过了75公里。和我们用小学数学方法计算得到的结果一致。

有同学可能会问,到底在第几次两列火车才会相遇,答案是无穷次之后。所以我们在求和时n取无穷大。这个问题涉及到古希腊数学家,哲学家芝诺的一个著名悖论:一个人从A点走到B点,要先走完路程的1/2,再走完剩下总路程的1/2,再走完剩下的1/2……如此循环下去,永远不能到终点。中国古代经典《庄子·天下篇》中也提过类似的问题:一尺之棰,日取其半,万世不竭。第1次60公里,第2次12公里,第3次12/5公里,第4次12/25公里,我们可以写一段小程序累加前20项试试:

a = 60
q = 0.2
s = 0
for i in range(20):
    s += a
    a *= q
print(s)

结果是74.99999999999923,非常非常接近75,但总是差那么一点点,循环次数越多越接近。但为什么无穷项加起来就等于75?这个问题的解决要到牛顿莱布尼兹发明微积分才得以解决,不过微积分刚发明的时候理论还不完备,更多只是用于解决工程问题。有兴趣的同学可以去了解一下引爆第二次数学危机的贝克莱悖论,后续经过柯西,康托等一系列数学家的不断努力,才使得微积分的理论体系得到完备,解决了第二次数学危机。我们也得以放心的使用等比数列求和公式,当比例系数q < 1时,无穷项求和直接简化为S = a / (1 - q)。

聪明的同学可以推导出这道题目的更一般状态:火车的速度分别为v1,苍蝇的速度是v2,初始距离是k。我们可以得出:

  1. a = v2 * k / (v1 + v2)
  2. q = (v2 - v1) / (v1 + v2)

假设初始距离是80,火车的速度是15,苍蝇的速度是25。套用上述公式:

  1. a = 25 * 80 / (15 + 25) = 50
  2. q = (25 - 15) / (25 + 15) = 1/4

利用求和公式S = 50 / (1 - 1/4) = 50 * 4 / 3 = 200/3。记熟这个公式,多训练几次,当别人问你这个问题,就可以象诺伊曼同学一样装B了。不但能直接报出结果,还能说出每次折返苍蝇飞了多少距离。

如果有更聪明的同学可以推算一下更更普通的状态:火车的速度分别是v1,v2,苍蝇的速度是v3,初始距离是k。

猜你喜欢

转载自blog.csdn.net/panda_lin/article/details/112263775