使用此 Python 脚本模拟巴贝奇差分机

十九世纪数学家查尔斯·巴贝奇的串行计算机器遇到了 Python 代码的对手。
73 位读者喜欢这篇文章。

查尔斯·巴贝奇 (1791–1871) 是一位兴趣广泛的狂热数学家。他因构想计算机的想法而闻名,并独自开发了他称之为 差分机 的机器来进行串行计算。它是一台机械机器,带有一系列轴和齿轮来进行计算,输出结果是一张打印表格。我最近开始阅读他 1864 年出版的书籍《一位哲学家的生活片段》,他在书中解释了差分机是如何诞生的。

他的引擎旨在解决的问题之一与孩子们玩弹珠并将它们排列成渐进的金字塔形状的想法有关,顶行一个弹珠,第二行两个,第三行三个,依此类推。对于小金字塔,您可以简单地数弹珠来找出有多少个。但巴贝奇想要创建一个自动列表或表格,其中一列显示行数,另一列显示弹珠总数。

Pyramids of marbles

opensource.com

他谈到的差异首先是行数中的所有连续差异(在本例中等于 1),其次是从一行到下一行添加的弹珠数量之间的差异(也为 1)。据我所知,差分机连续地将每新行的弹珠数量添加到之前的总数中,从而创建表格。

因此,我开始在脑海中玩弹珠,可以这么说。我发现自己凌晨 5 点在床上醒来,在精神上摆弄和数弹珠。让我印象深刻的一件事是,对于六行,总数是 21,对于七行,总数是 28——两者都可以被 7 整除。对于八行或九行,总数可以被 9 整除。随着我增加行数,这种模式再次出现。所有这些都在我的脑海中(与此同时,我希望它停止,这样我就可以继续睡觉),所以它不是很系统化。

当我醒来时,我决定尝试弄清楚这是为什么,以及我是否可以预测哪些数字会显示这种现象。答案让我惊讶:事实证明,每个奇数行的弹珠数量都可以被该数字整除。

但是,我如何证明这一点呢?这是一个例子。对于七行的金字塔,首先看看底行有六个弹珠的六行金字塔。创建一些行对:第一行和第六行,第二行和第五行,第三行和第四行。对于这三对中的每一对,总和为 7;因此,这三组对的总和为 21,如果您为下一行添加 7,它仍然可以被 7 整除。

您可以继续使用具体示例进行此操作,但目标是普遍理解这种现象。想象一些随机的偶数行 N。创建您的对,然后将 1 加到 N,2 加到 N-1,3 加到 N-2,依此类推。在每种情况下,总和都将为 N+1。这些对的数量将为 N/2,因此弹珠的总数将为 N/2*(N+1),这是一个可以被 N+1 整除的数字。为下一行添加 N+1 个弹珠也可以被 N+1 整除。

例如,您可以说一个有 128,948 行的金字塔将总共有 8,313,857,826 个弹珠;一个有 128,949 行的金字塔将有 8,313,986,775 个弹珠,并且这两个总数都可以被 128,949 整除。

我不知道巴贝奇是否考虑过这一点,但很可能,即使他考虑过,他也会说这只是代表了乘法和除以六位数数字的数学问题,而他想要一台机器来做这种事情。他确实设想并开始着手 分析机,这也许可以完成这种运算。

如今,这对计算机来说是微不足道的工作,因此这里有一个 Python 脚本可以在您丢失弹珠之前计算弹珠数量——只需 4 行代码。

#!/usr/bin/env python
# babbage.py
"""
Using Charles Babbage's conception of a marble-counting
operation for a regular pyramid of marbles,starting with
one at the top with each successive row having one more 
marble than the row above it.

Returns total number of marbles in a pyramid of any size.
"""

MarbRows = input("Enter the number of rows of marbles:  ")
MarbRows = int(MarbRows)

MarbNum = int((MarbRows)*(MarbRows+1)/2)
print ("The number of marbles is "+ str(MarbNum))

这就是巴贝奇差分机与 Python 的相遇方式。

接下来阅读什么
标签
Greg Pittman
格雷格是肯塔基州路易斯维尔的一位退休神经科医生,长期以来对计算机和编程感兴趣,从 1960 年代的 Fortran IV 开始。当 Linux 和开源软件出现时,它激发了学习更多知识的决心,并最终做出贡献。他是 Scribus 团队的成员。

3 条评论

在德语中,这个公式被称为“Gaußsche Summenformel”,因为据说卡尔·弗里德里希·高斯在 9 岁时意识到了这一点。

我在英语中找不到太多关于它的信息,只有这个
https://mathbitsnotebook.com/Algebra2/Sequences/SSGauss.html

谢谢。弹珠的好处在于,您还可以通过将金字塔加倍来创建类似平行四边形的结构,从而得出数学公式。

回复 作者: tj

有趣的文章。我喜欢它。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.