《大衍历》的九服晷影算法及其正切函数表
我国古代历法从东汉《四分历》开始,就有各节气初日晷影长度和太阳去极度的观测记录,漏刻、晷影成为古代历法的重要计算项目。隋朝刘焯发明二次等间距插值法之后,李淳风首先将二次插值法引入到漏刻计算中,由每气初日的漏刻、晷影长度数求该气各日的漏刻、晷影数。但是,各历法中所记载和计算的漏刻和晷影大多是阳城(今河南登封东南告成镇)的数值。一行在编制《大衍历》时,曾进行了大规模的天文测量,通过观测知道,随去极度变化的影长,又因地方而异,但同太阳的天顶距有固定的对应关系。一行在《大衍历》中发明了求任何地方每日影长和去极度的计算方法,叫做“九服晷影”。
古人把阳城作为测影的标准地点,即所谓的地中。若np为阳城的北极高度,s1、s2、s3……为阳城夏至、小暑、大暑等日的太阳上中天位置,则ps1、ps2、ps3……为阳城夏至、小暑、大暑……诸气太阳的去极度,取a1=ps2-ps1、a2=ps3-ps2……,则a1、a2分别为阳城夏至到小暑、小暑到大暑的去极度差数,也是太阳天顶距的差数。且这个差数对任何地点的相应季节都是相等的。
设有某地北极高度为np′,则夏至、小暑、大暑等日的太阳上中天位置为s′1、s′2、s′3……。显然,有
a1=ps′2-ps′1,a2=ps′3-ps′2。
阳城夏至、小暑、大暑太阳天顶距为zs1、zs2、zs3等,故
a1=zs2-zs1,a2=zs3-zs2,
同样,有
a1=zs′2-zs′2,a2=zs′3-zs′2。
历法中已给出阳城各气初日的太阳去极度,则各气的去极度差即为已知,同样各气的太阳天顶距差亦为已知,而这个差数对于任一地点都是相等的。这样一来,对于任一地方,只要知道某一节气(如夏至)的太阳天顶距,其他各气的太阳天顶距都可以通过加减这个差数求出。剩下还要解决以下两个问题:其一,如何求某地夏至(或冬至)的太阳天顶距;其二,已知天顶距如何换算出晷影长。这两个问题都可以通过建立一个影长与太阳天顶距的对应数表来解决。
如果列出一张以天顶距为引数,每隔一度的影长的数值表,则以上两个问题都可以解决:先在所测地测出(冬)夏至晷影长度(在一行领导的大地测量中,在每处都进行了这样的测量),由影长查表得出太阳天顶距,再加减一个如前所述的差数ai即可求出该地各气的天顶距,返回再查表得影长。一行在《大衍历》“步晷漏术”中就建立了这样一个从0度到80度的每度影长与太阳天顶距对应数表,这是世界数学史上最早的一张正切函数表。
在国外,大约920年左右,阿拉伯学者阿尔·巴坦尼(al-battani,约858—929)根据影长与太阳仰角之间的关系,编制了0度—90度每隔一度时12尺竿子的影长表,这实际上是一个12ctga的数表。另一位阿拉伯学者阿尔·威发(abul-waha,940—998)在980年左右编成了正切和余切函数表,每隔15度和10度给出一个值。他还首次引进了正割和余割函数。一行和阿尔·巴坦尼差不多沿着相同的途径编成正切和余切函数表。一行用太阳天顶距,阿尔·巴坦尼用太阳仰角,两者互为余角,所以他们两人的发现是相同的。而一行的正切函数表比阿尔·巴坦尼的余切函数表早近两百年,比阿尔·威发的正切表要早二百五十年。尽管一行的正切函数表只从0度到80度,误差也相应大一些,但它毕竟是世界上最早的正切函数表。