高次方程数值解法和天元术
自然科学史研究所 郭书春
在我国古代,解方程叫做开方术 r。开方术到了宋代发展成为求高次方程的数值解,创造了增乘开方法,创造了列方程的方法——天元术和高次方程组的解法——四元术,远远走在当时世界先进水平的前面。
开方作法本源
讲到宋代的开方术,首先要讲到有重大意义的“开方作法本源”,根据《永乐大典》卷一六三四四抄录的杨辉《详解九章算法》的记载,它是十一世纪上半叶数学家贾宪在《黄帝九章算经细草》中首先提出的,是一个指数是正整数的二项式定理系数表。欧洲人一般把这个表称为“帕斯卡三角”,其实帕斯卡(1623—1662)得出这个表(公元 1654 年)比贾宪晚了
六百多年,就是在帕斯卡之前先提到这个表的中亚人阿尔·卡西(公元 1427
年提出),和德国人阿皮纳斯(公元 1527 年提出),也迟出四五百年。我们有理由把这个表称为“贾宪三角”(也可称“杨辉三角”)。
贾宪三角下面注解中的前三句话,“左衺=乃积数,右衺乃隅算,中藏者皆廉”说出了贾宪三角的结构和它们在开方术中的作用:它的每一行的数字表示(a+b)n(n=0,1,2,3,⋯⋯)展开式的各项系数。最外边左、右斜线上的数字,都分别是各次开方的积(an)和隅算(bn)的系数,中间所藏的“二”、“三、三”,“四、六、四”等等分别是开平方、立方、三乘方(即四次方)的廉。这里积、隅、廉等名词来源于古代的开方术②。贾宪三角最初来源于开方术,又用于开方术,就是贾宪“立成释锁法”,所以称为“开方作法本源”。唐宋历算家常把一些数学常数列成算表,以备计算人员使用,这种算表称作“立成”。“释锁”是宋元时期开方的代名词, 形象地比喻开方求正根如同打开一把锁。“立成释锁法”就是以贾宪三角作为立成的开方法。注解中后两句“以廉乘商方,命实而除之”,简要说明了用各行系数进行开方的方法,就是以各廉法乘商(就是根的一位得数) 的相应次方,然后从实中减去。如开平方
N的时候利用贾宪三角的第三层
(x1+x2)2=x12+2x1x2+x22=x12+(2x1+x2)x2,
确定初商 x1 后,再定次商 x2(可用 2x1 试除余实 N-x12),加次商 x2 于 2x1, 乘以 x2,再从余实中减去。同样,开立方要用到贾宪三角的第四层的系数1,3,3,1。显然,同样的步骤对于任意高次幂的开方都适用,所以,利
r 1-r2q3=(ai-c1gi)-(c2gi-l2ai)q3=l3ai-c3gi,
= 1 并且 n 是偶数的时候(根据正文所说,总可以把 n 是奇数情形化作偶数情形来处理),显然有 rn-1=ln- 1ai-cn-1gi;rn=cngi-lnai=1,就是 cngi≡1(modai)。这就证明了 cn 就是所求的 k5。
② 秦九韶采用的方法是在那些元数 ai 中约去适当的公因子,从而对每个元数求得一个因子 ti;使得
m=t1× t2×……× tn 是那些 ai 的最小公倍数,而且各个 ti 两两互素,然后以这些 ti 为定数,按大衍求一术计算相应的 ki。
用贾宪三角中的各廉,贾宪已经把我国沿用一千多年的开平方法、开立方法推广到开任意高次方,这是一个创新。
贾宪接着提出了“增乘方求廉法”,又称作“释锁求廉本源”,先依开方次数,列出位数(隅算在外),以隅算 1 自下增入前位,到首位为止, 再自下重复刚才的程序,每次低一位为止。如求开六次方的各廉,到五位, 程序如下:
1 |
6 |
||||
---|---|---|---|---|---|
1 |
5 |
15 |
|||
1 |
4 |
10 |
20 |
||
1 |
3 |
6 |
10 |
15 |
|
1 |
2 |
3 |
4 |
5 | 6 |
1 |
1 |
1 |
1 |
1 | 1 |
因此,6,15,20,15,6 便是六次方各廉。
贾宪三角对宋元数学得以达到当时世界数学高峰,起了重大作用。元代朱世杰用两组分别平行于两邪的平行线把各廉联结起来,为高阶等差级数求和问题和高次招差术的发展,提供了有力的数学工具。同时,求贾宪三角的各廉的增乘方法的塞本步骤,还可以用来直接进行开方,开辟了高次方程数值解法的新途径,这就是下面就要谈到的增乘开方法。贾宪三角对后世也有很大影响,明清许多重要数学著作都引用了它。
增乘开方法
在现代计算数学中求代数方程的数值解的时候,流行着一种极其简便的方法——秦九韶程序,这就是我国宋代的增乘开方法,它是由北宋贾宪首先提出、而由十三世纪上半叶南宋的秦九韶最后完成的。在欧洲,直到1819 年英国人霍纳才创造了类似的方法,比秦九韶晚五百七十二年,而比贾宪晚了七百多年。
增乘开方法的产生把我国的高次方程数值解法推进到一个新的阶段。贾宪提出的增乘开方法,不是一次运用贾宪三角中的系数 1,2,1;1,
3,3,1;1,4,6,4,1;⋯⋯而是用随乘随加的办法得到和一次运用上述系数同样的结果。如求 x4=N 的正根,先列开方式如下页的(1),商得第一位得数是 x1(称为初商)。以初商乘隅加入下廉,以初商乘下廉加入上廉, 以初商乘上廉加入方,以初商乘方从实中减去,如(2)式。如尽,x1 就是所求的根。如不尽,再如(3)、(4)、(5)式所表示的那样,以初商乘隅,自下而上,继续随乘随加,并且以次低一层为止,最后得到减根后的方程(5)。用现代的符号写出,(5)式就是
x4+4x1x3+6x12x2+4x13x=N-x14。
不言而喻,(5)式的系数就是贾宪三角的第五层。再对(5)式重复上述的步骤,商得次商 x2,由下而上随乘随加,最后从实中减去,如尽,x1+x2 就是所求的根。如不尽,再重复(3)、(4)、(5)的步骤,求解第二次减根方程, 直到求出所需的答数。
显然,这个方法比原来的开方法程序整齐,运算简捷,不仅很容易推广到任意高次幂的开方,也可以推广到求解任意高次方程的数值解。事实
上,减根后的方程(5)就是一个不仅含有 x 的最高次幂、也含有其他次幂的方程。杨辉引用的贾宪的著作中就有开四次方的例题。
人们的认识总是由低到高、从一个方面到更多的方面不断向
前发展。贾宪创造增乘开方法有不可磨灭的历史功绩。但是他用增乘开方法解决的只是限于 x2=N,x3=N,x4=N 之类的二项方程,就是纯开方问题。而且到贾宪为止,我国的方程的未知数的系数和实都是正数。据杨辉《田亩比类乘除捷法》和《算法通变本末》的记载,首先突破这些规定的是十二世纪北宋数学家刘益,他在《议古根源》中讨论了分别含有“负方”和“益隅”就是形如
x2-ax=b 和 -x2+ax=b
的两类方程(其中 a>0,b>0),并且创造了“益积术”和“减从术”解决这两类方程。这两种方法都不是增乘开方法,但是其中“减从术”比较接近增乘开方法,可以看作用增乘开方法解决负方、益隅两种类型方程这个认识长河中最初的两环。事实上,《议古根源》中有一个用增乘开方法求益隅四次方程正根的例题,开创了用增乘开方法求任何数字方程正根的先河。一百年后,秦九韶在《数书九章》中把高次方程求正根的增乘开方法发展到了十分完备的程度。
秦九韶以前的数学家认为“实”是已知量,当然是正数,相当于常数项在等式的右端。秦九韶认为“实”最好和未知数放在一起,正负相消, 组成开方式,这样可以把增乘开方的随乘随加贯彻到底,因此他规定“实常为负”。这样的开方式相当于方程
f(x)=a0xn+a1xn-1+a2xn-2+⋯⋯+an-1x+an=0,
an<0,a0≠0,
其中系数可正可负,可以是整数也可以是小数,有的方程高达十次。就是说秦九韶可以求解任何数字方程的正根,他自己称为“正负开方术”;当a0≠1 时,秦九韶称为“开连枝某乘方”;而方程的奇次幂系数都是零时, 称为“开玲珑某乘方”。开方中减根后的方程的常数项一般越来越大,而接近于零,但有时常数项会由负变正,秦九韶称作“换骨”;有时常数项符号不变,而绝对值增大,叫做“投胎”。开方得到无理根时,秦九韶发挥了刘徽首创的继续开方计算“微数”的思想,用十进小数作无理根的近
似值,这在世界数学史上也是最早的。
天元术
随着求高次方程正根的增乘开方法日臻完备,列方程的方法——天元术也逐步发展起来。设未知数列方程,今天对具备初等数学知识的人来说是轻车熟路,然而在天元术产生以前却非同小可。唐初大数学家王孝通为了列某些三次方程,只好借助于文字,他的思维过程和叙述形式非常复杂。随着要解决的高次方程越来越多,高次方程的造法也越来越难,创造一种简捷的列方程的方法成为人们的迫切需要。在北宋数学家把增乘开方法推广到开任意高次方之后,天元术的诞生就成为我国数学发展的必然结果。据记载,金元时期的北方,有许多天元术著作,可惜它们大都和贾宪的《黄帝九章算经细草》、刘益的《议古根源》一样亡佚了。现存的只有李冶的
《测圆海镜》(公元 1248 年)、《益古演段》(公元 1259 年)和朱世杰的《算
学启蒙》(公元 1299 年)、《四元玉鉴》(公元 1303 年)等著作。
用天元术列方程的方法是:首先“立天元一为某某”,就是现在的设未知数 x,然后依据问题的条件列出两个相等的天元式(就是含这个天元的多项式),把这两个天元式相减,就得到一个天元式,就是高次方程式。最后用增乘开方法求这个方程的正根。显然,天元术和现今代数方程的列法雷同,而在欧洲,只是在十六世纪才开始做到这一点。
天元术是金、元数学家独立创造的。我国古代的开方筹式给天元式提供了一个现实的原型。然而实现科学地表达天元式这一飞跃,要经过一个复杂曲折的过程。起初,人们用“天、上、⋯⋯仙”九个字分别表示未知数的正幂,用“地、下、⋯⋯鬼”九个字表示负幂,用“人”表示常数项。以后经过简化,用“天元”、“地元”分别表示未知数的正幂和负幂,用“太”表示常数项。李冶进一步加以改进,取消“地元”,只用一个天元表示未知数。他在《测圆海镜》中采用正幂在上、常数和负幂在下的古法, 后来在《益古演段》中又颠倒过来,这样就使天元式和传统的开方式相一致。在进行天元式运算的时候,李冶有时在一次幂系数的右旁记一“元” 字,有时在常数右旁记一“太”字;系数是负数的,在系数的个位数码上加一斜划。李冶的开方式中,没有“实常为负”的规定,而是可正可负。以后的朱世杰、郭守敬等人沿用了李冶的表示法。如多项式
25x2+280x-6905
可以记为
■或■
从李冶的著作中,我们可以看出,十三世纪上半叶人们已经熟练地掌握了多项式的加、减、乘、除(只限于用 x 的整数幂来除)。而表示方程的天元式都是有理整式。否则,用乘方消去根号,用通分化成整式,再求解。
四元术
我国早在两汉时期就能解一次联立方程组,《九章算术》中称作“方程术”。把天元术的原理应用于联立方程组,先后产生了二元术、三元术和四元术。这是十三世纪中到十四世纪初我国宋元时期数学家又一辉煌成
就。现有传本的朱世杰的《四元玉鉴》就是一部杰出的四元术著作。
所谓四元术,就是用天、地、人、物四元表示四元高次方程组。列式的方法是:在常数右侧记一“太”字,天、地、人、物四元和它们的乘幂的系数分别列于“太”字的下、左、右、上,相邻两未知数和它们的乘幂的积的系数记入相应的两行相交的位置上,不相邻的几个未知数的积的系数记入相应的夹缝中。我们用 x、y、z、u 分别表示天、地、人、物四元, 那么它们在四元式中的位置如下图所示:
如方程组
− x − y − xy 2 − z + xyz = 0,
(1)
就记为
■
x − x2 − y + z + xz = 0, x2 + y2 − z2 = 0,
(2)
(3)
这实际上是多元高次方程组的分离系数表示法。
四元术用四元消元法解题,把四元四式消去一元变成三元三式,再消去一元变成二元二式,再消去一元,就得到一个只含一元的天元开方式, 然后用增乘开方法求正根。这和今天解方程组的方法基本一致。在欧洲, 直到十八世纪法国数学家贝佐(公元 1775 年)才系统叙述了高次方程组消元法问题。
我国古代的数学家不止一次地攀登上当时世界数学发展的高峰,对于方程的研究作出了当时无与伦比的成就,为世界数学史和文明史作出了伟大的贡献。这是中华民族的骄傲。当然,任何事物都是可以一分为二的。我国古代对方程的研究往往局限于解决实际问题,不重视基础理论特别是方程性质的研究,因此,也存在不容忽视的缺点。比如,尽管我国负数的发现和应用是最早的,可是解方程却一直局限于求正根,对负根从未考虑; 对于方程根的个数和次数的关系,根和系数的关系,从未讨论,甚至《议古根源》中相邻两个问题的答案刚好就是同一个二次方程的两个根,可是刘益和杨辉都没有指出这一点;四元术对于超过四元的方程组就没法应用;等等。这些问题要求贾宪、刘益、秦九韶、李冶、朱世杰等人当时就解决,是苛求于古人,但是它有可能在进一步发展中解决。然而,由于腐朽没落的封建制度的阻碍,宋元优秀的数学成就在这之后不仅没有发展, 反而长期失传,加上帝国主义的侵略,现代科学也没有能在我国产生。直
到十八世纪末十九世纪初,焦循(1763-1820)、汪莱(1768-1813)、李锐、罗士琳(1789-1853)等人才重新研究这些问题。汪莱、李锐提出了根和系数的判别法:当方程系数有一次变号的时候,可以有一个正根;有二次变号的时候,有两个正根;有三次变号的时候,有三个或一个正根;有四次变号的时候,有四个或两个正根。这和所谓“笛卡儿符号法则”(公元 1637 年)是相同的。李锐还发现方程有负根有重根。但是得到上述结果在时间上比欧洲人要晚。