牛顿法作为求解方程的基本通用算法,是应用数学和计算数学中最重要的算法之一。这个简单快速的算法被命名为牛顿,那么它真的是牛顿发现的吗?
作者|曾中刚,丁伟
传说3500年前,聪明的巴比伦人想出了一个简单而漂亮的计算平方根的妙招:如果一个正数小于一个正数,那么A除以它就会大于一个正数,这样他们的平均值就有希望更接近。所以,先粗略估计一下A,只需要A和的平均值,写出公式如下
计算出的b是更精确的近似值。
神奇的是,如果你最初的估计不算太差,比如你猜A精确两位数,那么b≈1.414精确四位数。用同样的方法改进b得到的c≈1.4142136的精确数有八位数。每次计算的精确位数翻倍!
如果我猜不出初始近似值呢?没关系,从任意一个非零正数a开始,随机猜测的结果无非是数几步,很快就会进入双精度状态。这种方法已经成为一个经典的传说,叫做巴比伦法。为什么是传说?因为没有书面记录。直到公元60年,古希腊数学家亚历山大的希罗才第一次对这种方法给出了明确的表述,所以巴比伦的方法也被称为赫伦法。现在我们知道牛顿迭代法最古老的来源,也就是本文的主题,来自于四大文明之一的巴比伦文明。
什么是牛顿迭代法?
牛顿的名字无需介绍。他通过发现力学三定律、万有引力定律和微积分,跻身于自古以来最伟大的科学家之列。牛顿无疑是历史上最杰出的数学家之一。作为一项伟大的贡献,他最早发现的微积分,可以上升到人类文明宝藏的高度。所有理工科学生都应该知道著名的牛顿法,也叫牛顿迭代或牛顿近似。一旦自然科学家、应用和计算数学家和工程师需要求解非线性方程和方程,首先想到的应该是牛顿法。
牛顿的方法是什么?假设我们求一维非线性方程f = 0的解,例如x–cos x = 0,其中f = x–cos x,数学史上有一个著名的阿贝尔不可能性定理,说一般不可能找到一个非线性方程的精确解,没有办法。因此,我们需要所谓的“数值方法”逐步逼近解,直到精度足够。如果f有一个导函数f’,牛顿法就是这样一个迭代程序:先取一个初始点x作为解的近似值,然后按照下面的简单公式依次迭代:
序列x,x1,x2,...获得。只要满足三个条件:函数f连续可导两次,求解x*处的导数非零,且初始逼近x足够接近x*,那么序列就会快速逼近,基本上每一步的精确位数都会翻倍。因此,在实际计算中,通过三次或五次迭代就可以得到精确的近似解。读者很容易验证,巴比伦方法实际上是求解平方根方程x2-A=0的牛顿迭代。当然,巴比伦人不太可能知道迭代的概念。
要不要做科学计算和工程计算?几乎所有的问题要么本身就是方程,要么必须在某一步解决。牛顿法作为求解方程的基本通用算法,是应用数学和计算数学中最重要的算法之一。这个简单快速的算法被命名为牛顿,那么它真的是牛顿发现的吗?这是一个漫长而又充满争议的传奇故事,其中包含了数学史上许多著名的名字。
持久的“谬误”
现在大家使用的代数符号和表达式系统的创始人是法国人大卫。他以律师为生。他还担任亨利三世和四世的皇家智囊团,赚到足够的钱为自己提供研究数学的资金并公布结果。除了在代数方面的造诣,他还是方程理论的大师。他有很强的计算能力,在欧洲,他第一次计算出了十个精确的π值。17世纪初,大卫提出了一种求多项式方程根的算法,每次精度提高了一位数。用现在的话来说,叫做线性收敛或一阶收敛。大卫的算法需要很大的努力来解释,感兴趣的读者可以参考引文。
根据文献研究,牛顿大约在1664年读到了瓦达的技能,大约在1669年写了《分析理论》。但是这本书直到1711年才由威尔士数学家琼斯编辑出版。牛顿在书中改进了大卫的思想,提出了一种近似求解多项式方程的新方法。以三次方程x3–2x–5 = 0为例。他首先注意到在2和3之间有一个解,所以他把这个解写成x = 2+p,代入原始方程并简化,得到三次方程P3+6p 2+10p–1 = 0。当然,解这个新方程似乎和解旧方程一样困难。但是p的方程可以用微积分来求解:因为p小,它的平方和立方都比较小,所以三次函数P3+6p 2+10p–1可以用线性部分10p–1来近似。通过求解10p-1=0得到P ≈ 0.1。也就是说,x的近似值是从2到2.1,精确的位数是两倍。
然后,牛顿按照定律炮制,即p = 0.1+q,代入0 = P3+6p 2+10p–1:
每一步都要精确到两位数!
在1687年首次出版的《自然哲学的数学原理》一书中,牛顿为天文学解出了超越方程x–e sin x = m。他用级数展开正弦函数,得到一个近似多项式方程。然后他可以通过用上述数值逼近多项式方程的解来得到原方程的近似解。和二十年前一样,他没有明确使用函数导数的概念来推导这种数值方法,也没有明确提出迭代的概念和公式。
这就是牛顿参与创立牛顿定律的过程。牛顿的贡献是将巴比伦方法从平方根方程x2-A=0推广到基于微积分的大卫方法的一般多项式根计算。
英国科学史专家尼古拉斯·科勒斯特罗姆在1992年发表了一篇关于牛顿方法的考证文章。文章的标题很有意思:托马斯·辛普森和牛顿近似:一个永恒的神话。意味着称公式为“牛顿法”是一个神话,也就是一个普遍存在的谬误,这个谬误是“经久不衰”的。他指出牛顿法有两个重要特点:1。这是一个迭代的过程;2.它采用微分表达式。这两个特征都没有出现在牛顿的分析理论中。理论上,迭代法是一个无穷极限过程,牛顿只给出了三步计算演示。其实我们还可以补充一点,牛顿法只能用于多项式,不是一般的算法,因为不使用微分。
第一个真正的迭代方法
真正意义上的通过数值计算求解方程的第一种迭代法是和牛顿在英国的约瑟夫·拉夫森在1690年发表的《方程分析的一般理论》一文中给出的近似方法。但是它也没有导数运算,所以不符合牛顿法的第二个特点。然而,一些慷慨的后人,包括一些现代数学家,把牛顿法的勋章砍成两半,分发给拉尔夫·森,这就是所谓的牛顿-拉尔夫·森法。
那么,雷夫森是如何得到他的数值方法的呢?我们通过解三次方程x3- ax+b = 0来描述他的解。在每次迭代中,他都要走两步。让当前近似解为u,然后把下一个近似解写成u+d,然后把x=u+d代入方程,按照二项式公式展开,这是第一步。在第二步中,将相似的项组合起来,得到d的第一项的系数3 U2–a,然后得到下一个近似解。
拉夫森强调,如果他用上述方法反复迭代,他可以计算出满足任何精度的方程的解。然而,我们仍然看不到导数运算的影子。此外,他只对多项式方程提出了这种迭代法,所用的二项式公式不能直接推广到求解超越方程。他在伦敦皇家学会发表的原创文章前言中提到,他的方法与牛顿之前的做法类似。然而,七年后的1697年,他写这个方法时,并没有提到牛顿的名字,而是说大卫是他的方法的祖先。
如果我们将牛顿的做法与雷夫森的做法进行比较,不难发现,牛顿使用了一个看似更复杂的由代换步骤推导出来的多项式,然后丢失了高阶项得到近似;Rafson从头到尾使用一个给定的原始多项式,操作简单得多。雷夫森觉得他的方法和牛顿的完全不一样,不需要归结到牛顿身上。类似的比较一个接一个地出现。例如,在1796年发表的文章《对拉弗森先生方法的观察》中,作者费兰德比较了两种方法各自的优点:“考虑到两种方法的简单性和概念...我认为总的来说,拉弗森先生解方程的方法比艾萨克·牛顿爵士的方法更方便。”
1798年,法国伟大的数学家拉格朗日发表了他有影响力的论文《方程的数值解》。他改进和扩展了牛顿分析理论中的方法,但仍然没有使用导数或微分项。
眼尖的读者很快发现,在Rafson得到的D的分数表达式中,分子是函数x3- ax+b在当前迭代点u的值,分母恰恰是这个函数在这个迭代点的导数的负值,所以这就给出了多项式函数中牛顿法的全部内容。但是,不能说雷夫森发明了今天所谓的牛顿法!原因是他和牛顿一样,没有用导数的记法和运算得到一般牛顿法的格式,这仍然不能直接应用于一般的非线性方程。
被遗忘的发明家
那么,牛顿法的发明者是谁呢?
这个人的全名是托马斯·辛普森,他是一位比牛顿和拉夫森晚几十年的英国数学家。他就是近似于著名的数值积分辛普森法则的辛普森。有趣的是,辛普森可能是对牛顿方法贡献最大的人,但他几乎被后人遗忘了。相反,他在数值积分法中获得了一个不值得的荣誉。我没有得到我应得的,但我拿走了我不应得的。一百年前,德国天文学家开普勒发现了这个近似计算“弯曲矩形”面积的规则。所以德国人骄傲地把我们习以为常的辛普森定律称为“开普勒桶定律”,就像我们经常把关于二项式展开系数的帕斯卡三角称为“杨辉三角”一样。
辛普森在1740年构建了现代意义上的牛顿方法,当时牛顿已经去世十三年了。那一年,他发表了一系列数学论文,其中一篇描述了“一种求解方程的新方法”,但没有列出任何先驱的名字。在序言中,他断言:“因为它比以前的任何方法都更普遍,所以它不能不具有相当大的用途。”这听起来像一个很大的音调。他自信而不是自夸:“取给定方程的流数……”这里,流数的英文单词是fluxion,这正是牛顿用来表达我们今天所说的“导数”——函数的瞬时变化率。然后,他给出了一个与上述公式完全相同的迭代程序,只是没有采用微积分的另一个发明者莱布尼茨引入的导数符号。
辛普森用这种通用方法做了五个例子,包括解三次方程、平方根计算、指数方程等。此外,他是第一个用他的方法解决一个有两个未知数和两个方程的方程组的人!由于他是历史上第一个提出与牛顿法格式相同的迭代法的人,数学史专家Kollerstrom断定辛普森是牛顿法的发现者。
辛普森的牛顿法和现代教科书的区别只是使用的符号。他应该得到制定这项法律的荣誉。然而,牛顿方法的现代形式是谁写的呢?
他就是傅立叶,在现代数学崎岖的道路上留下了巨大的足迹。这位法国数学家出生在辛普森提出标准牛顿法的第二十八年。19世纪初,他首次叙述了当今世界普遍使用的导数符号为f’的迭代法,同时将其描述为牛顿法。后来,英国一些数学家因为拉格朗日的随笔,把这种方法称为“牛顿和拉格朗日方法”,但根本没有提到雷夫森。19世纪数学史上著名的德国人坎特考察了牛顿、雷夫森等人的近似求解方法,将雷夫森描述为“牛顿的绝对崇拜者和模仿者”,认为他的近似方法“与牛顿的方法非常相似”。
出生于瑞士的美国数学史家弗洛里安·卡乔里在1911年的《美国数学月刊》上写道,这种方法应该叫做牛顿-拉夫森法。然而,他的命名论点受到了科勒斯特罗姆的质疑,基于“两个特征”,他认为这一荣誉只能归功于辛普森。然而,著名数学史学家博耶在1968年出版的名著《数学史》中断言:“牛顿近似解方程的方法可以在《分析理论》中找到。”由于牛顿在包括数学在内的科学史上的巨大名气,真正掌握牛顿方法的辛普森在数学史上几乎已经失去了立足之地,而雷夫森只能在牛顿的名字之后偶然出现。
这种命名在科学和数学史上随处可见。例如,学过初等微积分的人都知道,求不定式极限的“洛必达法则”实际上是由瑞士数学家伯努利命名的:张观·戴笠