Ada Lovelace计划实际上做了什么?

图片

Microsoft创始集是计算机历史上最著名的集之一。 1975年,保罗·艾伦(Paul Allen)飞往阿尔伯克基(Albuquerque),演示他和比尔·盖茨(Bill Gates)为Altair微型计算机编写的BASIC解释器。 由于他们没有可用的Altair计算机,因此他们使用由他们编写的在哈佛计算机系统上运行的模拟器测试了解释器。 该仿真器仅基于已发布的Intel 8080处理器规格,当艾伦最终在真正的Altair计算机上(希望购买软件的人面前)启动解释器时,他甚至都不知道该程序是否可以运行。 她赚了。 次月,艾伦和盖茨正式成立了新公司。

在BASIC解释器Allen和Gates诞生一百多年之前,Ada Lovelace编写并发布了一个计算机程序。 她还编写了一个计算机程序,仅从描述中便知道。 但是,与BASIC解释器不同,她的程序从未执行过,因为从未为其编写过计算机。

Lovelace通常被称为世界上第一个计算机程序。 但是,并非所有人都同意应该称其为“。 Lovelace的遗产成为计算机历史上最热门的话题之一。 沃尔特·艾萨克森(Walter Isaacson)写道,关于她的贡献的程度和价值的辩论“几乎没有学术意义”。 Lovelace是女人这一事实不可避免地引发了争议。 历史学家引用了各种证据来证明授予她的荣誉与案子是一致的,或者相反,这是不配的。 但是他们花很少的时间解释她出版的作品的技术细节,这很可惜,因为技术细节代表了这个故事中最有趣的部分。 谁会不知道1843年编写的程序应该如何工作?

老实说,Lovelace计划很难向市民解释。 但是正是她程序的复杂性才使她如此出色。 她应该被称为第一位程序员,还是没有,她的程序记录的准确性超过了以往。 她仔细考虑了哪些操作可以组合成可以重复的组,从而发明了一个循环。 她意识到跟踪变量变化状态的重要性,并提出了反映这些变化的记录。 作为程序员,我惊讶于Lovelace的工作与当今编写软件的经历十分相似。

因此,让我们仔细看看Lovelace程序。 她设计它来计算伯努利数 。 要了解它是什么,您需要将几千年的历史追溯到数学中最古老的问题之一的开始。

学位总和


毕达哥拉斯人生活在地中海沿岸,崇拜数字。 他们的爱好之一是制作卵石三角形。



一块石头,然后是两块石头,再排成三块石头组成的三角形。 添加另一排三块石头,以形成六块石头的三角形。 此过程可以继续,每次增加一行,结石数量增加一。 六行三角形包含21块石头。 423行的三角形中有几块石头?

毕达哥拉斯人正在寻找一种无需累加即可计算下一行总和的方法:

1 + 2 + 3 +⋯+ n

结果,他们意识到,如果将两个相同大小的三角形彼此相邻放置以形成一个矩形,则可以找到该矩形的面积并将其分成两个部分,以获取每个三角形中的宝石数量:

1 + 2 + 3 +⋯+ n = n(n +1)/ 2

阿基米德研究了类似的问题。 他对以下顺序感兴趣:

1 2 +2 2 +3 2 +⋯+ n 2

可以想象它是一列越来越大的正方形(由微小的立方体组成)的一列,它们以金字塔的形式彼此叠置。 阿基米德想知道是否有一种简单的方法来说明创建具有423个关卡的金字塔需要多少个立方体。 他写下了该问题的解决方案,该解决方案还可以进行几何解释。



可以将三个金字塔组合在一起,以便它们形成一个矩形棱柱,在其一端有一个高度为一个立方体的小壁架。 这个壁架是一个三角形,遵循与毕达哥拉斯人的石三角形相同的规则。 因此,整个图形的体积由以下公式给出:

3(1 2 +2 2 +3 2 +⋯+ n 2 )=(n + 1)n 2 +(1 + 2 + 3 +⋯+ n)

将毕达哥拉斯方程式替换为前n个整数的和,并进行了一些代数运算,我们得到:

1 2 +2 2 +3 2 +⋯+ n 2 = n(n +1)(2n +1)/ 6

499年,印度数学家和天文学家Ariabhata发表了他的被称为Ariabhatia的著作,该著作给出了一个计算立方和的公式:

1 3 +2 3 +3 3 +⋯+ n 3 =(1 + 2 + 3 +⋯+ n) 2

仅在500年后,才发布了前n个正整数与第4个度的和的公式。

