中华农历论坛知识讨论区历法知识 → 历术甲子篇


  共有11839人关注过本帖树形打印

主题:历术甲子篇

帅哥哟,离线,有人找我吗?
xjw01
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
历术甲子篇  发帖心情 Post By:2014/5/2 21:56:00

《史记·历书》推算原理及方法

2014年5月1日,于家里,许剑伟
1、历日周期性:
回归年与朔望月的比值是12+7/19=235/19
史记历书规定回归年为365+1/4,那么朔望月为(365+1/4)*(19/235)=29+499/940
三统历规定朔望月为29+43/81,那么回归年是(29+43/81)*(235/19)=365+385/1539
2、难以消除的误差:
不管是三统历还是史记历术,他们都认一个理,那就是235月等于19年时长。这就会出现严格的19年7闰历谱现象。
因此,只要给出回归年与朔望月中的一个,就可以推导出另一个值。
如果给定值足够精确,那么另一个的精度决定于19年7闰理论的精度。
19年7闰的参数即为235/19,相对误差约为13ppm,那么,对于8万个历日(约220年),将产生1日“朔”或“气”的计算误差。
当然,给定的那个周期值,也有误差不少误差,所以历谱与天象的吻合度还会下降。
史记历书的历元也不准,这也会引起额外误差,不过,这种误差没有“积累性”
3、排历:
史记历书人为规定,阴历与阳历的记时起点是相同的,始于某一天晚上12:000,这一天可能是在公元前104年冬至。
在这一天,日月合朔,在这同一时刻,太阳也到了冬至点。
司马迁等,可能没有找到这么巧合的一天。但历书总得写下去,及B104年冬至还是个不错的选择。
接下来,阴历(朔日)、阳历(节气)分别用上述定义好的周期线性外推。实际上就是朔日等差序列和节气等差序列。
推出这两个等差序列后,按照无中置闰法排历谱即可。
4、关于演算过程
史记历书只给出演算的中间结果,没有给出演算过程。
现在使用计算机演算,建议用等差序列计算即可,直接分数运算,这样会更方便一些。
5、关于译文以及后人的详尽讲解
很多书籍,用古法复算并解释,同时采用了大量古代数学上的“术语”,与现代数学差别较大,粗读,还是象“武功秘籍”
6、本文算法:等差序列

以下内容为程序代码:


<input id=nHao type=hidden
value="焉逢摄提格,太初元年。
端蒙单阏,太初二年。
游兆执徐,太初三年。
强梧大荒落,太初四年。
徒维敦牂,天汉元年。
祝犁协洽,天汉二年。
商横涒滩,天汉三年。
昭阳作鄂,天汉四年。
横艾淹茂,太始元年。
尚章大渊献,太始二年。
焉逢困敦,太始三年。
端蒙赤奋若,太始四年。
游兆摄提格,征和元年。
强梧单阏,征和二年。
徒维执徐,征和三年。
祝犁大芒落,征和四年。
商横敦牂,后元元年。
昭阳汁洽,后元二年。
横艾涒滩,始元元年。
尚章作噩,始元二年。
焉逢淹茂,始元三年。
端蒙大渊献,始元四年。
游兆困敦,始元五年。
强梧赤奋若,始元六年。
徒维摄提格,元凤元年。
祝犁单阏,元凤二年。
商横执徐,元凤三年。
昭阳大荒落,元凤四年。
横艾敦牂,元凤五年。
尚章汁洽,元凤六年。
焉逢涒滩,元平元年。
端蒙作噩,本始元年。
游兆阉茂,本始二年。
强梧大渊献,本始三年。
徒维困敦,本始四年。
祝犁赤奋若,地节元年。
商横摄提格,地节二年。
昭阳单阏,地节三年。
横艾执徐,地节四年。
尚章大荒落,元康元年。
焉逢敦牂,元康二年。
端蒙协洽,元康三年。
游兆涒滩,元康四年。
强梧作噩,神雀元年。
徒维淹茂,神雀二年。
祝犁大渊献,神雀三年。
商横困敦,神雀四年。
昭阳赤奋若,五凤元年。
横艾摄提格,五凤二年。
尚章单阏,五凤三年。
焉逢执徐,五凤四年。
端蒙大荒落,甘露元年。
游兆敦牂,甘露二年。
强梧协洽,甘露三年。
徒维涒滩,甘露四年。
祝犁作噩,黄龙元年。
商横淹茂,初元元年。
昭阳大渊献,初元二年。
横艾困敦,初元三年。
尚章赤奋若,初元四年。
焉逢摄提格,初元五年。
端蒙单阏,永光元年。
游兆执徐,永光二年。
强梧大荒落,永光三年。
徒维敦牂,永光四年。
祝犁协洽,永光五年。
商横涒滩,建昭元年。
昭阳作噩,建昭二年。
横艾阉茂,建昭三年。
尚章大渊献,建昭四年。
焉逢困敦,建昭五年。
端蒙赤奋若,竟宁元年。
游兆摄提格,建始元年。
强梧单阏,建始二年。
徒维执徐,建始三年。
祝犁大荒落,建始四年。">
<script language.javascript>
var nh = nHao.value;
nh = nh.split('\r\n'); //年号
var Q=[], S=[]; //气朔表
var kq = 1461/96;   //气时间间距365.25/24;
var ks = 27759/940; //朔时间间距29+499/940;

function Qda(k){ return Math.floor(k*kq+0.1/96 ); } //计算第k个气
function Sda(k){ return Math.floor(k*ks+0.1/940); } //计算第k个朔

function calc(y){
 var i,j,n;
 //气日计算
 n = y*24; //气起算序数
 for(i=0;i<24;i++) //24节气
   Q[i] = Qda(n+i);
 //朔日计算
 n = Math.floor(Q[0]/ks+0.5); //朔起算序数
 if(Sda(n)>Q[0]) n--;
 for(i=0;i<14;i++) //14朔
   S[i] = Sda(n+i);

 //排历
 var nun,dx,zq,dz,s;
 dz = (((y*24*kq)%1)*24).toFixed(3);
 s = nh[y]
   + y+'年,积'+n+'月。'
   + '冬至'+dz+'时<br>'
   + '月份,月首积日,本月天数,中气<br>';

 for(i=j=0;i<13&&j<24;i++,j+=2){
  if(S[i+1]<=Q[j]) nun = '闰', zq = '-', j-=2; //闰月
  else             nun = '',   zq = Q[j]-S[i]+1;
  dx = S[i+1]-S[i]; //本月天数
  s += ((j/2+10)%12+1)+'月 '+ S[i]+' '+dx+' '+zq+nun+'<br>';
 }
 //输出
 document.write(s);
}

calc(0); //计算第1年
calc(2); //计算第3年


</script>

 


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
浪-淘-沙
  2楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:2068 积分:4263 威望:5 精华:4 注册:2008/11/13 21:03:00
  发帖心情 Post By:2014/5/5 12:55:00

正因为一直坚持235朔望月与19回归年等长,所以古代的历谱运行一段时间就会失天。(即使起始点是精确的,而实际上起始点也确实有误差。)////////////
所以古代的历法版本很多,大多是修正失天现象,以便历谱更密合天象。少数是修正历算理论。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

历术甲子篇








签名