书城科普读物古代数学与物理学
45718700000015

第15章 高次方程数值解法

中国古代,把开高次方和解二次以上的方程,统称为开方。在《周髀算经》和赵爽注,以及《九章算术》和刘徽注中,已经有了完整的开平方法和开立方法,在二次方程x2 px=N的数值解法和求根公式这两个方面都取得了一定的成就。后来,祖冲之创“开差幂”和“开差立”在解三次方程方面作出重要的推进,可惜算书失传,其内容也不得而知了。唐朝,王孝通采用几何方法建立三次方程x3 px q=N,同时发展了三次方程数值解法。正是在这个基础上,宋元时期的数学家们开创了增乘开方术和正负开方术,使得中国数学关于高次方程的理论取得了更加辉煌的成就。

贾宪三角

中国数学中关于开平方、开立方的方法不仅出现得早而且方法合理,与今天我们通用的开方法基本一致,都是二项式展开式的原则运用。如开平方(即求方程x2=N的正数根),就是利用(x21 x22)2=x21 2x1x2 x22=x21 (2x1 x2)x2这一展开式,确定初商x1后,利用(x1 x2)2-x21=(2x1 x2)x2来确定次商x2.可以看出,这一运算实质是应用了二项式展开式中的系数1、2、1.同样,开立方要用到展开式(x1 x2)3=x31 3x21x2 3x1x22 x32,实际也是利用了展开式右端的四个系数1、3、3、1.显然,同样的步骤对于任意次幂的开方都是适用的。因此,找出二项式展开式中的系数的规律就可以利用它来进行对高次幂的开方。中国数学史上,较早认识这一点,并给出二项式展开式中的系数规律的是北宋数学家贾宪。

11世纪上半叶,贾宪给出了一张二项定理展开式(指数是正整数)的系数表,附在他的《黄帝九章算法细草》之中,贾宪称此为“开方作法本源图”,意思是说,这是用作进行开方的基本图式。现在所说的“杨辉三角”就是指贾宪的这张图。因为贾宪的《黄帝九章算法细草》已经失传,我们所见的图是从杨辉的《详解九章算法》中出现的,所以称它为杨辉三角。不过杨辉说得很明白,他书中的这张图来自贾宪书中,因此我们称它为贾宪三角才对。

开方作法本源图欧洲人一般称这种三角形表为巴斯卡三角,巴斯卡发表它是在1665年。在国外,比巴斯卡早知道这三角形的是阿拉伯数学家阿尔·卡西(AL-Kashi?—1429),他给出了二项系数的一般式子并加了证明。

前面指出,贾宪造表的宗旨是用它来求开高次幂的根,而不仅是为了求二项式展开式中各项的系数。怎样用法呢?贾宪在他的开方作法本源图上有一段说明:其中头两句说,“左袤乃积数,右袤乃偶算”,其中“袤”本应作衺,斜的意思。这两句是指图中最外的左右两斜线上的数字,都分别是(x1 x2)n展开式中“积”(x1的最高次项)与“隅算”(x2的最高次项)的系数;第三句“中藏者皆廉”是说明图中间所藏的数字“二”、“三、三”、“四、六、四”等等分别是展开式中的“廉”(除x1、x2最高次系数以外的各项的系数);最后两句“以廉乘商方,命实而除之”则直接点穿了用展开式中的系数,进行开方的方法,就是以各廉乘商(即根的一位数得数)的相应次方,然后从“实”(被开方数)中减去。实际步骤就是前面讲过的开平方的过程,只是贾宪已经把《九章算术》中的开方原理,推广到了开高次幂上;这不能不说是一大创造。

增乘开方术

贾宪三角虽只七行,但按贾宪的造表方法,要任意扩大是不成问题的。贾宪的造表方法叫“增乘方法求廉草”。“草”,文稿的意思;求廉就是求贾宪三角中的除左右两斜行“一”以外数字;增乘方法是指使用的方法的名称。

用增乘法求廉大致是这样的:

第一位11 5=6

第二位11 4=510 5=15

第三位11 3=46 4=1010 10=20

第四位1l 2=33 3=64 6=105 10=15

第五位11 1=21 2=31 3=41 4=51 5=6

底位111111

(a)(b)(c)(d)(e)(f)

增乘法求廉抹去等号和等号左边的算式,只留下字号右边的和,这就是旋转了90°后的贾宪三角。容易发现,贾宪三角中的廉,即除了两旁的1以外的中间的数字,都等于它肩上的两个数相加之和。例如2=1 1,3=1 2,4=1 3,6=3 3……。按增乘法的说法,是自下而上随乘随加的结果,这也就是贾宪三角的作成规则。自然,有了这个规则,只要在图(a)中多添几个1,那么就可得到扩大了的贾宪三角,或者说可以推广到求对一个正数开任意高次幂的“廉”。