到此时,您可能会提出一个问题-是否有任何通用方法可以计算升到k的幂的前n个整数的和? 数学家对此也很感兴趣。 德国数学家约翰·福哈伯(Johan Faulhaber)在命理学方面略有先进,他能够得出直到17级的整数和的公式,并于1631年发布。 但是花了他很多年,他没有给出一个总体解决方案。 布莱斯·帕斯卡(Blaise Pascal)最终在1665年提出了一种广义方法,但是该方法依赖于对升到先前度数的整数之和进行计数。 例如,要计算升到6度的前n个正整数的和,您首先需要学习如何计算升到5度的前n个正整数的和。

瑞士数学家雅各布·伯努利Jacob Bernoulli)死后发表的一篇论文中给出了一种更实用的广义解决方案,他于1705年去世。伯努利从推导用于计算在第一,第二,第三和第四度中求出的前n个正整数之和的公式开始。 他以多项式的形式编写它们:

1 + 2 + 3 +⋯+ n = 1 / 2n 2 +1 / 2n

1 2 +2 2 +3 2 +⋯+ n 2 = 1 / 3n 3 +1 / 2n 2 +1 / 6n

1 3 +2 3 +3 3 +⋯+ n 3 = 1 / 4n 4 +1 / 2n 3 +1 / 4n 2

通过使用Pascal三角形 ,Bernoulli意识到这些多项式遵循可预测的模式。 实际上,Bernoulli将每个项的系数分为两个因子,一个可以用Pascal三角形确定,另一个可以从一个有趣的性质中得出,多项式中的所有系数都可以归一。 不难理解每个成员应采用哪个指数,因为它们也遵循可预测的模式。 每个系数的因数(必须根据“和等于1”的规则进行计算)形成了一个被称为伯努利数的序列。

伯努利(Bernoulli)的发现并不意味着现在可以轻松地计算出加到任意幂的前n个正整数之和。 为了计算提高到k的幂的前n个正整数的总和,有必要找出直到kth的所有伯努利数。 每个伯努利数只有在知道所有先前数的情况下才能计算。 但是,计算一个较长的伯努利数序列比计算每个加到幂的数之和要容易得多,因此伯努利的发现对于数学来说是一个重大突破。

巴贝奇


查尔斯·巴贝奇(Charles Babbage)生于1791年,距伯努利(Bernoulli)逝世已近一百年。 我对他一直有这样的想法,以至于他开发了但没有建造机械计算机。 但是我从来没有真正理解这台计算机应该如何工作。 事实证明,基本思想非常容易理解。 Lovelace程序原本可以在其中一台Babbage机器上运行,所以我们需要再做一点题外话,并讨论一下这些机器如何工作。

巴贝奇想出了两个独立的机械计算机。 第一台叫做差速器 。 在发明袖珍计算器之前,人们依靠对来计算大数的乘积。 大型对数表从根本上来说并不难编译,但是编译它们所需的计算数量导致了这样一个事实,即在巴贝吉时期,它们经常包含错误。 对此感到恼火的是,巴贝奇决定创建一台能够机械地创建对数表而不会出错的机器。

差异机器不是计算机,因为它只能加减。 她使用了法国数学家加斯帕德·德·普罗尼Gaspard de Prony)发明的方法,后者将桌子的构造过程分成了几个小步骤。 这些步骤仅需加减,这意味着可以使用一小群没有数学技能的人来构建表格。 de Proni方法(称为除差法)可用于为任何多项式编译表。 多项式已经可以用于对数和三角函数的近似计算。

为了想象这个过程是如何工作的,请考虑以下简单的多项式函数:

y = x 2 +1

分割差异方法可以找到不同x值的连续y值之间的差异。 然后是这些差异之间的差异,然后是最后一个差异之间的差异,直到出现恒定差异为止。 然后可以将该差用于通过加法获得下一个多项式值。

由于指示的多项式仅具有第二阶数,因此仅需两列差即可找到常数差:

Xÿ差异1差异2
1个2
253
31052
41772
52
............


现在,知道常数差为2,我们可以使用一个加法找到x为5时y的值。 将2和7加到Diff 1列中的最后一个值,得到9。将9和17加到y列中的最后一个值,我们得到26 —我们的答案。

表的每个差异列的巴贝奇差异机都有自己的带有齿轮的物理列。 每个齿轮代表一个小数位,整列代表一个十进制数。 差速器机器有八列带齿轮的齿轮,因此它可以编译多项式表,最高可达七度。 最初将这些列设置为与预先计算的差异表的前行一致的值。 然后,操作员必须旋转曲轴,当将存储在每个列中的值添加到以下内容时,这会导致机器周围产生恒定差。

巴贝奇设法建立了差分机的一小部分,并用它来在聚会上展示他的想法。 但是即使花了那么多钱,他们也足以建造两艘大型军舰,他还是无法完成自己的汽车。 在18世纪初,巴贝奇(Babbage)找不到能够向他生产正确数量的齿轮的人。 高精度机器问世之后,差动机器的工作版本才在1990年代制造出来。


