第四节 二次插值法

二次插值法(又称二次内插法)的创立,是隋唐数学的又一项重大成就。插值法是根据两个自变量的已知函数值求这两个自变量之间各自变量对应函数值的近似计算方法。这种方法是很有实用价值的。例如,在天文观测中, 人们不可能每时每刻都进行观测,因此只能得到日月五星某些时刻在天球上的位置。利用这些观测记录推算日月五星在其他时刻的位置,就要用到插值法,这对于天文计算特别是日月交食的推算是十分重要的。实际上在《周髀》和《九章》中就已有了一次插值(或称线性插值)公式。东汉末天文学家刘洪制订《乾象历》,为计算月球在近地点后 n+s 日的共行度数,采用了一次插值公式:

f(n+s)=f(n)+s△,

其中 n 为月球在近地点后运行的整日数,f(n)为对应的月球位置函数, 0<s<1,△=f(n+1)-f(n)。此后,曹魏杨伟、姚秦姜岌、刘宋何承天、南齐祖冲之等各家历法计算月行度数时也都采用了这种算法。随着天文学的发展和观测精度的提高,天文学家不仅发现了月球视运动的不均匀性, 而且也发现了太阳和五星视运动的不均匀性,也就是说,日月五星的视运动并非是时间的一次函数。为了编制更好的历法,特别是为了精确计算合朔和交食时刻,何承天、祖冲之以前所长期采用的一次插值法,误差太大,已经不能满足这种要求,于是中国天算家开始了新的探索。

隋开皇二十年(600),天文学家刘焯在他所编制的《皇极历》中,在推算日月五星视运动度数时,首先创用了等间距二次插值公式:

f (nl + s) = f (nl) +

s2

s (△ 2l

1 + △ 2

) + s (△ l

1 + △ 2 )

− 2l 2 (△1 − △ 2 ),

其中 l 为相等的时间间隔,求太阳视行度数时,l 是一个节气的平均日数,求月行度数时,l 为一日,0<s<l,f(t)是时间 t 的函数,表示日月五星的运行度数。当 l=1 时,上式可化为:

f (n + s) = f (n) + s△ + s(s − l)2 ,

2

其中△=△1,△2=△2 为各时间点上相应的一级差分和二级差分。这个公式实际上就是后来著名的牛顿插值公式的前三项。这种方法比以前所用的一次插值法精密,利用这个公式计算所得到的历法精确度也有所提高。可惜的是刘焯《皇极历》这部较先进的历法当时并未颁行,直到唐代李淳风才将其计算方法引入《麟德历》中。

由于各个节气之间的时间长短实际上并不相等,即历法中的各个节气是不等间距的,日月五星的视运动也不是匀变速运动,因此用刘焯公式计算的结果仍然存在较大的误差。为了解决这一问题,进一步提高历法的精确度, 唐代著名天文学家一行又在此基础上大胆创新,在《大衍历》(727)中创立了不等间距二次插值公式:

f(f + s) = f(t) + s △1 + △ 2 + s( △1 − △2 )

l1 + l2 l1 l 2

s2  △ △ 

−  1 2

l1 + l2  l1 l 2

其中 f(t)为已知值,l1,l2 表示不同的时间间隔。此外,有些学者认为一行还提出了等间距三次差插值法的近似公式①,而有些学者则认为就插值算法本身而言,一行算法与刘焯算法实质完全相同,其分别仅在于以平气或定气为时间间隔的不同②。这些看法究竟是否合适,尚有待于更深入的研究。刘焯和一行的二次插值法影响很大,并且继续有所发展,如晚唐天文学家徐昂编制《宣明历》,在推算太阳和月亮行度时提出了更为简便的插值公式, 在一定程度上简化了一行和刘焯的结果。后来宋元数学家又相继创立三次插值法和高次插值法(招差术),在公式内容与形式上已与牛顿插值公式完全一致,更加圆满地解决了与之相关的数学和天文计算问题。

① 严敦杰:《中国古代数理天文学的特点》,《科技史文集》(第 1 辑),上海科学技术出版社 1978 年版。

② 王荣彬:《中国古代历法中的插值法构建原理》,见曲安京、纪志刚、王荣彬:《中国古代数理天文学探析》,西北大学出版社 1994 年版。