中国古代科技成就 | |
![]() | |
内插法和垛积术
自然科学史研究所 梅荣照
我国古代历法中应用的内插法
已知函数f(x)在自变量是x1,x2,……xn时的对应值是f(x1),f(x2),……f(xn),求xi和xi+1之间的函数值的方法,称作内插法。如果xn是按等距离变化的,称自变数等间距内插法;如果xn是按不等距离变化的,称自变数不等间距内插法。例如f(x)=x3,当x=1,2,3,4,5,……时,x3=1,8,27,64,125,……求x=4.26时x3=(4.26)3的值,就可以应用等间距内插公式。等间距内插法的一般公式是:
其中 Δf(x)=f(x2)-f(x1) 叫一级差分, Δ2f(x)=Δf(x2)-Δf(x1) 叫二级差分,…… Δnf(x)=Δn-1f(x2)-Δn-1f(x1) 叫n级差分。从n级差分的定义容易得到,当f(x)是一次函数时,二级差分是0;f(x)是二次函数时,三级差分是0;f(x)是n次函数时,n+1级差分是0。 我国古代历法工作者,为了制定一个好的历法,很早就应用内插法的公式。 朔、望跟制定历法和计算日、月食有密切关系。怎样确定合朔的准确时刻,一直是历法中一个重要的项目。根据一个朔望月的平均日数来确定合 朔时刻,叫做“平朔”。例如《古四分历》、西汉《太初历》和《三统历》就是用平朔来确定合朔时刻的。这种方法所取的分数不是过大,就是过小,年长日久,合朔发生的时刻不是提前就是推后。最初历法工作者以为这种提前和推后是分数部分不精密造成的,他们曾经企图调整分数部分以求得准确的平均朔望月日数来解决这个问题。但是由于月球运动的速度是随时间不同而变化的,因此平朔的方法不可能得到真正的合朔时刻。东汉初年,公元一世纪初,天文学家发现了月球绕地球运行的变速运动。东汉建安十一年(公元206年),刘洪在《乾象历》中首次提出用一次内插的方法来确定合朔的时刻。确定合朔发生的真正时刻叫做“定朔”。要根据月球运行的速度来计算合朔,不仅需要知道每日月球的运行度数,还必须知道小于一日的月球运行度数。刘洪测出月球在一个近点月(月球从近地点出发绕地球运行一周又回到近地点的时间间隔)里每日运行的度数。设日数是n,n日共行的度数是f(n),对n+s(s<1)日月球运行的度数,刘洪应用下列一次内插公式 f(n+s)=f(n)+sΔ 进行计算,其中Δ是一级差分f(n+1)-f(n)。刘洪以后,三国时期的杨伟,南北朝时期的何承天、祖冲之都是用这个公式计算月行度数的。因为月球运动速度一日之内就变化很大,f(n)不是一次函数,Δ2f(x)不等于0,因此上述公式只能得到不很精密的近似值。 随着天文观测技术的发展,天文学家认识到太阳运行速度的变化也影响到合朔时刻,因此提出测量日、月、五星视行度数的更加精密的内插公式。隋文帝开皇二十年(公元600年),天文学家刘焯在《皇极历》中提出一个推算日、月、五星视行度数的等间距二次内插公式:
(0<s<l,Δ1=f(nl+l)-f(nl),Δ2=f(nl+2l)-f(nl+l))。 求太阳的视行度数时,ι是一节气的日数;求月行度数时,ι=1日。刘焯的公式虽比以前精密得多,但是由于节气日数ι实际上不是按等间距变化,日、月、五星也不是作等加速运动(就是说三级差分不等于0),因此仍然存在缺点。这两个问题分别由唐代一行和元代郭守敬等解决了。 唐玄宗开元十五年(公元727年),一行在他的《大衍历》中提出了不等间距的二次内插公式:
当ι1=ι2时,和刘焯的等间距二次内插公式相同。 元世祖至元十八年(公元1281年),郭守敬等的《授时历》在计算日、月、五星视行度数中考虑了日、月、五星运行的不等速运动情况,认为距离是时间的三次函数。不过《授时历》没有求出三次内插公式,而是用差分表来解决这个问题的。例如计算太阳每日的运行度数:《授时历》把冬至到春分(共88.91 日)这一象限分成六段,测出每段太阳的实际运行度数,就可以算出以段为等间距的差分表。从表中知道,三级差分都相等而四级差分等于0,因此考虑 f(t)=d+at+bt2+ct3。 实际上,f(0)=0(第0段的运行度数是0),可见d=0。所以 f(t)=at+bt2+ct3。 这样就可以变三次函数为二次函数
应用二次内插公式便可以算出F(t)的具体表达式,从而得到 f(t)=tF(t)=513.32t-2.46t2-0.0031t3。 令t=0,1,2,3,按差分的定义便可以求出f(0),Δ1,Δ2,Δ3(Δ4=0),继续按差分定义,用加减法就可以得出以日为等间距的差分表②。 从公元三世纪到公元十三世纪一千多年中,内插法在天文学家和数学家中得到广泛的应用,除上面提到的以外,如唐代傅仁均的《戊寅历》(公元619年)、李淳风的《麟德历》(公元664年)、徐昂的《宣明历》(公元822年)、宋代秦九韶《数书九章》(公元1247年)的“缀术推星”、元代朱世杰《四元玉鉴》(公元1303年)的“如象招数”等等。特别需要提出的是朱世杰的工作。 朱世杰“如象招数”①的问题是已知一级差分 Δf(x)=(2+x)3(x=1,2……15), 求f(n)(n=15),他得到的公式是:
这里Δ、Δ2、Δ3、Δ4分别代表各级差分的第一个差分。朱世杰知道,公式的系数恰恰就是“古法七乘方图”(见后面第133页)从左边开始的斜线的数字的和,因此他把这一公式推广到一般情况是毫无问趣的。注意到f(0)=0,就可以看出朱世杰的公式和我们一开头介绍的等间距内插法的一般公式基本上是一样的,比欧洲最早得到这个公式的格雷果里(公元1670年)早三百六十七年。 恩格斯在论述“科学的发生和发展一开始就是由生产决定的”②的时候,首先提到天文学的需要而展开的数学。从上所述可以看出,我国的内插法是从天文学的需要中发展起来的,是在修改历法中逐渐完善的,它的应用比欧洲早一千年。
垛积术——高阶等差级数问题
所谓垛积术,就是高阶等差级数求和问题。这个问题和内插法一样,在我国古代是自成系统的。 公元前一世纪《九垛积。章算术》“均输章”曾经提出等差积数的问题,公元五世纪《张丘建算经》给出等差级数求和的公式:
高阶等差级数的研究开始于北宋沈括,元代朱世杰把它推到十分完备的境界。 沈括在《梦溪笔谈》卷十八“隙积术”中提到,上底宽是a个物体、长是b个物体、下底宽是c个物体、长是d个物体、高是n层的垛积(物体个数)s,比上底宽是a、长是b、下底宽是c、长是d,高是n的长方棱台
沈括怎样得到这个公式,没有说明,大概是先用具体数字进行试验,然后用归纳的方法得到的。 南宋理宗景定二年(公元1261年),杨辉在《详解九章算法》中继续对这个问题进行研究,他得到三个高阶等差级数公式:
(1)式是四隅垛,(2)式是方垛,(3)式是三角垛。他把这三式分别和《九章算术》的方锥、方亭、鳖臑相比类,可能是仿照《九章算术》的棋验法推得的。 元成宗大德七年(公元1303年),朱世杰在《四元玉鉴》中,利用了当时丰富的数学知识,对这个问题作了系统而详细的研究,并得到普遍的解法。
两个新级数的一般项的两种情形。在第一种情形中,
他连续以新级数的和作为一般项,就得到这一类高阶等差级数的一般公式:
在第二种情形中,从沈括或杨辉的公式知道,
朱世杰继续以新级数的和作为一般项,
般形式的求和公式:
在第一组公式中,从朱世杰所用的“落一形垛”、“更落一形垛”的名称可以知道,他已经认识到:前式的r项的和是后式的第r项,就是前式中到第r层为止的垛积降落一层是后式垛积的第r层。另外,从朱世杰在《四元玉鉴》中所用图”(如右图)出,第一组的级数恰好是从左边开始的第p+1条斜线的数字的延伸,第p条斜线上最初n个数字的和恰好 等于第p+1条斜线上的第n个数。因此我们认为,朱世杰的第一组级数很可能就是直接从这个图得到的。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 51 1 6 15 20 15 61 他虽然只算到p=6的情形,但是很明显,p是任何正整数的时候都成立。 至于第二组级数怎样得出,朱世杰同样没有说明,很可能是通过推广的“古法七乘方图”求得的。 朱世杰在高阶等差级数方面的工作,不论在计算技术方面,还是在理论概括方面,水平都是很高的。
② 古代开平方法和开立方法,用几何图形来证明。初商a的乘方(a2,a3)表示成一个大的正方形或立方体,称为“积”或“方”;次商b的乘方(b2,b3)表示成一个小正方形或小立方体,占据图形中的一个小角落,所以称为隅,初商和次商的乘积分别是长方形(ab)或长方体(a2b,ab2),占据图形的侧边,所以称为廉(廉是侧边的意思)。开平方有二廉,就是贾宪三角中第三行的“二”,开立方有三方廉,三长廉,就是贾宪三角中的第四行的“三、三”。 ① 关于《授时历》中怎样求差分,以及这里f(t)的具体表达式中各项系数是怎样算出来的,这里都从略,可以参看钱宝琮主编:《中国数学史》,科学出版社1964年版,第191—197页。 ② 关于“如象招数”的问题,可以参看钱宝琮著:《中国数学史话》,中国青年出版社1957年版,第136—137页。 |
![]() |