结果,巴贝奇(Babbage)对差分机失去了兴趣,意识到您可以创建功能更强大,更灵活的机器。 今天,他的“ 分析机 ”被称为巴贝奇的机械计算机。 分析机的齿轮柱与差速器的齿轮柱相同,但如果后者只有八列,则分析器的齿轮柱应具有数百根。 可以使用打孔卡(例如提花织机)对分析机进行编程,并且可以对它进行除法运算,而不仅仅是加法和减法。 为了执行这些操作之一,机器的一部分称为“磨机”将以所需的配置进行自身重建,从用于存储数据的其他列中读取操作数,然后将结果写入其他列。

Babbage之所以称其为分析机,是因为它足够强大,可以进行类似于Matanalysis的操作。 差分机可以生成多项式表,但是解析机可以计算出例如另一个表达式的多项式乘法系数。 这是一个了不起的机器,但是英国政府做出了明智的决定,拒绝了其融资请求。 于是巴贝奇去了国外,去了意大利,试图在那里寻求支持。

翻译笔记


在都灵,巴贝奇会见了意大利工程师和未来的总理路易吉·费德里科·梅纳布雷亚。 他说服Menabrea撰写了分析仪功能的概述。 1842年,梅纳布雷亚用法语发表了关于这一主题的著作。 次年,Lovelace将Menabrea的作品翻译成英文。

Lovelace(当时称为Ada Byron)在1833年的一次聚会上遇见了Babbage,当时她17岁,他才41岁。Lovelace被Babbage差速器击中。 但是她能够弄清楚它是如何工作的,因为她从小就积极地学习数学。 她的母亲安娜贝拉·米尔班克(Anabella Milbank)决定,女儿教育的坚实数学基础会使她从父亲,著名诗人拜伦勋爵(Lord Byron )拥有的狂野和浪漫的自然气息中丧胆。 在1833年相识之后,洛夫蕾丝和巴贝奇仍然留在整个社交圈中,并且经常交往。

艾达·拜伦(Ada Byron)于1835年与威廉·金(William King)结婚。金后来成为洛芙蕾丝伯爵,随后艾达成为洛芙蕾丝伯爵夫人。 她甚至生下三个孩子,并继续学习数学,并担任了发现摩根定律的老师奥古斯都·德· 摩根 。 Lovelace立即意识到了分析仪的潜力,并欣然同意与他合作推进这一想法。 她的朋友邀请她为英语听众翻译Menabrea的作品。

该论文简要介绍了差异分析仪的操作,然后显示了分析分析仪将超越它的范围。 该分析仪功能强大,以至于“可以在短短三分钟内形成两个数字相乘的结果,每个数字由二十个字符组成”。 Menabrea给出了机器可能性的其他示例,展示了它如何解决线性方程组的简单系统并分解两个二项式相乘的结果。 在这两种情况下,梅纳布雷亚都提出了洛夫莱斯所谓的“发展图”,描述了计算正确答案所必需的操作顺序。 这些程序与Lovelace程序是一个程序一样,它们在工作开始前一年就出版了。 但是,正如我们将看到的,Menabrea的程序只是可能的例子。 从它们不需要任何分支或循环的意义上说,它们都是琐碎的。

Lovelace在她对Menabrea的作品的翻译中添加了一些注释,总的来说,它们比原始作品更长。 在那里,她为计算做出了主要贡献。 在Lovelace对分析机的最初描述中所作的注释A中,她详细地(有时还作了抒情性的)解释说,该机将能够执行任意数学运算。 她预见到,这样的机器将不仅限于处理数字,而且能够处理任何对象,“它们的基本相互作用可以用抽象的操作科学来表达,并且可以适应操作记录和机器机制。” 她补充说,有一天,这样的机器将能够创作音乐。 这样的预测更加引人注目,因为梅纳布雷亚本人认为这台机器只是自动化“冗长而乏味的计算”的工具,它将释放杰出科学家的智力,用于更高级的研究。 如注释A所示,洛夫莱斯的神奇远见是我们今天尊重它的主要原因之一。

另一个著名的注释是G. Lovelace的注释,首先指出,尽管其功能令人印象深刻,但不能“思考”该分析仪。 正是这个脚注,艾伦·图灵(Alan Turing)稍后将称为“艾达·洛夫莱斯(Ada Lovelace)的反对”。 但是,洛夫雷斯继续说道,这辆车有能力实现惊人的事物。 为了展示处理更复杂问题的能力,Lovelace提供了她的程序来计算伯努利数。

