《太初历》规定以无中气之月为闰月,并首先记有一个135个月的交食周期,五星运行周期的测定也比过去育显着改进,这些都是优于颛项历的地方。但是,《太初历》取一个朔望月为29日,并按19年7闰法,从而使回归年长度为365日,这两个数值反而比四分历的误差更大。其实,四分历朔策与《太初历》极为接近,邓平之所以舍弃28日而采用29日,其主要原因在于81这个数字至少在形式上可以附会一种神秘的意义,它使古老的周髀法得以实现,因为自古以来,九九的自乘一向被认定是万数之本,它实际被视为包括天文、数学、礼制、量衡等一切数理的渊薮,同时更是盖天说的主要依据。所以,八十一分法虽然在天文学上有失客观,但却换得了历法的神圣性,而更重要的是,它在数字上适合了中国传统天文学的某种要求,这与当时术数盛行的社会风尚是十分融洽的。
这种做法显然没有得到所有人的拥护,司马迁当时也提出了新历,却遭到排斥。他是邓平八十一分法的坚定反对者,因而在他的《史记·历书》
中,对这个颇具术数味道的分法乃至邓平本人竟只字未提。司马迁更相信自己依四分法编制的《历术甲子篇》,把它列在书中详加解释,而他对《太初历》的介绍则使人明显感到,那只是碍于刘彻的淫威不得不敷衍一下而已。
八十一分法虽然在哲学上迎合了汉武帝的心意,但它所造成的大于四分历的误差是无法忽略的,事实上,参加制历的落下闳曾经指出,《太初历》行用久了将会出现一天的误差,800年后定有圣人出来修定它。然而《太初历》并没有能像落下闳期望的使用那样长久,到东汉章帝元和二年(公元85年),它便被编沂、李梵等人重修的《四分历》取代了。
西汉末年,刘歆依照邓平的八十一分法,将《太初历》改造成了《三统历》。他用《易传》中的神秘数字解释《太初历》的基本数据,进一步发展了《太初历》的落后方面。刘歆又把《太初历》
的81章改称为一“统”,共1539年,把三统称为一“元”,共4617年,自历元时刻起,经过三统,朔和冬至又会回到同一干支日的夜半,并以此象征夏商周三代更迭,使《三统历》又蒙上了一层神秘色彩。刘歆对《太初历》述而不作,这使我们能够通过保存在《汉书·律历志》中的《三统历》
窥得《太初历》的面貌,作为最早的一部完整历谱,《太初历》无疑首开了中国古代历法系统完备记录的先河。
祖冲之的《大明历》
南朝的祖冲之(429-500年)是一位具有全面才能的科学家,他在数学方面的杰出成就已经无人不知,事实上这直接影响了他的天文学研究。
汉以后的历法又有了新的改进,汉末刘洪密测二十余年,发现四分术斗分太大,于是造《乾象历),首先摆脱了四分古历的窠臼,他使人们从此知道了月行有迟疾的道理,并且提出了定朔算法和日月食限的概念。三国时杨伟造(景初历》,所算交食更为精密,为后世所取法。东晋虞喜发现岁差以后,南北朝历家都开始注意实测岁差的数值。这些工作无疑是十分出色的,它预示着一部更为优秀的历法的问世已为期不远了,果然在不久之后,祖冲之就完成了他着名的《大明历》。
《大明历》将岁差引入历法计算是一项划时代的成就。前面已经讲过,岁差是由太阳、月亮和其他行星对地球赤道突出部分的引力使地球自转轴产生进动所引起的,它表现为冬至点在黄道上逐年退行。这个差值虽然微小,但积久而显着。汉魏时期的天算家都已观测到了这个现象,然而由于人们惯于墨守成说,不敢变易,即使在岁差被发现之后,编制薪历仍以冬至点固定不变。祖冲之毅然不顾世俗的惊异,放弃旧法。他测出冬至时太阳位于斗15′,定出岁差为45年又11月差1′,使冬至日太阳所在的位置按照这个数值逐年变动。尽管祖冲之采用的岁差数据比实际数值要大些,但他真正在历法编算中考虑了岁差的影响,为逐渐提高历法计算的准确性开辟了道路。
《大明历》的另一项贡献在于闰周的改进,自春秋以来,19年7闰的闰周几乎成为一种定制,北凉赵眩造《元始历》,最先破除旧法,提出600年置221个闰月的新闰周。这个设想虽然被南朝天文学家何承天所摒弃,但祖冲之却把它继承下来并加以改进。《大明历》提出了391年置144个闰月的新数据,这取决于他规定的朔望月和回归年长度,《大明历》取3939为分母,一月的日数为29日,即29.53059日,与真值误差不足一秒。回归年长度为365.2428日,与真值误差52秒,都已相当精密。直到唐代初年中国天算家不再讨论闰周为止,祖冲之的闰周在诸种历法中都可以认为是最好的。
《大明历》比何承天的《元嘉历》以及此前的古历十一家都要精密,他所确定的交点月日数和五星周期都很理想,另外,祖冲之对刘歆所定的岁星超辰法又有修正,他定岁星行天84年超辰一次,与真值也相差无几。这些成就无疑是他频年测候、深有心得的结果。
《大明历》中几乎所有的改革都是大胆的,这使它理所当然地要遭到当时保守势力的诋毁。宋孝武帝刘骏命朝臣博议,宠臣戴法兴藉仗权势,泥古强辩,尽管祖冲之以常人少有的勇气据理力争,但最终还是没有胜利。当然这并不意味着《大明历》
本身是无可指摘的,事实上它的某些缺陷恰恰成了反对者的口实。比如祖冲之把诸如交点月、近点月及五星周期等都纳入他的上元积年所考虑的因素范围,而没有发展刘伟《景初历》和何承天《元嘉历》中的简单方法,以至于把过去已经很复杂的上元积年计算搞得更为复杂。祖冲之对戴法兴提出的太阳运动不均匀性的意见也采取完全否定的态度,尽管我们还不清楚戴法兴的看法是基于他的实际观测;还是为非难《大明历)而强词夺理,但后来的事实却证明,祖冲之在对待这个问题的看法上确实是错了。
由于两种意见始终相持不下,致使《大明历》在祖冲之有生之年一直没能实行。梁朝初年,祖冲之的儿子祖眶对《大明历》适作修正,并再三坚决请求行用,同时《大明历》又经过长期的检验,终于被梁武帝萧衍首肯优于旧历。然而直到梁天监九年(510年)《大明历》正式颁行时,祖冲之竟已去世整整十年了。
隋唐时期的历法成就
早期的各种历法尝试,为隋唐天文学步入鼎盛时期创造了条件。北齐天文学家张子信避居海岛30年,观测证明了太阳周年视运动的不均匀性,从而彻底推翻了关于太阳每日在黄道上的行移度数相等的传统认识。这使人想到,比他稍早了解这一点的戴法兴,他的说法或许并非学五师承。张子信还研究了日、月、五星运动速度变化的规律和计算问题,这些工作后来被刘孝孙、刘焯、张胄玄、僧一行等人继承了下来,使隋唐历法得到了全面的进步。
隋初实行《开皇历》,它是隋文帝宠臣张宾根据何承天的《元嘉历》微加增损而成的,明显落后于当时的天文学水平。刘孝孙、刘焯批驳张宾历法粗疏错讹,不懂岁差和定朔计算,但却遭到诬陷,直至被斥罢官。开皇十四年(549年),大臣杨素等人奏称《开皇历》所算日食不合,并向杨坚推荐张胄玄修制新历,三年之后,张胄玄将新历献给文帝,文帝下诏颁行。张胄玄巧言令色,深得杨坚的宠信。当时,刘焯罢官后闲居家中,以教书着述为业,于隋文帝仁寿四年(604年)写成《历书》十卷,这就是历史上着名的《皇极历》。《皇极历》
由于所用之法与张胄玄新历颇相乖爽,因而遭到张胄玄及太史令袁充的极力排斥,使这部优秀历法终于未能施行。刘焯曾反唇相讥,直言张胄玄新历实为刘孝孙所作,这个内幕的真相当然已不能详知,但是应该承认的是,二人的新历都或多或少地接受了刘孝孙历法中的合理成分。不过,张胄玄新历以冬至点起于虚宿五度,稍后他自己也觉得过于粗疏,于是等到刘焯去世后又重新做了修,并以《大业历》的形式于开皇十七年(597年)颁布,一直使用到隋朝灭亡。
张胄玄初学祖冲之的方法,又受到张子信学说的很大影响。《大业历》考虑到张子信关于行星运动不均匀性的发现,利用等差级数求和的方法编制了一个会合周期中的行星位置表,大大提高丁行譬运行的计算精度。他不牵强附会于数字,而是根据五星运动的真实状况调整制定历法,《大业历》所推算的五星会合周期,其精度冠各历之首。《大业历》还考虑了月球视差对交食的影响,创立了月球在黄道南、北,离黄白交点度数等决定发生交食与否的判别方法,以及讨论日食时食分随太阳位置而变化等改正,这些都构成了《大业历》不同于以前历法的重要特点。
《皇极历》的革新也是多方面的,其中最主要的是为解决日、月、五星的不均匀运动问题而创立了等间距二次内插法公式,用以推算日食所在位置、交食的终始时刻、食分大小等,并首创躔衰盈缩的计算方法,由此得出定朔和定气的改正数,同时首次提出视差对日食的影响以及求改正数,均为后世所师法。
由于各种原因,月亮每月的实际行度是不同的,用月亮的这个实际运动来修正根据月亮的平均运动所算出的朔、望时刻(即平朔、平望),其修正结果就是定朔、定望。早在东汉末年,刘洪在《乾象历》中、计算交食时已经引进了定朔和定望,但安排历日仍然恪守乎朔、平望。南朝年迈的何承天曾想改变这种情况,然而提议一出,反对声四起,他也只好撤回了定朔主张。现在的情况与以前又有不同,由于张子信太阳运动不均匀性的认识和刘焯二次差内插法公式的发明,使定朔、交食和五星运动的计算精度都大大提高。
使用定朔编排历谱会出现一种令古人十分尴尬的情况。由于定朔的长度不同,使历月的安排有可能出现连续三个甚至更多的大月和小月,这显然违反了古人固守的相间安排大小月、最多有两个连大月的习惯。何承天为此放弃了定朔改革,唐初道士傅仁均的《戊寅元历》(619年)开始用定朔排历,但贞观十九年九月起的四个连大月,则使历家们议论纷纷,最后也不得不迎合世俗,重新恢复使用平朔。
犹疑多年的定朔法终于被李淳风固定了下来,唐麟德二年(665年),他以《皇极历》为基础编定《麟德历》,并得以颁行。《麟德历》正式使用定朔编排历谱,不过李淳风在对待连大月过多的问题上聪明地耍了一个花招,从而既保证了定朔法的继续使用,又不致使那些定朔法的反对者感到新术与旧制格格不入。李淳风为避免《麟德历》出现四个大月或三个小月相连的特殊现象,或者把朔日下推一日,使第三个小月变成大月;或者上退一日,使第四个大月变成小月。他把这种方法另立新名叫作“进朔”,不过连他自己恐怕也没有想到,这套迁就的方法竞使用了长达六百年之久,直到元代郭守敬制定《授时历》时才被彻底革除。
刘焯创立的定气法在唐释一行的《大衍历》中得到了发展。一行本名张遂(683~727年),出家之前就已是一位知名的学者。开元九年(721年),由于《麟德历》屡次出现日食预报的失败,唐玄宗于是诏一行撰作新历。为此他花费了六年时间实测编算,待新历革成,他竟与世长辞了。《大衍历》采用平气注历,而用定气计算太阳的视运动,实际因袭了《皇极历)的旧法。一行又在《皇极历》的基础上发明了不等间距二次差内插法计算公式,因为他正确地认识到,太阳运行速度以冬至最快,夏至最慢,这显然纠正了刘焯的错误。他在交食预报中又考虑了视差的影响,并创立了一套计算方法。《大衍历》中这些优良的部分对后来天文学的发展产生了积极的影响。
《大衍历》几乎遭到了与《大业历》同样的指责,有人说它抄自印度的《九执历》,这一点当然很难断定。从时间上看,《九执历》于公元718年已由唐代天文学家瞿昙悉达介绍到了中国,而提出质疑的竟是这位天文家的儿子瞿昙馔,另一位则是编修《大衍历》的参预者陈玄景。在比较了《大衍历》、《麟德历》和《九执历》之后人们确认,《大衍历》是最准确的。然而这一切并不意味着《大衍历》就完美无缺,事实上,一行在掩盖某些缺陷时做得非常巧妙。他曾用这个历法推算开元十二年(724年)七月朔及次年十二月朔应发生日食,但都未能观测到。这可能是由于《大衍历》过分地以它的数据附会《易经》象数而影响了天文数据的精确性,但一行却说那是唐玄宗的德行感动了上天的缘故。
值得注意的是,定气法自刘焯的《皇极历》以后虽然逐渐被用来推算交食,但直至清《时宪历》
为止,中国人却始终没有用它来注历。甚至《时宪历)用以排历的定气,也是完全移用西方天文学的数值,毫无中国的传统,这一点似乎很难理解。
唐代历法的改革更为大胆,《戊寅元历》废除闰周;《麟德历》废除章部纪元的古法;徐昂的《宣明历)求近点月和交点月数值精密,并在日食计算方面创立时差、气差、刻差三项改正法,十分优秀;曹士劳《符天历》虽行于民间,但不用上元积年,已开后代历法之先河。曹氏的改革在后晋马重绩的《调元历》中曾经一度被继承了下来,但没有成功,直到元《授时历》才最终完成。
从沈括新术到郭守敬的《授时历》
宋代历法有儒家与历家之分,频繁改造,但是由于隋唐五代的历法改革已奠定了中国传统古历的基本结构,所以只能凭藉不同的演算方法,使各种数据日臻准确,而没有什么大的作为。当时的历法虽然很少是以实测为根据,但还是有一些优秀的作品。其间以宋行古《崇天历》行用最久,周琮《明天历)论说最为详备,杨忠辅《统天历》暗废积年日法,已含有岁实消长的道理,这些都构成了宋代历法的特点。
在几千年的中自传统历法都不能摆脱阴阳历束缚的年代,宋代沈括的《十二气历》却使人感到耳目一新。这是一部真正的纯阳历,它以节气定月,而不考虑月亮的朔望变化。每年12个月,大月31日,小月30日,相间安排,节气列于月首,中气置于月中。这样每年的日期和节气都固定不变,也省去了为调整太阴年与回归年而不可避免的置闰现象。如果要兼顾朔望月,也只在历书中的适当位置注明“朔”、“望”便足够了。
沈括的新术虽然科学而简便,但在当时却不可能真正实行,对这一点,沈括本人比任何人都清楚。他在《梦溪笔谈》中曾经说道:这个新历的设想在目前只能招来怪怒攻骂,但将来有一天是必定要实行的。沈括所具有的科学家的才智不仅表现在他的作品的缜密严谨,而且表现在他敢于破除传统的创新精神。正像沈括所预言的一样,他的新历主张虽然在清代还遭到阮元的攻击,但是纯阳历的原则经过太平天国的《天历》和辛亥革命后引进的公历果然在中国实行了。