第八十八章 数学
五代十国时期各地方政权连年征战,社会动荡不安,但数学教育仍在以不同的形式继续进行,并有一批数学家和天文学家为数学知识的传播和数学的发展作出了积极的贡献。据史籍记载,后唐明宗天成五年(930),宋延美“明算科及第。是年明算五人,而延美为之首”50000528_2162_0①。这说明当时重视数学教育,而宋延美作为中试的五人之首,显然有较高的数学水平。又如后梁河东闻喜(今属山西)人裴迪“明筹算”②,后晋与后汉并州(今山西太原)人聂文进“善书算”③,南汉韶州曲江(今广东韶关)人薛崇誉“善《孙子》、《五曹算》”④,黄钟骏《畴人传》卷4引《南汉书》载晚唐与南汉周杰“尤精历算”,等等,这些人无疑都是有较高数学造诣的官员。当时一些天文学家如后晋马重绩撰修《调元历》,后周及宋初王处讷撰修《明玄历》和《应天历》,后周王朴撰修《钦天历》等,也必定掌握较复杂的数学知识。现存敦煌数学文献中有一部分为五代时的作品,从中可以了解当时民间数学教育的一些内容。
在隋唐五代数学教育不断推广和数学知识逐渐积累的雄厚基础上,两宋时期的中国数学取得了多项突破性进展,并逐步走上了中国传统数学发展的顶峰。这一时期出现了贾宪、秦九韶、杨辉等杰出数学家,撰写了《黄帝九章算法细草》、《数书九章》、《详解九章算法》、《杨辉算法》等数学名著,取得了诸如贾宪三角、增乘开方法、大衍求一术、垛积术、会圆木、纵横图等重要的数学成就,此外,在筹算简捷算法方面也有许多新成果,为珠算的产生提供了必不可少的算法条件。
在辽、金、西夏等统治地区,数学也有一定程度的进步。如辽金天文学家贾俊、杨级、赵知微和耶律履等曾分别撰修辽《大明历》、金《大明历》、《重修大明历》、《乙未历》等,都要用到不少数学知识。史籍记载,当时通晓数学的人也为数不少,尤其是在金朝统治的山西、河北地区,中国数学家创造了一种普遍的列方程的方法,即“天元术”,从而为元代在天元术、四元术等方面取得重大成就奠定了基础。
第一节 贾宪三角
贾宪是北宋时期的杰出数学家。关于他的生平,现在仅知,他是当时著名数学家和天文学家楚衍的弟子,曾以寄禄官左班殿直至司天监(后改太史局)任等官职,撰有《黄帝九章算法细草》9卷、《算法古集》2卷,但都已失传。据有人研究,贾宪《黄帝九章算法细草》约写于天圣元年(1023)至皇祐二年(1050)之间①。从南宋数学家杨辉《详解九章算法》所附《九章算法纂类》(1261)记载的该书部分内容可知,其中提出了著名的“开方作法本源”图以及立成释锁开平方法、立成释锁开立方法和增乘开方法等。
图1开方作法本源图开方作法本源图(图1)①,是一个由数字构成的三角形数表,现称“贾宪三角”,因见于杨辉著作,故亦曾称“杨辉三角”,实际上即指数为正整数的二项式定理系数表。杨辉曾明确指出:这个图系“出释锁算书,贾宪用此术。”图下五句说明文字的意思是说图中各行数字为开方过程中的各项系数以及具体的开方方法。元代数学家朱世杰《四元玉鉴》记载的“古法七乘方图”(图2),又在贾宪三角中增添了许多连线,更进一步表示出二项式(x+a)n展开式各项系数之间的关系。贾宪三角是数学史上的重大发现,它在数学的许多领域都有极其重要的应用。15世纪中亚数学家阿尔·卡西(Al—Kāshī)也曾给出二项式定理系数表,此后,这张图表又被德国数学家阿皮安努斯(P.Apianus,1527),施蒂费尔(M.Stifel,1544),意大利数学家塔尔塔利亚(N.Tartaglia,1556)和法国数学家帕斯卡(E.Pascal,1654)等 图2古法七乘方图讨论过,并被西方数学家称为“帕斯卡三角”,但这些数学家都比11世纪的贾宪晚很多年才获得这一成果。
杨辉《九章算法纂类》还载有贾宪立成释锁开平方法和开立方法。“立成”是唐以后天文学家对推算各种数据时所用数表的通称,“释锁”在宋元数学家著作中则指开方和解数字方程。因此,贾宪的立成释锁法应是利用一种数表来解决开平方、开立方乃至开高次方问题的方法,而这种数表很可能就是他提出的开方作法本源图。但据《九章算法纂类》所载,其演算步骤则与《九章算术》少广章开平方术和开立方术基本相同。
第二节 增乘开方法
贾宪的又一重要数学成就是根据开方作法本源图的构造原理创造了增乘开方法。用这种方法开平方和开立方要比《九章算术》少广章的方法简便得多,并且其运算原则可以推广到求任何高次幂和高次方程正实根的近似值。贾宪用此法解决了求x2=A,x4=A等的近似值问题。在宋代有不少数学家对解方程问题进行研究。如据杨辉《田亩比类乘除捷法》所载,刘益在《议古根源》(全书已佚,杨辉书收有其二十多个算题)中提出了“正负开方术”,所论方程系数可正可负,取消了以前对方程系数只允许为正整数的限制,并讨论了x2-ax=A和-x2+ax=A(a>0,A>0)的数值解法,把方程论(包括增乘开方法)推进了重要的一步。但是总的说来这些工作属于初创,还不够完整和系统。
南宋数学家秦九韶创造性地继承和发展了前人的先进成就,提出了一套完整的正负开方术程序,成功地将增乘开方法运用于求一般高次方程:a0xn+a1xn-1+a2xn-2+…an-1x+an=0(an<O,a0≠0)
的数值解。他在《数书九章》中列举了二十多个解方程问题,次数最高达十次;除一般方法外,还讨论了“投胎”、“换骨”、“玲珑”、“同体连枝”等特殊情形;并将其方法广泛应用于面积、体积、测量等方面的实际问题,从而在高次方程数值解法问题上,达到了当时世界数学的最高水平。
增乘开方法的特点是在演算过程中自下而上随乘随加,求出各项系数,进行方程变换,逐步求出方程正根的各位数字,其演算程序具有很强的机械性,可以毫无困难地转化为计算机程序。在西方,关于高次方程数值解法的探讨,经历了漫长的历史过程,直到1804年,意大利数学家鲁非尼(P.Ruffini)才创立了一种逐次近似法用以解决数字高次方程解的近似值问题,并为此获得了意大利科学协会颁发的金质奖章,而在1819年英国数学家霍纳(W.G.Horner)才提出与增乘开方法演算步骤基本一致的算法,后被称为“霍纳法”。但是,他们已经比秦九韶晚了五百多年,并且其原始方法也没有秦九韶法简捷明确。在现代一些计算数学著作中已将这种高次方程数值解法改称“秦九韶法”。
第三节 大衍求一术
大衍求一术是中国古代数学家用于解决一次同余组问题的方法。这类问题与历法中关于“上元积年”的推算有着密切的关系。在中国古代,天文学家们假定远古时有一年的十一月初一甲子日夜半又恰好是合朔和那一年的冬至,并把这一时刻定为历法计算的起点,称为“历元”。从该年到编历年所经过的总年数,就叫做“上元积年”。已知编历年实测冬至时刻和十一月初一合朔时刻推算上元积年,就是求解一次同余组问题。西汉历法中已有上元积年的数据,但没有算法的记载。由于当时问题比较简单,所以其算法也不会太难。南北朝时期《孙子算经》中的“物不知数问题”(亦称“孙子问题”),是最早见于中国数学文献的一次同余组问题,但其解法很不完备。随着天文历法的发展,天文学家对历元又提出了“日月合璧,五星联珠”等要求,于是推算上元积年的条件更为复杂,求解有关同余组也就需要更高的技巧。显然,从两汉到宋朝的千余年中,一定会有很多天文学家和数学家曾研究并很熟悉一次同余组的解法,但可惜的是在有关文献中除一些数据外却没有更多的记载。南宋数学家秦九韶系统地总结和发展了前人的贡献,在《数书九章》中创立“大衍求一术”,提出关于一次同余组问题的相当完整的理论和算法,并且推广其应用范围,取得了举世公认的杰出成就。他所著的《数书九章》,曾称《数学大略》、《数学九章》,全书18卷,分9类,每类9题共81个应用问题,其内容涉及天文历法、土地面积、勾股测量、建筑工程、田赋户税、商业贸易、货币金融、军事活动等丰富内容,是一部可与《九章算术》相媲美的数学名著。
《数书九章》所载大衍求一术的大意是,设要求解一次同余组:x≡ri(modmi)(其中i=1,2,3,…,n)
秦九韶把求最小正整数x的问题归结为求出一组数ki,使之满足条件:ki
≡1(modmi),(i=1,2,3…,n)
其中M=m1·m2·…·mn,ki称为“乘率”。于是,一次同余组的最小正整数解x=(r1k1
+r2k2
+…+rnkn
)—pM(p为非负整数)
这就是现在数论中著名的“孙子定理”。秦九韶详细论述了用辗转相除推算ki的方法,由于运算的最后一步要出现余数1,因而称为“求一术”。他又进一步将其与《易经·系辞》中的“大衍之数”附会起来,而称之为“大衍求一术”(现在一般通指一次同余组解法)。此外,他还分别讨论了模数m1、m2、…、mn两两互素和不互素的情形,并给出了相应的变换方法。在欧洲,直到18、19世纪,著名数学家欧拉(L.Euler,1743)和高斯(C.F.Gauss,1801)等才对一般同余组解法进行了深入研究,获得与秦九韶相同的结果,并且对模数两两互素的情形给出了严格的证明。这已经是秦九韶以后500年的事情了。在数学史上,上述定理过去称为“中国剩余定理”,现多改称“孙子剩余定理”或“孙子定理”。
第四节 垛积术
在中国古代,对于一般等差数列和等比数列,很早就有了初步的研究成果,如《九章算术》、《张丘建算经》等都提出了一些有关等差级数求公差及求和的公式。北宋科学家沈括在《梦溪笔谈》中又首创“隙积术”,开始研究某种物品(如酒坛、圆球、棋子等)按一定方式堆积起来求其总数问题,即高阶等差级数的求和方法。设一个长方台垛的上广(顶层宽)为a(个物体),长为b,下广(底层宽)为c,长为d,高共有n层,则沈括的结果相当于得到长方台形垛积物体总数:S=ab+(a+1)(b+1)+(a+2)(b+2)+…
+[a+(n-1)][b+(n-1)] =
[(2b+d)a+(2d+b)c]+
(c-a).
关于这个结果,沈括仅说:“予思而得之”①,但他没有详细说明是用什么方法求得这一正确的长方台垛公式的。南宋数学家杨辉在《详解九章算法》和《算法通变本末》中,丰富和发展了沈括的成果,提出了诸如
之类的菓子垛和三角垛求和公式。沈括、杨辉等讨论的级数与一般等差级数不同,它们前后两项之差并不相等,但是逐项差数之差或者高次差相等。对这类高阶等差级数的研究,沈括称为“隙积术”,杨辉之后则一般称为“垛积术”,后来成为一项重要的研究课题,吸引不少数学家从事这方面的工作。如元代数学家朱世杰就得到了一系列更复杂的高阶等差级数求和公式,并把垛积术与招差术(高次内插法)联系起来,对后世产生了很大影响。清代数学家顾观光指出:“堆垛之术详于杨氏、朱氏二书,而创始之功,断推沈氏。”② 第五节 会圆术
沈括在数学上的又一重要贡献是创立“会圆术”③,给出了中国数学史上最早的由弦和矢的长度来求弧长的近似公式。如图3,设圆的直径为d,BE弦长为c,DK矢长为v,BDE弧长为s,则沈括的结果相当于得到了公式S≈c+
这是一个近似公式,但在一定范围内使用还是比较简便的。他同时还得出一个由矢长和半径求弦长的公式。虽然沈括并没有说明他的证明方法,但这两个公式很容易从《九章算术》弧田术及勾股定理推导出来。会圆术的重要意义还在于它在中国数学史上最早提出了关于弧、弦、矢之间的关系问题,此后一些数学家继续对这一新课题进行研究并取得了不少新成果。如元代郭守敬、王恂等人在《授时历》中反复应用沈括的会圆术,并根据相似三角形各线段间的比例关系,在推算“赤道积度”(太阳赤经余弧)和“赤道内外度”(太阳赤纬)方面创立了一种新的方法。就数学意义而言,这种新算法相当于球面三角学中求解球面直角三角形的方法。
第六节 纵横图
纵横图,亦称幻方,是把从1到n2的自然数排列成纵横各有n个数,并且使同行、同列及同一对角线上n个数的和都相等的一种方阵。纵横图是中国古代数学中由来已久的比较特殊的内容之一。《数术记遗》载有“九宫算”,甄鸾注称:“九宫者,即二四为肩,六八为足,左三右七,戴九履一,五居中央。”这实际上是一个三行纵横图,各行、各列及两条对角线上的数字之和都等于15。“九宫图”,后世通称“洛书”,其起源当早于汉代,同时它也是世界上现在已知最早的纵横图。南宋杨辉在《续古摘奇算法》中列出了n=3,4,5,…,10行的各种纵横图,如十行纵横图称为“百子图”等,并对一些纵横图的构造方法进行了研究。如洛书数的构造方法是“九子斜排,上下对易,左右相更,四维挺出”等。此外,他还记录了聚五图、聚六图、聚八图、攒九图、八阵图、连环图等圆形或环形的新型数字组合图,这些都可说是纵横图的进一步演变和发展①。丁易东《大衍索隐》也收有与杨辉攒九图和连环图相似的图。明清时期一些数学家如程大位、王文素、方中通、张潮、保其寿等对纵横图进行深入研究,取得了更加丰富多彩的结果。过去,纵横图大多是作为开动脑筋启发智力的一种数学游戏,而现在则已成为组合数学的重要内容,在程序设计、图论、组合分析等方面得到了广泛的应用。
第七节 筹算算法的发展
中国古代数学在筹算的基础上取得了极其辉煌的成就。但是,作为主要计算工具的算筹,也还存在不少缺点,特别是使用不便,演算速度和效率不可能很高。例如筹算乘除法,要把算筹摆成上中下三层,演算时要不断拿上拿下,一根根移动,相当麻烦。所以,当时天文学家和数学家乃至财会人员作比较复杂的计算,有时要把算筹摆满一桌子,即所谓“置筹盈案”。可想而知,用四五寸长,二三分宽的小竹棍摆一个十几位的数字,所占的地方就已很可观了。随着农业、手工业和商业的发展,日益需要进行大量繁杂的计算,并且要求算得快和算得准,因此原有计算方法甚至计算工具都越来越不能适应实际需要,改进算筹和筹算的迫切要求迅速提到日程上来。对筹算方法的研究和改进,首先是从简化乘除运算开始的。早在8世纪的中唐时期,以《夏侯阳算经》名义流传至今的《韩延算书》,就记载了把多位数乘除通过身外添减等转变成乘以或除以单位数的方法。北宋科学家沈括在《梦溪笔谈》中提到了求一、上驱、搭因、重因、增成之类筹算的简捷算法并且指出:算术“见简即用,见繁即变,不胶一法”①,概括地说明了当时这样一种趋势。
南宋数学家杨辉对筹算算法的发展有突出的贡献。杨辉,字谦光,钱塘(今浙江杭州)人,生平不详,曾在浙江做过地方官员,撰有《详解九章算法》附《九章算法纂类》共12卷(1261),《日用算法》2卷(1262),《乘除通变本末》3卷(1274),《田亩比类乘除捷法》2卷(1275),《续古摘奇算法》2卷(1275),后三种一般合称《杨辉算法》。在杨辉的著作中,系统地叙述了以加代乘和以减代除的各种方法,其中“加法代乘”有五法,“减法代除”有四法,如加一位、加二位、重加、隔位加、连身加、减一位、减二位、重减、隔位减等。他还介绍了唐宋相传的求一代乘除法并编成易于上口的歌诀。如求一乘法歌诀是“五六七八九,倍之数不走。二三当折半,遇四两折纽。倍折本从法,实即反其有……”①用这种方法把乘数的首位变成1,然后再用加一位、加二位等方法来计算。对于除法,也有求一歌用来简化运算。但通过求一除法歌诀以减法代除进行除法运算实际上并不简捷,所以后来被归除歌诀所代替。杨辉《乘除通变算宝》中还载有九归歌诀、化零歌以及除数是两位数的飞归歌诀等。如九归古诀是:“归数求成十,归除自上加。半而为五计,定位退无差。”杨辉在这四句古诀的基础上,又添注了三十二句新口诀,使之更加明确。像杨辉算书里记载的歌诀形式,在13、14世纪宋、元、明三代是很流行的。当时不仅用这种诗歌形式提出问题,而且用来说明算法。这种便于记忆和掌握的形式,后来更加简明和完善。它反映了筹算算法的发展,也促进了珠算的产生,而它本身也逐渐演变成后人熟知的珠算口诀。
在唐宋时期还有一部《谢察微算经》。《新唐书·艺文志》载《谢察微算经》3卷,《宋史·艺文志》作谢察微《发蒙算经》3卷,对这部算经的年代现在还难以确定。有些学者认为这是五代时的作品,并据此书残存部分“用字例义”中提到与算盘有关的用语,如中、算盘之“中”、脊、进、退、上、下等,推断五代时已经有了珠算②。但是,这部分内容是否为《谢察微算经》原有的内容尚有疑义,并且现在还没有掌握元代之前已有珠算的任何一条可靠记载,所以对这类问题尚有待进一步的考证与研究。
除上述各项数学成就外,在诸如四舍五入法,小数记法,联立方程组解法,已知三角形三边求面积的公式,棋局总数计算,运筹思想与实践等方面,两宋时期的数学家们也都作出了相当出色的贡献。
第八节 数学教育
两宋时期官府对数学教育事业曾给予了一定的重视,但几起几落,争议不休。北宋初期算学曾与文、武两学并列,设有算学博士,但一直未开办正式的学馆。宋神宗元丰七年(1084)诏令通算学者可于吏部就试,合格者授予地位很低的官职,并令秘书省刊刻算经十书,以备学习之用。宋哲宗元祐元年(1086),曾派人选址,准备建造算书馆,但是由于找不到合适的教员,并且有人反对说,将来“建学之后,养士设科,徒有烦费,实于国事无补”,于是作罢。直到宋徽宗崇宁三年(1104),国子监始立算学,设博士4人和其他职员8人,计划招收260名学生。学习教材是《九章》、《周髀》、《海岛》、《孙子》、《五曹》、《张丘建》、《夏侯阳》等。考试分上、内、外三舍(三级),上舍合格者可授予通仕郎、登仕郎、将仕郎等初级官阶。崇宁五年(1106)初,算学被撤销,而在同年底却又得到恢复。大观三年(1107)还搞了一次封祀历代数学家和天文学家的礼仪活动,如封张衡为西鄂伯,祖冲之为范阳子,刘徽为淄乡男等,并打算绘像从祀,但也由于有人反对而未正式进行。大观四年(1108),又撤销算学,算学生并入太史局。政和三年(1113)复置算学,仍用算学馆旧址,并令地方上仿照执行,其教育制度与元丰、崇宁时相同。宣和二年(1120)再次撤销了算学馆及有关的官职。由上所述可以看出,北宋时算学馆的兴废交替比较频繁,这种情况当然对数学发展是不利的。到了南宋时期,官办数学教育事业就更趋衰微了。但另一方面,官办数学教育毕竟培养了一批通晓数学的人才,并对民间数学传习产生了一定的鼓励和示范作用,这还是应该肯定的。
在数学教材方面,北宋元丰七年(1084)刻印算书时,唐代十部算经中的《缀术》已经失传,因而只刻印了九部,并且据考证,其中《夏侯阳算经》并非原著,而是唐代中期的《韩延算术》,这部书由于卷上第一章引用了夏侯阳的一句话而被误认为《夏侯阳算经》。元丰年间所刻《周髀算经》、《九章算术》、《海岛算经》、《孙子算经》、《五曹算经》、《夏侯阳算经》、《张丘建算经》、《五经算术》和《缉古算经》这九部算经是最早的官刻本数学书籍,可惜在清初就已全部亡佚。南宋绍兴九年(1139)刻书兴学,但未刻印算书。一直到南宋嘉定六年(1213),鲍澣之在福建汀州学校主持翻刻北宋本九部算经时,又补入《数术记遗》1卷。到了清初,南宋所刻算书也仅存《周髀》、《孙子》、《张丘建》、《五曹》、《缉古》、《夏侯阳》和《九章》7种孤本,其中《九章算术》仅存5卷。这些书幸得传留至今。宋刻本十部算书基本上是以李淳风等注释本为基础的,并且其绝大部分内容通过各种途径流传下来,为我们保存了宝贵的数学史料,这就是我们现在可以见到的《算经十书》。
从隋唐到宋元,官府兴办的数学教育事业日趋衰落,而民间数学教育却有所发展。在敦煌千佛洞发现的算书和算表,记载了算筹记数、乘法口诀、四则运算、面积、体积等实用算术方法。这些著作大多是唐末宋初的作品,从中可以反映当时民间数学教育的一些内容,并表明当时所用教材并非都是官府统一刊布的算经。到了宋元时期,民间数学教育更为流行,如李冶曾在河北元氏与获鹿两县交界处的封龙山隐居讲学,并进行数学研究。在元代数学家和天文学家郭守敬少年求学时的河北磁县紫金山,形成了一个以刘秉忠、张守谦、张易等为中心的成就卓著的学派,数学也是这个学派教学与研讨的领域之一。元代数学家朱世杰更是“以数学名家周游湖海二十余年”,“四方之来学者日众”。他的《算学启蒙》是一部很好的数学入门书,其中还包括“天元术”等当时数学的最新成果。特别是南宋之后刻印的数学著作中,出现了歌谣形式的数学问题和算法口诀,更能说明数学的传授已经走出官学的大门,逐渐深入到了民间。此外,还应提到的是杨辉在《乘除通变本末》中给出了一个“习算纲目”,这是学习一般民用和商用数学的一份切合实际的教学大纲,其中提倡循序渐进与熟读精思,注重培养和提高计算能力等。这个“习算纲目”是我国数学教育史上的一篇重要文献。
①《册府元龟》卷869。
②《旧五代史》卷4。
③《新五代史》卷30。
④《宋史》卷481。
①钱宝琮主编:《中国数学史》,科学出版社1964年版,第145页。
①见中华书局影印本《永乐大典》卷16344所收杨辉《详解(九章)算法》。
①《梦溪笔谈》卷18。
②顾观光:《九数存古》卷5。
③《梦溪笔谈》卷18。
①参见李俨:《中算家的纵横图研究》,见李俨《中算史论丛》第一集,科学出版社1955年版。
①《梦溪笔谈》卷18。
①见杨辉《乘除通变本末》中的《乘除通变算宝》。
②李迪、冯立升:《〈谢察微算经〉试探》,见李迪主编《数学史研究文集》第三辑,内蒙古大学出版社1992年版。
五代十国时期各地方政权连年征战,社会动荡不安,但数学教育仍在以不同的形式继续进行,并有一批数学家和天文学家为数学知识的传播和数学的发展作出了积极的贡献。据史籍记载,后唐明宗天成五年(930),宋延美“明算科及第。是年明算五人,而延美为之首”50000528_2162_0①。这说明当时重视数学教育,而宋延美作为中试的五人之首,显然有较高的数学水平。又如后梁河东闻喜(今属山西)人裴迪“明筹算”②,后晋与后汉并州(今山西太原)人聂文进“善书算”③,南汉韶州曲江(今广东韶关)人薛崇誉“善《孙子》、《五曹算》”④,黄钟骏《畴人传》卷4引《南汉书》载晚唐与南汉周杰“尤精历算”,等等,这些人无疑都是有较高数学造诣的官员。当时一些天文学家如后晋马重绩撰修《调元历》,后周及宋初王处讷撰修《明玄历》和《应天历》,后周王朴撰修《钦天历》等,也必定掌握较复杂的数学知识。现存敦煌数学文献中有一部分为五代时的作品,从中可以了解当时民间数学教育的一些内容。
在隋唐五代数学教育不断推广和数学知识逐渐积累的雄厚基础上,两宋时期的中国数学取得了多项突破性进展,并逐步走上了中国传统数学发展的顶峰。这一时期出现了贾宪、秦九韶、杨辉等杰出数学家,撰写了《黄帝九章算法细草》、《数书九章》、《详解九章算法》、《杨辉算法》等数学名著,取得了诸如贾宪三角、增乘开方法、大衍求一术、垛积术、会圆木、纵横图等重要的数学成就,此外,在筹算简捷算法方面也有许多新成果,为珠算的产生提供了必不可少的算法条件。
在辽、金、西夏等统治地区,数学也有一定程度的进步。如辽金天文学家贾俊、杨级、赵知微和耶律履等曾分别撰修辽《大明历》、金《大明历》、《重修大明历》、《乙未历》等,都要用到不少数学知识。史籍记载,当时通晓数学的人也为数不少,尤其是在金朝统治的山西、河北地区,中国数学家创造了一种普遍的列方程的方法,即“天元术”,从而为元代在天元术、四元术等方面取得重大成就奠定了基础。
第一节 贾宪三角
贾宪是北宋时期的杰出数学家。关于他的生平,现在仅知,他是当时著名数学家和天文学家楚衍的弟子,曾以寄禄官左班殿直至司天监(后改太史局)任等官职,撰有《黄帝九章算法细草》9卷、《算法古集》2卷,但都已失传。据有人研究,贾宪《黄帝九章算法细草》约写于天圣元年(1023)至皇祐二年(1050)之间①。从南宋数学家杨辉《详解九章算法》所附《九章算法纂类》(1261)记载的该书部分内容可知,其中提出了著名的“开方作法本源”图以及立成释锁开平方法、立成释锁开立方法和增乘开方法等。
图1开方作法本源图开方作法本源图(图1)①,是一个由数字构成的三角形数表,现称“贾宪三角”,因见于杨辉著作,故亦曾称“杨辉三角”,实际上即指数为正整数的二项式定理系数表。杨辉曾明确指出:这个图系“出释锁算书,贾宪用此术。”图下五句说明文字的意思是说图中各行数字为开方过程中的各项系数以及具体的开方方法。元代数学家朱世杰《四元玉鉴》记载的“古法七乘方图”(图2),又在贾宪三角中增添了许多连线,更进一步表示出二项式(x+a)n展开式各项系数之间的关系。贾宪三角是数学史上的重大发现,它在数学的许多领域都有极其重要的应用。15世纪中亚数学家阿尔·卡西(Al—Kāshī)也曾给出二项式定理系数表,此后,这张图表又被德国数学家阿皮安努斯(P.Apianus,1527),施蒂费尔(M.Stifel,1544),意大利数学家塔尔塔利亚(N.Tartaglia,1556)和法国数学家帕斯卡(E.Pascal,1654)等 图2古法七乘方图讨论过,并被西方数学家称为“帕斯卡三角”,但这些数学家都比11世纪的贾宪晚很多年才获得这一成果。
杨辉《九章算法纂类》还载有贾宪立成释锁开平方法和开立方法。“立成”是唐以后天文学家对推算各种数据时所用数表的通称,“释锁”在宋元数学家著作中则指开方和解数字方程。因此,贾宪的立成释锁法应是利用一种数表来解决开平方、开立方乃至开高次方问题的方法,而这种数表很可能就是他提出的开方作法本源图。但据《九章算法纂类》所载,其演算步骤则与《九章算术》少广章开平方术和开立方术基本相同。
第二节 增乘开方法
贾宪的又一重要数学成就是根据开方作法本源图的构造原理创造了增乘开方法。用这种方法开平方和开立方要比《九章算术》少广章的方法简便得多,并且其运算原则可以推广到求任何高次幂和高次方程正实根的近似值。贾宪用此法解决了求x2=A,x4=A等的近似值问题。在宋代有不少数学家对解方程问题进行研究。如据杨辉《田亩比类乘除捷法》所载,刘益在《议古根源》(全书已佚,杨辉书收有其二十多个算题)中提出了“正负开方术”,所论方程系数可正可负,取消了以前对方程系数只允许为正整数的限制,并讨论了x2-ax=A和-x2+ax=A(a>0,A>0)的数值解法,把方程论(包括增乘开方法)推进了重要的一步。但是总的说来这些工作属于初创,还不够完整和系统。
南宋数学家秦九韶创造性地继承和发展了前人的先进成就,提出了一套完整的正负开方术程序,成功地将增乘开方法运用于求一般高次方程:a0xn+a1xn-1+a2xn-2+…an-1x+an=0(an<O,a0≠0)
的数值解。他在《数书九章》中列举了二十多个解方程问题,次数最高达十次;除一般方法外,还讨论了“投胎”、“换骨”、“玲珑”、“同体连枝”等特殊情形;并将其方法广泛应用于面积、体积、测量等方面的实际问题,从而在高次方程数值解法问题上,达到了当时世界数学的最高水平。
增乘开方法的特点是在演算过程中自下而上随乘随加,求出各项系数,进行方程变换,逐步求出方程正根的各位数字,其演算程序具有很强的机械性,可以毫无困难地转化为计算机程序。在西方,关于高次方程数值解法的探讨,经历了漫长的历史过程,直到1804年,意大利数学家鲁非尼(P.Ruffini)才创立了一种逐次近似法用以解决数字高次方程解的近似值问题,并为此获得了意大利科学协会颁发的金质奖章,而在1819年英国数学家霍纳(W.G.Horner)才提出与增乘开方法演算步骤基本一致的算法,后被称为“霍纳法”。但是,他们已经比秦九韶晚了五百多年,并且其原始方法也没有秦九韶法简捷明确。在现代一些计算数学著作中已将这种高次方程数值解法改称“秦九韶法”。
第三节 大衍求一术
大衍求一术是中国古代数学家用于解决一次同余组问题的方法。这类问题与历法中关于“上元积年”的推算有着密切的关系。在中国古代,天文学家们假定远古时有一年的十一月初一甲子日夜半又恰好是合朔和那一年的冬至,并把这一时刻定为历法计算的起点,称为“历元”。从该年到编历年所经过的总年数,就叫做“上元积年”。已知编历年实测冬至时刻和十一月初一合朔时刻推算上元积年,就是求解一次同余组问题。西汉历法中已有上元积年的数据,但没有算法的记载。由于当时问题比较简单,所以其算法也不会太难。南北朝时期《孙子算经》中的“物不知数问题”(亦称“孙子问题”),是最早见于中国数学文献的一次同余组问题,但其解法很不完备。随着天文历法的发展,天文学家对历元又提出了“日月合璧,五星联珠”等要求,于是推算上元积年的条件更为复杂,求解有关同余组也就需要更高的技巧。显然,从两汉到宋朝的千余年中,一定会有很多天文学家和数学家曾研究并很熟悉一次同余组的解法,但可惜的是在有关文献中除一些数据外却没有更多的记载。南宋数学家秦九韶系统地总结和发展了前人的贡献,在《数书九章》中创立“大衍求一术”,提出关于一次同余组问题的相当完整的理论和算法,并且推广其应用范围,取得了举世公认的杰出成就。他所著的《数书九章》,曾称《数学大略》、《数学九章》,全书18卷,分9类,每类9题共81个应用问题,其内容涉及天文历法、土地面积、勾股测量、建筑工程、田赋户税、商业贸易、货币金融、军事活动等丰富内容,是一部可与《九章算术》相媲美的数学名著。
《数书九章》所载大衍求一术的大意是,设要求解一次同余组:x≡ri(modmi)(其中i=1,2,3,…,n)
秦九韶把求最小正整数x的问题归结为求出一组数ki,使之满足条件:ki
≡1(modmi),(i=1,2,3…,n)
其中M=m1·m2·…·mn,ki称为“乘率”。于是,一次同余组的最小正整数解x=(r1k1
+r2k2
+…+rnkn
)—pM(p为非负整数)
这就是现在数论中著名的“孙子定理”。秦九韶详细论述了用辗转相除推算ki的方法,由于运算的最后一步要出现余数1,因而称为“求一术”。他又进一步将其与《易经·系辞》中的“大衍之数”附会起来,而称之为“大衍求一术”(现在一般通指一次同余组解法)。此外,他还分别讨论了模数m1、m2、…、mn两两互素和不互素的情形,并给出了相应的变换方法。在欧洲,直到18、19世纪,著名数学家欧拉(L.Euler,1743)和高斯(C.F.Gauss,1801)等才对一般同余组解法进行了深入研究,获得与秦九韶相同的结果,并且对模数两两互素的情形给出了严格的证明。这已经是秦九韶以后500年的事情了。在数学史上,上述定理过去称为“中国剩余定理”,现多改称“孙子剩余定理”或“孙子定理”。
第四节 垛积术
在中国古代,对于一般等差数列和等比数列,很早就有了初步的研究成果,如《九章算术》、《张丘建算经》等都提出了一些有关等差级数求公差及求和的公式。北宋科学家沈括在《梦溪笔谈》中又首创“隙积术”,开始研究某种物品(如酒坛、圆球、棋子等)按一定方式堆积起来求其总数问题,即高阶等差级数的求和方法。设一个长方台垛的上广(顶层宽)为a(个物体),长为b,下广(底层宽)为c,长为d,高共有n层,则沈括的结果相当于得到长方台形垛积物体总数:S=ab+(a+1)(b+1)+(a+2)(b+2)+…
+[a+(n-1)][b+(n-1)] =
[(2b+d)a+(2d+b)c]+
(c-a).
关于这个结果,沈括仅说:“予思而得之”①,但他没有详细说明是用什么方法求得这一正确的长方台垛公式的。南宋数学家杨辉在《详解九章算法》和《算法通变本末》中,丰富和发展了沈括的成果,提出了诸如
之类的菓子垛和三角垛求和公式。沈括、杨辉等讨论的级数与一般等差级数不同,它们前后两项之差并不相等,但是逐项差数之差或者高次差相等。对这类高阶等差级数的研究,沈括称为“隙积术”,杨辉之后则一般称为“垛积术”,后来成为一项重要的研究课题,吸引不少数学家从事这方面的工作。如元代数学家朱世杰就得到了一系列更复杂的高阶等差级数求和公式,并把垛积术与招差术(高次内插法)联系起来,对后世产生了很大影响。清代数学家顾观光指出:“堆垛之术详于杨氏、朱氏二书,而创始之功,断推沈氏。”② 第五节 会圆术
沈括在数学上的又一重要贡献是创立“会圆术”③,给出了中国数学史上最早的由弦和矢的长度来求弧长的近似公式。如图3,设圆的直径为d,BE弦长为c,DK矢长为v,BDE弧长为s,则沈括的结果相当于得到了公式S≈c+
这是一个近似公式,但在一定范围内使用还是比较简便的。他同时还得出一个由矢长和半径求弦长的公式。虽然沈括并没有说明他的证明方法,但这两个公式很容易从《九章算术》弧田术及勾股定理推导出来。会圆术的重要意义还在于它在中国数学史上最早提出了关于弧、弦、矢之间的关系问题,此后一些数学家继续对这一新课题进行研究并取得了不少新成果。如元代郭守敬、王恂等人在《授时历》中反复应用沈括的会圆术,并根据相似三角形各线段间的比例关系,在推算“赤道积度”(太阳赤经余弧)和“赤道内外度”(太阳赤纬)方面创立了一种新的方法。就数学意义而言,这种新算法相当于球面三角学中求解球面直角三角形的方法。
第六节 纵横图
纵横图,亦称幻方,是把从1到n2的自然数排列成纵横各有n个数,并且使同行、同列及同一对角线上n个数的和都相等的一种方阵。纵横图是中国古代数学中由来已久的比较特殊的内容之一。《数术记遗》载有“九宫算”,甄鸾注称:“九宫者,即二四为肩,六八为足,左三右七,戴九履一,五居中央。”这实际上是一个三行纵横图,各行、各列及两条对角线上的数字之和都等于15。“九宫图”,后世通称“洛书”,其起源当早于汉代,同时它也是世界上现在已知最早的纵横图。南宋杨辉在《续古摘奇算法》中列出了n=3,4,5,…,10行的各种纵横图,如十行纵横图称为“百子图”等,并对一些纵横图的构造方法进行了研究。如洛书数的构造方法是“九子斜排,上下对易,左右相更,四维挺出”等。此外,他还记录了聚五图、聚六图、聚八图、攒九图、八阵图、连环图等圆形或环形的新型数字组合图,这些都可说是纵横图的进一步演变和发展①。丁易东《大衍索隐》也收有与杨辉攒九图和连环图相似的图。明清时期一些数学家如程大位、王文素、方中通、张潮、保其寿等对纵横图进行深入研究,取得了更加丰富多彩的结果。过去,纵横图大多是作为开动脑筋启发智力的一种数学游戏,而现在则已成为组合数学的重要内容,在程序设计、图论、组合分析等方面得到了广泛的应用。
第七节 筹算算法的发展
中国古代数学在筹算的基础上取得了极其辉煌的成就。但是,作为主要计算工具的算筹,也还存在不少缺点,特别是使用不便,演算速度和效率不可能很高。例如筹算乘除法,要把算筹摆成上中下三层,演算时要不断拿上拿下,一根根移动,相当麻烦。所以,当时天文学家和数学家乃至财会人员作比较复杂的计算,有时要把算筹摆满一桌子,即所谓“置筹盈案”。可想而知,用四五寸长,二三分宽的小竹棍摆一个十几位的数字,所占的地方就已很可观了。随着农业、手工业和商业的发展,日益需要进行大量繁杂的计算,并且要求算得快和算得准,因此原有计算方法甚至计算工具都越来越不能适应实际需要,改进算筹和筹算的迫切要求迅速提到日程上来。对筹算方法的研究和改进,首先是从简化乘除运算开始的。早在8世纪的中唐时期,以《夏侯阳算经》名义流传至今的《韩延算书》,就记载了把多位数乘除通过身外添减等转变成乘以或除以单位数的方法。北宋科学家沈括在《梦溪笔谈》中提到了求一、上驱、搭因、重因、增成之类筹算的简捷算法并且指出:算术“见简即用,见繁即变,不胶一法”①,概括地说明了当时这样一种趋势。
南宋数学家杨辉对筹算算法的发展有突出的贡献。杨辉,字谦光,钱塘(今浙江杭州)人,生平不详,曾在浙江做过地方官员,撰有《详解九章算法》附《九章算法纂类》共12卷(1261),《日用算法》2卷(1262),《乘除通变本末》3卷(1274),《田亩比类乘除捷法》2卷(1275),《续古摘奇算法》2卷(1275),后三种一般合称《杨辉算法》。在杨辉的著作中,系统地叙述了以加代乘和以减代除的各种方法,其中“加法代乘”有五法,“减法代除”有四法,如加一位、加二位、重加、隔位加、连身加、减一位、减二位、重减、隔位减等。他还介绍了唐宋相传的求一代乘除法并编成易于上口的歌诀。如求一乘法歌诀是“五六七八九,倍之数不走。二三当折半,遇四两折纽。倍折本从法,实即反其有……”①用这种方法把乘数的首位变成1,然后再用加一位、加二位等方法来计算。对于除法,也有求一歌用来简化运算。但通过求一除法歌诀以减法代除进行除法运算实际上并不简捷,所以后来被归除歌诀所代替。杨辉《乘除通变算宝》中还载有九归歌诀、化零歌以及除数是两位数的飞归歌诀等。如九归古诀是:“归数求成十,归除自上加。半而为五计,定位退无差。”杨辉在这四句古诀的基础上,又添注了三十二句新口诀,使之更加明确。像杨辉算书里记载的歌诀形式,在13、14世纪宋、元、明三代是很流行的。当时不仅用这种诗歌形式提出问题,而且用来说明算法。这种便于记忆和掌握的形式,后来更加简明和完善。它反映了筹算算法的发展,也促进了珠算的产生,而它本身也逐渐演变成后人熟知的珠算口诀。
在唐宋时期还有一部《谢察微算经》。《新唐书·艺文志》载《谢察微算经》3卷,《宋史·艺文志》作谢察微《发蒙算经》3卷,对这部算经的年代现在还难以确定。有些学者认为这是五代时的作品,并据此书残存部分“用字例义”中提到与算盘有关的用语,如中、算盘之“中”、脊、进、退、上、下等,推断五代时已经有了珠算②。但是,这部分内容是否为《谢察微算经》原有的内容尚有疑义,并且现在还没有掌握元代之前已有珠算的任何一条可靠记载,所以对这类问题尚有待进一步的考证与研究。
除上述各项数学成就外,在诸如四舍五入法,小数记法,联立方程组解法,已知三角形三边求面积的公式,棋局总数计算,运筹思想与实践等方面,两宋时期的数学家们也都作出了相当出色的贡献。
第八节 数学教育
两宋时期官府对数学教育事业曾给予了一定的重视,但几起几落,争议不休。北宋初期算学曾与文、武两学并列,设有算学博士,但一直未开办正式的学馆。宋神宗元丰七年(1084)诏令通算学者可于吏部就试,合格者授予地位很低的官职,并令秘书省刊刻算经十书,以备学习之用。宋哲宗元祐元年(1086),曾派人选址,准备建造算书馆,但是由于找不到合适的教员,并且有人反对说,将来“建学之后,养士设科,徒有烦费,实于国事无补”,于是作罢。直到宋徽宗崇宁三年(1104),国子监始立算学,设博士4人和其他职员8人,计划招收260名学生。学习教材是《九章》、《周髀》、《海岛》、《孙子》、《五曹》、《张丘建》、《夏侯阳》等。考试分上、内、外三舍(三级),上舍合格者可授予通仕郎、登仕郎、将仕郎等初级官阶。崇宁五年(1106)初,算学被撤销,而在同年底却又得到恢复。大观三年(1107)还搞了一次封祀历代数学家和天文学家的礼仪活动,如封张衡为西鄂伯,祖冲之为范阳子,刘徽为淄乡男等,并打算绘像从祀,但也由于有人反对而未正式进行。大观四年(1108),又撤销算学,算学生并入太史局。政和三年(1113)复置算学,仍用算学馆旧址,并令地方上仿照执行,其教育制度与元丰、崇宁时相同。宣和二年(1120)再次撤销了算学馆及有关的官职。由上所述可以看出,北宋时算学馆的兴废交替比较频繁,这种情况当然对数学发展是不利的。到了南宋时期,官办数学教育事业就更趋衰微了。但另一方面,官办数学教育毕竟培养了一批通晓数学的人才,并对民间数学传习产生了一定的鼓励和示范作用,这还是应该肯定的。
在数学教材方面,北宋元丰七年(1084)刻印算书时,唐代十部算经中的《缀术》已经失传,因而只刻印了九部,并且据考证,其中《夏侯阳算经》并非原著,而是唐代中期的《韩延算术》,这部书由于卷上第一章引用了夏侯阳的一句话而被误认为《夏侯阳算经》。元丰年间所刻《周髀算经》、《九章算术》、《海岛算经》、《孙子算经》、《五曹算经》、《夏侯阳算经》、《张丘建算经》、《五经算术》和《缉古算经》这九部算经是最早的官刻本数学书籍,可惜在清初就已全部亡佚。南宋绍兴九年(1139)刻书兴学,但未刻印算书。一直到南宋嘉定六年(1213),鲍澣之在福建汀州学校主持翻刻北宋本九部算经时,又补入《数术记遗》1卷。到了清初,南宋所刻算书也仅存《周髀》、《孙子》、《张丘建》、《五曹》、《缉古》、《夏侯阳》和《九章》7种孤本,其中《九章算术》仅存5卷。这些书幸得传留至今。宋刻本十部算书基本上是以李淳风等注释本为基础的,并且其绝大部分内容通过各种途径流传下来,为我们保存了宝贵的数学史料,这就是我们现在可以见到的《算经十书》。
从隋唐到宋元,官府兴办的数学教育事业日趋衰落,而民间数学教育却有所发展。在敦煌千佛洞发现的算书和算表,记载了算筹记数、乘法口诀、四则运算、面积、体积等实用算术方法。这些著作大多是唐末宋初的作品,从中可以反映当时民间数学教育的一些内容,并表明当时所用教材并非都是官府统一刊布的算经。到了宋元时期,民间数学教育更为流行,如李冶曾在河北元氏与获鹿两县交界处的封龙山隐居讲学,并进行数学研究。在元代数学家和天文学家郭守敬少年求学时的河北磁县紫金山,形成了一个以刘秉忠、张守谦、张易等为中心的成就卓著的学派,数学也是这个学派教学与研讨的领域之一。元代数学家朱世杰更是“以数学名家周游湖海二十余年”,“四方之来学者日众”。他的《算学启蒙》是一部很好的数学入门书,其中还包括“天元术”等当时数学的最新成果。特别是南宋之后刻印的数学著作中,出现了歌谣形式的数学问题和算法口诀,更能说明数学的传授已经走出官学的大门,逐渐深入到了民间。此外,还应提到的是杨辉在《乘除通变本末》中给出了一个“习算纲目”,这是学习一般民用和商用数学的一份切合实际的教学大纲,其中提倡循序渐进与熟读精思,注重培养和提高计算能力等。这个“习算纲目”是我国数学教育史上的一篇重要文献。
①《册府元龟》卷869。
②《旧五代史》卷4。
③《新五代史》卷30。
④《宋史》卷481。
①钱宝琮主编:《中国数学史》,科学出版社1964年版,第145页。
①见中华书局影印本《永乐大典》卷16344所收杨辉《详解(九章)算法》。
①《梦溪笔谈》卷18。
②顾观光:《九数存古》卷5。
③《梦溪笔谈》卷18。
①参见李俨:《中算家的纵横图研究》,见李俨《中算史论丛》第一集,科学出版社1955年版。
①《梦溪笔谈》卷18。
①见杨辉《乘除通变本末》中的《乘除通变算宝》。
②李迪、冯立升:《〈谢察微算经〉试探》,见李迪主编《数学史研究文集》第三辑,内蒙古大学出版社1992年版。