它的全文以展开的“发展图表”的形式出现,在此处可以查看 Lovelace在注释D中描述的格式。 这实质上是由数学符号表示的操作列表。 似乎Babbage或Lovelace并没有为分析机开发一套操作代码。

尽管Lovelace描述了一种将伯努利数的完整序列计算到一定极限的方法,但她的程序仅显示了这一过程的一个步骤。 她数了她命名为B7的数字,现代数学家将其称为第八届伯努利数字。 因此,她的程序解决了以下等式:

B7 = -1(A 0 + B 1 A 1 + B 3 A 3 + B 5 A 5

在此,每个项表示多项式中的系数,该系数表示一定程度的整数和。 这里我们谈论的是八次幂,因为第八个伯努利数首先出现在公式中,用于将正整数之和提高到八次幂。 数字B和A代表伯努利发现的两种因素。 数字B1到B7是根据Lovelace编号的各种伯努利数字。 A0 A5 , . A0, A1 A3 . n , . n = 4.

A 0 =−1/2⋅(2n−1)/(2n+1)

A 1 =2n/2

A 3 =2n(2n−1)(2n−2)/(2⋅3⋅4)

A 5 =2n(2n−1)(2n−2)(2n−3)(2n−4)/(2⋅3⋅4⋅5⋅6)

C , , , . A 0 B 1 A 1。然后开始循环,重复两次,以计算B 3 A 3和B 5 A 5,因为它们的读取方式相同。在对每个乘法进行计数之后,将结果加到先前的乘法中,因此在程序结束时将获得全部金额。

显然,转换为C不能完全复制Lovelace程序。它在堆栈上声明变量,而Lovelace变量更像寄存器。但是,他使Lovelace计划中最有说服力的部分更加明显。 C程序有两个while循环,一个在另一个循环内。 Lovelace程序没有while循环,但它对操作进行了分组,并在注释中说明了为什么应重复执行这些操作。原始程序中的变量v10并转换为C,它作为计数器工作,随着循环的每一步而减少-每个程序员都熟悉类似的设计。通常,除了名称模糊不清的大量变量外,C程序看起来并不陌生。

还值得注意的是,由于它的一个细节,将Lovelace程序转换为C并不是很困难。与Menabrea表不同,她的表具有“变量值变化的迹象”列,这使跟踪状态变化变得更加容易。她向每个变量添加上标以指示存储在变量中的连续值。例如,索引2表示所使用的值是从程序开始分配给变量的第二个值。

第一程序员?


将Lovelace程序转换为C之后,便能够在计算机上运行它。令我失望的是,结果不正确。搜索错误之后,我终于意识到问题不在于我的代码-该错误包含在原始程序中!

在“开发图表”中,Lovelace在第四次操作v5 / v4中进行了编写。但是v4 / v5是正确的。此错误可能会在打印时出现,但在Lovelace时不会出现。一种或另一种方式,这是最古老的计算机错误。我花了大约十分钟的时间寻找历史上的第一个错误,这让我感到惊讶。

另一个博客作者Jim Randall 将Lovelace程序翻译成Python还指出了该划分错误和其他两个问题。已发布的Ada Lovelace程序告诉我们哪些小错误?她可能不仅试图编写演示,还试图编写真实的程序。毕竟,您不能编写玩具程序以外的其他东西,以避免出错吗?

维基百科的一篇文章说,Lovelace是第一个发布“复杂程序”的人。也许这恰恰是值得其成就感的体现。 Menabrea在他的工作中,在Lovelace翻译出版的前一年发布了“发展图表”。巴贝奇还写了二十多个从未出版过的程序。因此,写出Lovelace编写或发布第一个程序并不完全正确,尽管人们总是可以争论什么是程序的组成部分。而且,Lovelace程序远远领先于之前发布的所有程序。在最长的程序中,Menabrea进行了11次操作,没有循环和分支。 Lovelace程序具有25个操作和一个嵌套循环(并因此分支)。 Menabrea在工作结束时写道:

机器组装完毕后,制作卡片的困难就会减少。但是由于这只是代数公式的翻译,因此通过一些简单的表示法,将它们的执行委托给某个工人将非常简单。

Babbage和Menabrea都不对将分析仪应用于解决超出Babbage创建计算机的数学问题之外的问题的兴趣特别大。Lovelace意识到分析仪的功能远远超出了Babbage和Menabrea的想象。Lovelace还意识到“制作卡片”不是机械工作,并且做得不好或做得很好。如果不了解Note G的程序,也看不到她在开发它时花了多少心思,就很难评估它。但是,这样做之后,您可以同意即使不是第一个程序员,Lovelace也是第一个应得这个名字的程序员。

Source: https://habr.com/ru/post/zh-CN422169/


All Articles