增乘方法的杰出之处还不在于求两项式系数,而在于它可被用来直接进行开高次幂,也就是贾宪所说的“增乘开方法。”

增乘开方法不是一次运用贾宪三角中的系数1、2、1;1、3、3、1;1、4、6、4、1……而是用随乘随加的办法得到和一次运用上述系数同样的结果。

比如,在杨辉《详解九章算法》中有一个相当于求解方程x4=1336336的问题,用的就是增乘开方法。因为方程的根x是二位数,故设x=10x1,将原方程改作10000x41=1336336.具体过程用现在的算式表示是:

10000

30000

90000

270000-1336336

8100003①10000

30000

30000 90000

180000 270000

810000-526336

10000

60000

30000 270000

270000 1080000

10000

90000

30000 54000010000

1

1200000

120

4 540000

5400

496 1080000

108000

23584-526336

-526336

526336②

4③

1 124 5896 131584 0算式中①所表示的是方程10000x41=1336336,议初商为3,经增乘开方后算式②表示方程

1000(x1-3)4 120000(x1-3)3 540000(x1-3)2 1080000(x1-3)=526336

令x2=10(x1-3),于是上述方程即变成由③所表示的

x42 120x32 5400x22 108000x2=526336

最后用增乘方法确定次商4,因而得x=3×10 4=34

显然,这个方法由于运算程序整齐,又十分机械,没有什么需要多费周折的地方,因此比起直接用二项系数求解要简捷。更重要的是由于它容易被推广到求任意高次方程的数值解,所以在数学上也就具有更重要的地位。

第一个将增乘开方法用于求任意高次方程数值解的是北宋数学家刘益(12世纪)。在刘益著的《议古根源》一书中给出了一个用增乘方法求方程数值根的例子:

-5x4 52x3 128x2=4096(x=4)

这道题突破了以往方程只取正数系数的限制,在系数不拘正负的情况下求解一般方程,它可以说是中国数学史上的一项杰出成就。

在方程的解法上,刘益把原来用于开高次幂的“增乘开方术”,引入到了求高次方程的数值解上,从而为秦九韶开创“正负开方术”解决求一般高次方程的数值根问题奠定了基础。

正负开方术

1247年,南宋数学家秦九韶著《数书九章》。书中秦九韶从高次方程的筹式表示、一些特殊形式方程的区分、以及用“正负开方术”解高次方程的具体步骤作了系统的阐述。

《数书九章》书影秦九韶列筹法

对于形如a0xn a1xn-1 a2xn-2 x3xn-3 …… an-1x an=0的方程,秦九韶采用古代在开方中所使用的列筹方法:将商,即根置于筹式的最上方,然后依次列常数项(实)、一次项、二次项等各项的系数(“廉”),最下一层放置最高次项系数——“隅”。

对于方程中的各项系数,除常数项规定了“实常为负”以外,其余可正可负。不受任何限制。缺项表示该项系数为零。

中国古代注重求方程的数值解,而不注重对方程的分类和讨论,但秦九韶不同,他开始注意了对某些特殊形式的方程作出区分,如他称|a0|≠1的方程为“连枝某乘方”;称仅有偶次项的方程为“玲珑某乘方”。不过这些区分还尚未构成对方程明确分类的程度,理论上进取仍显不够。

但是,在应用增乘开方法求方程数值解方面,秦九韶是研究得相当系统而彻底的。他称增乘开方法为“正负开方术”,这种方法与通常所谓的霍纳方法基本一致。例如,《数书九章》卷5第1题“尖田求积”列出方程为

-x4 763200x2-4064256000=0

秦九韶在列出方程的筹式后,依次用21个筹算图式来详细说明解方程的每一个步骤。下面我们改用阿拉伯数字并用横式抄录。(摘自沈康身:增乘开方法源流,载《秦九韶与数书九章》一书,北京师范大学出版社,1987年)

正负开方术的筹算图示(程序)

程序⑧相当于对(3)式进行了x3=10x2的变换后得出的新的方程:

-(10)4x43-3200(10)3x33-3076800(10)2x23-

82680000(10)x3 38205440000=0(4)

最后求得x3=4,故得:x=100x1=100(8 x2)=100(8 x310)=840秦九韶还对运算过程中所产生的某些特殊情况进行了讨论。特别是当开方得到无理根时,秦九韶改变唐宋数学家不重视十进分数的作法,积极采用刘徽的十进分数法来表示无理根的近似值,从而使高次方程数值解的范围扩展到最大限度。另外,秦九韶对常数项绝对值增大或减小,符号从负变正也不象以前的数学家那样畏惧,而将它们视为理所当然,不影响算法的正确性,这就充分发挥了他的“正负开方术”解各种类型方程的有效性。