宋元数学
从秦汉到隋唐,中国数学可算是蓬勃发展的,出现了不少数学家与数学著作,数学教育也积极展开。但是与宋元时期相比,后者已把中国的筹算数学发展到了顶峰,在数学的许多领域,宋元数学的成就代表了当时世界数学的水平。其中杰出的数学家和数学成就有:
沈括(1031~1095),其著《梦溪笔谈》26卷(1088年左右),载录了他所发明的“隙积术”和“会圆术”,前者是一种高阶等差级数的求和方法,后者是关于弓形弧长计算的近似方法。
秦九韶(1202~1261),其著《数书九章》18卷(1247),载录了他所创造的“大衍求一术”和“正负开方术”,前者是由《孙子算经》所开创的一次同余式理论的发展,在世界数学史上被称为“孙子剩余定理”;后者是沿着《九章算术》用开方术求二次方程数值解这条脉络,在贾宪(11世纪)的“增乘开方法”基础上发展起来的,这是一个求任意次方程数值解的方法,比同类型的“霍纳法”要早出500多年。
李冶(1192~1279),其著《测圆海镜》12卷(1248)和《益古演段》3卷(1259),载录了他发明的“勾股容圆术”和“天元术”,前者是圆外切直角三角形各种线段间的关系的计算问题;后者是列方程的方法,这是初等代数的核心问题。
杨辉(13世纪),其著《详解九章算法》12卷(1261)、《日用算法》2卷(1262)、《田亩比类乘除捷法》2卷(1275)。其中尤以《详解九章算法》因附有二项式系数三角阵,即所谓的杨辉三角而闻名于世。其实,杨辉自己说这种三角阵出自贾宪书中,原名为“开方作法本源图”,贾宪是用它来进行高次幂开方的。杨辉著作的大部分内容都是民间实用数学的总结,它代表了筹算数学顶峰时期的一个发展方向。
朱世杰(14世纪),其著《算学启蒙》3卷(1299)和《四元玉鉴》3卷(1303),前者属日用算书,后者重理论探求。在《四元玉鉴》中朱世杰将列一元高次方程的天元术,推而广之,提出了列四元高次方程的方法——四元术、又在沈括的“隙积术”和郭守敬等人的“招差术”的基础上,提出了“垛积招差术”——有限差分法的一种形式,著名的有限差分法是1715年由英国数学家泰勒提出的。
总之,宋元时期是中国数学大放异彩的时期,它像一盏灿烂的明灯,表明了世界数学发展的高度。
宋元数学为什么会出现如此盛况,这自然要从宋元社会的特点和中国数学的发展规律中去寻找答案。
就宋元社会来说,它有一个较长时间的相对安定的局面,这有利于社会生产的发展,尤其是以手工业为主体的工业生产的兴起,给科学文化带来积极的影响和推动作用,像雕版印刷的广泛采用,印本数学著作的出现都给数学发展提供了条件。
数学学派的出现是促进宋元数学发展的直接原因。北宋以后中国民间曾多次出现各学术团体,它们各有自己的研究中心,形成具有一定风格的学派。这些学派的中心人物大都是献身数学而不求官职的学者,因此在学术上很有造诣。其中有朱世杰为代表的燕山学派;有杨辉为代表的钱塘学派;有郭守敬、王恂为代表的河北武安紫金山学派;还有李冶为代表的河北元氏封龙山学派。这些学派都曾在中国数学史上独树一帜,作出了杰出的贡献。
宋元数学高峰,也是筹算数学发展的必然趋势。筹算数学从春秋开创以后,曾在解决实际问题过程中得到发展,由于当时实际问题对数学的要求主要是计算方面的,因此筹算数学所能创造的成就的范围基本上也属于计算方面的,有一定的局限性。如同一切事物具有产生、发展及消亡过程一样,筹算在其消亡的前期必然会出现一个顶峰,在它可能获得成就的范围上创造出一个最高的水平。宋元数学高峰以后,筹算数学的发展也就日趋低潮,不久被珠算和西洋数学所代替。
宋元数学所创造的最高成就,并没有得到继承和发展,象天元术、四元术、正负开方术、招差术等,后来很少有人问津,要不是清初有人予以发掘,它几乎成了“绝学”。造成这种结局的原因大致有二点:一是由于中国数学的局限性,即它与社会需要的关系,始终以婢女的身份出现,少有数学自身发展的独立性。更何况中国数学的算法体系压抑了数学发展的内动力——思辨性,即使在自己的体系中也只能得到有限的发展。二是由于筹算制度造成的。筹算所能提供的创造性发展的舞台极为有限,它始终把数学框死在计算这个范围内。严格地说,筹算只是属于算术范畴,数的其他领域它是很难顾及的。筹算成为绝学是必然趋势,只是时间先后问题。
宋元数学的顶峰,除了上面提到的成就之外,还反映在计算技术的改进上。为了适应宋元时期农业、手工业和商业的发展,对数学提出了快速计算的需要,当时曾先后出现了许多乘除捷法和各种歌诀。《宋史·艺文志》著录算书49种,其中除去20种属算经十书及注文外,其余有26种是“求一术歌”“化零歌”“算法口诀”“算法秘诀”之类的内容。元代更是出现了内容丰富的实用算书。
在这股算法实用化的潮流中,杨辉是杰出的代表人物。杨辉浙江杭州人,他一生共发表数学著作5种21卷,如:
①《详解九章算法》12卷(1261)
②《日用算法》2卷(1262)
③《乘除通变算宝》3卷(1274)
④《田亩比类乘除捷法》2卷(1275)
⑤《续古摘奇算法》2卷(1275)
可见杨辉的数学研究的重点是放在改进计算方法上的。
当时计算方法上的改进主要是改进筹算的乘除运算。沈括在《梦溪笔谈》卷十八中说:“算术多门,如求一,上驱,搭因,重因之类皆不离乘除”。“重因”就是化多位乘法为个位乘法;“搭因”和“上驱”疑是属于加法代乘法,与传本《夏侯阳算经》的“身外加几”和杨辉的“身前因法”相当;“求一”就是化乘除数的首位数为1,从而以加减法代乘除法。所有这些都是唐代以后为了适应商业经济的发展而逐渐发展起来的。这些方法不仅在当时的社会实践中发挥了作用,而且也是从筹算过渡到珠算的一座桥梁。
捷法的出现,目的是使运算快速,但这种快速的要求却不可能在筹算中实现。这样,变革筹算就提到日程上来了。筹算乘除捷法出现后,把原来筹算乘除时“三重张位”的情况,改成了在同一横行里演算。乘法,只要列出被乘数和乘数,把被乘数逐步地改变成所求的积数;除法只要列出被除数和除数,把被除数逐步改变成所求的商数。这正是珠算运算时所需要的。另外,实用算法中口诀的应用,也促成算筹转化成串状的算珠,出现了新的算器——珠算盘。
珠算的出现标志着中国的计算技术达到了新的高度,也可以说是中国“经世务用”数学的最高产物吧!
高次方程数值解法
中国古代,把开高次方和解二次以上的方程,统称为开方。在《周髀算经》和赵爽注,以及《九章算术》和刘徽注中,已经有了完整的开平方法和开立方法,在二次方程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最高次系数以外的各项的系数);最后两句“以廉乘商方,命实而除之”则直接点穿了用展开式中的系数,进行开方的方法,就是以各廉乘商(即根的一位数得数)的相应次方,然后从“实”(被开方数)中减去。实际步骤就是前面讲过的开平方的过程,只是贾宪已经把《九章算术》中的开方原理,推广到了开高次幂上;这不能不说是一大创造。
增乘开方术
贾宪三角虽只七行,但按贾宪的造表方法,要任意扩大是不成问题的。贾宪的造表方法叫“增乘方法求廉草”。“草”,文稿的意思;求廉就是求贾宪三角中的除左右两斜行“一”以外数字;增乘方法是指使用的方法的名称。
用增乘法求廉大致是这样的:
①先列六个1;
②从最底下的一个1起,自下增入上一位,递增到首位,得6而止;
③再如前面样升增,到第二位得15而止;
④再如上进行升增,但分别到第三位得20,到第四位得15,第五位得6止。
第一位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
+810000 3①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年)
正负开方术的筹算图示(程序)
程序隅下廉上廉方实商①—107632000—40642560000②—100000763200000—40642560000③—100000000076320000000—40642560000800④—100000000—8000000001232000000985600000038205440000续表
程序隅下廉上廉方实商⑤—100000000—1600000000—11568000000—8268800000038205440000⑥—100000000—2400000000—30768000000—8268800000038205440000⑦—100000000—3200000000—30768000000—8268800000038205440000⑧—10000—32000000—307680000—8268800000038205440000840⑨—10000—3240000—320640000—95513600000程序①相当于列出方程:—x4+763200x2—40642560000=0(1)程序②相当于对上式(1)进行x=100x1的变换,得—(10)8x41+763200×(10)4x21—40642560000=0(2)当求得8<x1<9,确定出第一位数为8之后,程序③至⑥就是用增乘方法的步骤进行,当经x2=x1—8的代换后程序⑦所应得的新方程是:
—(10)8x42—3200(10)6x32—3076800(10)4x22—
826880000(10)2x2+38205440000=0(3)
程序⑧相当于对(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秦九韶还对运算过程中所产生的某些特殊情况进行了讨论。特别是当开方得到无理根时,秦九韶改变唐宋数学家不重视十进分数的做法,积极采用刘徽的十进分数法来表示无理根的近似值,从而使高次方程数值解的范围扩展到最大限度。另外,秦九韶对常数项绝对值增大或减小,符号从负变正也不像以前的数学家那样畏惧,而将它们视为理所当然,不影响算法的正确性,这就充分发挥了他的“正负开方术”解各种类型方程的有效性。
高阶等差数列
垛积术
垛积,即堆垛求积(聚集)的意思。由于许多堆垛现象呈高阶等差数列,因此垛积术在中国古代数学中就成了专门研究高阶等差数列求和的方法。
北宋沈括(1031~1095)首先研究垛积术,他当时称之为“隙积术”。沈括说:“算术中求各种几何体积的方法,例如刍童、堑堵、鳖臑、圆锥、阳马等,大致都已具备,唯独没有隙积这种算法。……所谓隙积,就是有空隙的堆垛体,像垒起来的棋子,以及酒店里叠置的酒坛一类的东西。他们的形状虽像覆斗,四个测面也都是斜的,但由于内部有内隙之处,如果用刍童方法来计算,得出的结果往往比实际为少。”这段话把隙积与体积之间的关系讲得一清二楚。同样是求积,但“隙积”是内部有空隙的,像累棋,层坛;酒家积坛之类的隙积问题,不能套用“刍童”体积公式。但也不是不可类比,有空隙的堆垛体毕竟很像“刍童”,因此在算法上应该有一些联系。
设一个长方台垛积的顶层宽(上广)有a个物体,长有b个,底层宽(下广)有c个,长有d个,高共n层;如视物体的个数为长度整尺数(例如a个物体视为a尺),按求解刍童(长方台)体积的公式来计算,其体积当为n6[(2b+d)a+(2d+b)c]假如把这一结果就算作是垛积总和的物体数目,那么,正如沈括所指出:“常失于数少”但如果在这个基础上,再加上一个修正值(c—a)n6些那么由此而得出的,正好是垛积总和。
S=ab+(a+1)(b+1)+(a+2)(b+2)+……
+(a+n—1)(b+n—1)
=n6〔(2b+d)a+(2d+b)c〕+n6(c—a)
而这正是二阶等差数列的求和公式。
沈括用什么方法求得这一正确公式的,《梦溪笔谈》没有详细说明。现有多种猜测,有的认为是对不同长、宽、高的垛积进行多次实验,用归纳方法得出的;有的认为可能是用“损广补狭”办法,割补几何体得出。
沈括所创造的将级数与体积比类,从而求和的方法为后人研究级数求和问题提供了一条思路。南宋末的杨辉就曾在这条思路中获得过许多成就。
杨辉在《详解九章算法》(1261)商功第五中,附于体积问题之后的垛积问题共有六问,其中与级数求和有关的共有四个问题,即:
(1)果子垛(与“刍童”类比,与沈括刍童垛相同):
S=a·b+(a+1)(b+1)+(a+2)(b+2)+
…+(c—1)(d—1)+c·d
=n6[(2b+d)a+(2d+b)c]+n6(c—a)
(2)又,果子垛(与“方锥”类比):
S=12+22+32+…+n2=n3(n+1)(n+12)
(3)方垛(与“方亭”类比):
S=a2+(a+1)2+(a+2)2+…+(b—1)2+b2
=n3(a2+b2+ab+b—a2)
(4)三角垛(与“鳖臑”类比):
S=1+3+6+10+…+n(n+1)2
=16n(n+1)(n+2)
上面四个公式互有联系,其中(1)式就是沈括的“刍童”垛公式,当(1)式中a=b=1,c=d=n时,即得(2)式;当(1)式中a=b,c=d时即得出(3)式;当(1)式中a=1,b=2,c=n,d=n+1时,由(1)式可知:
1·2+2·3+3·4+…+n(n+1)
=13n(n+1)(n+2)
两端除以2,即可得出(4)式。这就是说,杨辉书中的各种公式均可由沈括的长方台垛公式导出。
元代数学家朱世杰在其所著的《四元玉鉴》一书中,把中国宋元数学家在高阶等差级数求和方面的工作向前推进了一步。在朱世杰的著作中可以看到更为复杂的求和问题,这一类问题也有了较系统、普遍的解法。
在朱世杰的许多求和问题中,下述的一串三角垛公式有着重要意义。其他的求和公式都可以从这串公式演变出来。这串公式是:
等差数列(茭草垛)
n1r=1+2+3+……+n=12!n(n+1)①
二阶等差数列(三角垛)
∑n112!r(r+1)=1+3+6+…+12n(n+1)
13!n(n+1)(n+2)②
三阶等差数列(撒星形垛)
∑n113!r(r+1)(r+2)=1+4+10+……
=14!n(n+1)(n+2)(n+3)③
四阶等差数列(三角撒星形垛)
∑n114!r(r+1)(r+2)(r+3)=1+5+15+……
=15!n(n+1)…(n+4)④
五阶等差数列(三角撒星更落一形垛)
∑n115!r(r+1)+……+(r+4)=1+6+21+…
=16!n(n+1)…(n+5)⑤
从这一串公式,朱世杰归纳得出一般公式:
∑nr=11p!r(r+1)(r+2)……(r+p—1)
=1(p+1)!n(n+1)(n+2)…(n+p)(A)
而公式①②③④⑤恰好是(A)式当p=1,2,3,4,5时的情况。
值得注意的是,在上述一串等差数列求和公式中,除第一个等差数列外,每一个数列的通项都是它上一数列前n项之和。从垛积的意义上讲来,这相当于把前式至第r层为止的垛积,落为一层,作为后式所表示垛积中的第r层(即式中第r项)。假如我们把这一点和各公式的名称对照起来看时,不难看出朱世杰经常将公式称为前式的“落一形”的意义。“落为一层”,这大概就是朱世杰所用各种名目中“落一”的意义。这也证明了朱世杰曾对这一串三角垛公式的前后式之间的关系进行了研究和比较。
贾宪三角朱世杰是如何得出这一串高阶等差数列求和公式的,古书上没有记载。但如果将这等差数列与贾宪三角作一比较,可以发现:这一串数列及它们的和都可以从斜视贾宪三角而看出。所谓斜视贾宪三角,是将贾宪三角中的数,像下图那样由斜线串联起来,自上而下地看。这样,无论是撇向(丿)看,还是捺向看,都可以发现如下一组公式:
①1+1+……+1=C1n
或1+1+……+1=n
②1+2+……+C1n=C2n+1
或1+2+……+n=12!n(n+1)
③1+3+6+……+C2n+1=C3n+2
或1+3+6+……+12!n(n+1)
=13!n(n+1)(n+2)
④1+4+10+……+C3n+2=C4n+3
或1+4+10+……+13!n(n+1)(n+2)
=14!n(n+1)(n+2)(n+3)
⑤1+5+15+……+C4n+3=C5n+4
或1+5+15+……+14!n(n+1)(n+2)(n+3)
=15!n(n+1)(n+2)(n+3)(n+4)
⑥1+5+21+……+C5n+4=C6n+5
或1+6+21+……+15!n(n+1)…(n+4)
=16!n(n+1)…(n+5)
这正好就是朱世杰得出的一串三角垛公式。朱世杰是否是从贾宪三角中发现他的三角垛公式的,没有史料证实,但在朱世杰的《四元玉鉴》中确实附有一张与贾宪三角同样的图表,并且数与数之间都用斜线联系着。
古乘七法方图(载《四元玉鉴》)招差术
宋元时期天文学与数学的关系进一步密切了,许多重要的数学方法,如高次方程的数值解法,以及高次等差数列求和方法等,都被天文学所吸收,成为制定新历法的重要工具。元代的《授时历》就是一个典型。
《授时历》是由元代天文学家兼数学家王恂(1235~1281)、郭守敬(1231~1316)为主集体编写的一部先进的历法著作,先进之一,就是其中应用了招差术。《授时历》用招差术来推算太阳逐日运行的速度以及它在黄道上的经度,还用招差术来推算月球在近地点周日逐日运行的速度。
招差术属现代数学中的高次内插法。元代以前,隋朝天文学家刘焯在《皇极历》中给出了等间距的二次内插公式。由于太阳的视运动对时间来讲并不是一个二次函数,因此即使用不等间距的二次内插公式也不能精确地推算太阳和月球运行的速度等。宋代以后,由于对高阶等差级数的研究,招差术有了新的发展。王恂和郭守敬等人根据“平、定、立”三差创造了三次内插法推算日月运行的速度和位置。
设在等间距的时间为t、2t、3t、…内的观察结果分别为f(t)、f(2t)、f(3t)、…,则计算日月在t+s时(0<s<t的精确位置可用下列公式:
f(t+s)=f(t)+sΔ+12!s(s—1)Δ2+
13!s(s—1)(s—2)Δ3
式中Δ、Δ2、Δ3是:如设
Δ11=f(2t)—f(t),Δ12=f(3t)—f(2t)
Δ13=f(4t)—f(3t)
则Δ21=Δ12—Δ11,Δ22=Δ13—Δ12,Δ31=Δ22—Δ21
招差术在朱世杰的时候得到了更深入的发展。《四元玉鉴》“如象招数”(卷中之十)一门共5问,都是和招差有关的问题。在这里,朱世杰在中国数学史上第一次完整地列出了高次招差的公式。这正是因为他比较完善地掌握了级数求和方面的知识,特别是掌握了各种三角垛求和方面的知识的缘故。
例如书中的第5题:“今有官司依立方招兵,初(日)招方面三尺,次(日)招方面转多一尺,……已招二万三千四百人。……问招来几日?”
题目指示第一日招33=27人,第二日招43=64人,第三日招53=125人,等等。问几日后共招23400人。依据朱世杰的“自注”知道他是用招差术立出解题的方程式的。先列表如下:
招差术公式表
表内:s0=0,s1=27,s2=27+64,s3=27+64+125,…
上差:s1—s0=27,s2—s1=64,s3—s2=125,…
二差:64—27=37,125—64=61,216—125=91,…
下差:30—24=6,36—30=6,42—36=6,…
下差是常数,故是最后的差数。依招差术计算,到第n日招到的总人数是:
Sn=27n+37n(n—1)2!+24n(n—1)(n—2)3!+
6n(n—1)(n—2)(n—3)4!
表内各项的系数27,37,24,6是表内上差、二差、三差、下差各行的第一个数字。朱世杰设m=n—3,已知sn=23400,上式化为:
27(m+3)+372!(m+3)(m+2)+243!(m+3)(m+2)(m+1)+64!(m+3)(m+2)(m+1)m=23400
化简得:
m4+22m3+181m2+660m—92736=0
用增乘开方法求得m=12,故n=15(日)。
在《四元玉鉴》卷中“茭草地段”门,朱世杰扩充了杨辉的三角垛求和公式,建立起属于
∑nr=1r(r+1)(r+2)…(r+p—1)p!
=n(n+1)(n+2)……(n+p)(p+1)!
类型的一系列公式,作为研究一般高阶等差级数的基本公式。
同余式理论
《孙子算经》之后,一次同余式理论成了中国古代数学中的一个十分引人注目的内容。从西汉到宋代的千余年间,有很多天文学家和数学家进行了这方面的研究,终于在秦九韶手中发展成一个系统的理论——大衍求一术,并且推广其应用范围,取得了举世公认的杰出成就。
秦九韶自幼爱好数学,少年时跟随父亲到杭州,曾跟当时太史局的一些著名的天文学家数学家学习天文、历算。1247年9月他总结20余年的刻苦钻研成果,写成《数书九章》18卷,其中第一、二卷详细讨论了一次同余式的解法。
秦九韶首先提出了一些有关的概念。以“物不知数”题为例,他把题中的3、5、7这类数叫做“定母”;把它们的最小公倍数105称为“衍母”;把用3、5、7除105所得的商35、21、15称为“衍数”,通过分析而得到的数字2、1、1称为“乘率”。计算的关键实质上就是求“乘率”,即求第三章介绍的孙子剩余定理中的α、β、γ,因为有了这三个数,答案N通过公式是不难算出的。
秦九韶在创立剩余定理时的主要功绩之一是给出了一个求“乘率”的方法,即他所谓的“大衍求一术”。
设A和G是两个互质的正整数,所谓“乘率”α,其应满足αG≡1(modA)。按“大衍求一术”,如果G>A,设G=Aq+G1G1<A,那么,同余式αG1≡1(modA)是和αG≡1(modA)等价的。于是将G1、A二数辗转相除,得到一连串的商数q1、q2……qn,同时按一定的规则,依次计算K1、K2……Kn
A=G1q1+r1K1=q1
G1=r1q2+r2K2=q2K1+1
r1=r2q3+r3K3=q3K2+K1
rn—2=rn—1qn+rn(rn=1)Kn=qnKn—1+Kn—2
当rn=1而n是偶数时,最后得出的Kn就是所要求的“乘率”α,如果αn=1而n是奇数,那么再往下除一次,即计算rn+1=rnqn+rn—1,由于rn=1,所以若令商数qn+1=rn+1—1,则余数rn+1仍旧是1。这时作Kn+1=qn+1Kn+Kn—1,因为n+1是偶数,所以Kn—1就是所求的乘率。
求出乘率,问题便迎刃而解了。因此说秦九韶的“大衍求一术”是解决一次同余式问题的关键方法,在使用上很有价值。《数书九章》中秦九韶举了许多需要用大衍求一术解决的应用问题,如“古历会积”“积尺寻源”“推计土功”“程行计地”等等,广泛用于解决历法、工程、赋役和军旅等实际问题。有些问题中的模A、B、C还不是两两互质的,对此秦九韶也给出了正确的计算程序,通过适当地选用因子使两两不互质的模转化为两两互质的情况,所有这些计算方法都十分合理正确,形式也特别整齐、简明,可以看出秦九韶在数学上的造诣之深。
中国古代的同余式理论一直与历法中推算上元积年相联系。因此从元代《授时历》取消了推算上元积年以后,大衍术从此也就在历法中消失了,而且由于“上元之法久不行用,于是……五百年来无有知其说者矣。”明清两代大衍术成了普及数学游戏的内容,在数学上没有任何新的建树。