http://cn.engadget.com/2011/04/27/charles-babbages-difference-and-analytical-engines/ 瘾科学:查尔斯.巴贝奇的差分机与分析机 由
Andy Yang 于 16 hours 之前发表
文章分类: 科技新闻 查尔斯.巴贝奇(Charles Babbage)生于 1791 年,卒于 1871 年,是活跃于十九世纪的数学家、发明家兼机械工程师。那是个人们相信机械的力量可以做到一切的时代,源自于工业时代的进步带来了蒸汽机和各种机械装置,将人们从各种劳动中解放了出来。就是在这样的环境下,巴贝奇开始了对数学制表的机械化的研究 -- 在那个没有计算器和计算机的时代,很多计算最快的方式其实是用查表的,但是靠人工来制表不仅费时费力,而且难免会有计算错误、抄写错误、校对错误、印制错误等各式各样的问题。巴贝奇在剑桥求学(地名,不是学校)时,发现到了这个现象,于是就将改善制表时的各种问题当作了毕生的志业。
听起来这么厉害的人,我们都应该读过他的传记了啊?为什么最后这个名字却没有多少人知道呢?那是因为很可惜的,最后他因为经费、个性、大环境等种种因素而失败了,没能在十九世纪就掀起一次计算器革命。然而他的想法和图纸却留了下来,让我们有机会可以一探这位天才在几乎 200 年前的维多利亚时代,是如何差一点改变了世界。让我们一起来看看巴贝奇的计算器吧!
什么是差分机? 差分机又称差分引擎(Difference Engine),是巴贝奇毕生的研究所在。和你想象的可能有些不同,这其实并不是一台一般意义上的「计算器」 -- 当时可以做简单的加减乘除的机械装置已经存在,而巴贝奇的机器也没打算和他们抢工作。准确的说,巴贝奇的机器是一台「多项式求值机」,只要将欲求值的一元多次方程式输入到机器里,机器每运转一轮,就能产生出一个值来。假设我们以 F(x) = x²+4 做为例子好了,差分引擎吐出来的结果,就会是 F(1) = 5,F(2) = 8,F(3) = 13,F(4) =20...etc. 直到系统停止为止。机器运作最重要的基础,在于其实要求值,完全只需要用到加减法而已喔!
上图同样是 F(x) = x²+4 的例子。第一步是先算出 F(1) 和 F(2) 的值之间的差(8-5=3),称为第一阶差( First Difference)。如果这个值和 F(2) 及 F(3) 之间的差(13-8=5)不同的话,就拿这两个第一阶差再算一次差( 5-3=2),称为第二阶差( Second Difference)。在这个例子里,第二阶差每一个都是 2,所以就不用再计算下去了。一次方程式最多只会有第一阶差,二次会到第二阶差,N 次会到 N 阶差...etc。一但有了一个固定不变的差数后,就可以开始往前推算回去,接下来的每一个值,就是将差数和前一阶的上一个值相加,即可获得。例如求 F(4) 时,先将 2 加上上一阶差的值 5 得到 7,再将 7 加上 F(3) 的值 13,就会得到 F(4) = 20,以此类推。以人类的角度来看似乎略显得有些啰嗦,但这正是最适合机械计算的结构了。
差分机引擎一号 巴贝奇的想法很简单,他想要造一台机器,从计算一直到最后印结果全部都自动化,在减少人工的同时,全面地消除可能出错的一切问题点。他开始设计的第一台机器称为差分机引擎一号(Difference Engine No.1),由英国政府补助出资,工匠 Joseph Clement 打造,预计完工后将有 25,000 个零件,重 15 吨。可惜,一方面是因为大量精密零件制造困难,加上巴贝奇不停地边制造边修改设计,从 1822 到 1832 年的十年间,巴贝奇只能拿出完成品 1/7 的部份来示范(上图)。但即使如此,差分机引擎运转中的精密仍然令当时的人叹为观止。可惜,再精采的演出,也无法改变巴贝奇已经严重超支的事实,再加上他不停的在制作过程中修改设计和其他的一些因素,令他和工匠师傅 Clement 间时有争论。最后不仅导致 Clement 辞职,差分机引擎一号也很不幸地一直未能完成。最后 12000 个零件被熔掉回收,英国政府在 1842 年的最后清算发现,整个计划一共让英国政府赔掉了 17500 英镑 -- 约等同于 22 台蒸汽火车头,一个相当惊人的数字。
差分机引擎一号如果完成的话,25000 个零件会差不多平均分摊在计算的部份和印出的部份里,两者是不可分开的。1830 年的设计显示它可以计算到第六阶差,最高可以存 16 位数。
分析机引擎 不过对巴贝奇来说,差分机引擎不是个「失败」。事实上他本来就对制造差分机引擎的行政工作感到无比地厌烦,和英国政府结束合作意味着他可以专心的坐下来,做他最拿手的事 -- 设计更强大的机器。在 1834 年他设计出了一台更加野心勃勃的机器,称为分析机引擎(Analytical Engine)。列出它的功能可以让人眼睛都突出来:首先,它的机械结构被分成了「计算单元」和「储存单元」两个部份,其中计算单元不仅内建四则运算,而且还可以「存」四组不同的运算方程式,用穿孔卡片(Punch Card)加载到机器里。这台机器在设计上甚至有能力进行条件分支(if)、循环、平行处理等程序逻辑,只是巴贝奇的年代自然还没有这些名词的出现。最后的结果还可以选择印刷、打卡、绘图等多种输出方式,从某些方面来说,它计算、储存、I/O 三项分离的设计,和今日的计算机并无二致,只是最后分析机引擎只停留在了纸上,从没做成实机过。
提到分析机引擎,就不能不提一下另一个传奇的人物:
爱达.勒芙蕾丝(Ada Lovelace)。爱达的父亲就是英国的大诗人拜伦,只是拜伦在爱达九岁时就过世了。爱达小时候身体并不好,但并没有因此落下教育,特别是(以当时的女性来说还蛮稀少的)科学和数学。她的家庭教师之一 Augustus De Morgan 对她数学能力的评价非常之高,认为她非常有机会成为第一流的数学家。爱达和巴贝奇认识于 1833 年,之后一直有维持通讯,因此对巴贝奇在差分机和分析机引擎方面的进展颇有了解。1842-43 年间,爱达翻译了另一位意大利数学家
Luigi Menabrea(这位老兄后来做到意大利首相)关于分析机引擎的著作时,应巴贝奇的要求在后面附上了七篇她自已的手记。这七篇笔记比 Luigi 的原文还长,其中第七篇里爱达用非常详细的描述,设想了如果分析机引擎成真的话,要如何用它来求伯努利数列的值。虽然机器是机械的不是数字的,计数方式也是十进制的不是二进制的,但一般仍然认为这是世界上第一个计算机程序。
差分机引擎二号
在分析机引擎之后,巴贝奇运用在开发过程中得到的心得,重新回头设计了差分机引擎。运用新的方法,在 1847-49 年间设计的差分机引擎二号可以计算到 31 位数,可以计算到第七阶差,而且零件数还只有差分机引擎的 1/3。可惜的是,这时候巴贝奇已经找不到愿意出资的人,因此差分机引擎二号也就停留在了纸上。到巴贝奇一生结束,一共只留下来了 1/7 的差分机引擎一号,一些实验性的分析机引擎零件,和大量的笔记和图纸。
故事结束了吗?当然没有。事实证明巴贝奇留下来的详细图纸才是最重要的遗产,在 1985 年时伦敦科学博物馆决定照着巴贝奇的图纸,打造一台完整的差分机引擎出来,回答两个历史性的问题:这东西,到底做不做得出来?做得出来的话,能照着巴贝奇的说明操作吗?整个计划一如巴贝奇当年的翻版,充满了经费困难、生产问题、一推再推的期限和无数的技术困难。最主要的,因为只是纸上的概念,巴贝奇并没有注明材料、工法等事项,因此工程学家只能用现代技术去反推当时的技术上限,确保做出来的机器是那个年代也能完成的。整台机器到 2002 年才完工,一共花了 17 年的时间,最后的成果,就是这个:
http://v.youku.com/v_show/id_XMjE5MTU4Mjcy.html机器本身的部份大约在 3:30 开始,前面是巴贝奇的生平。完成的差分机引擎重五吨,长 11 英呎、高 7 英呎、最窄处 18 英吋,有 8000 个各式零件。机器的运作一如巴贝奇的描述,虽然单论运算能力来说是比今日的计算机差远了,但至少完全证明了巴贝奇的设计并没有错。换了一个时空,说不定信息革命还能提前个五十年呢!
当然,剩下来的问题就只有一个了:那分析机引擎呢?巴贝奇的儿子亨利.巴贝奇花了相当长的时间,试图让分析机引擎成真,但最多也就是在 1910 年时完成了没有程序化能力的一部份计算单元,从此巴贝奇的名字便消失在历史的长河中, 1930、1940 年代的科学家重新开始制造计算机时,根本就已经忘了巴贝奇的成就,不得不重新再走一次巴贝奇走过的老路,有趣的是,最后的基本架构依然是如此地相似。目前有计划要让分析机引擎也像差分机引擎一样「死而复生」,希望能再一次地从实物中,了解查尔斯巴贝奇的天才。