以文本方式查看主题 - 中华农历论坛 (http://bbs.nongli.net/index.asp) -- 历法知识 (http://bbs.nongli.net/list.asp?boardid=2) ---- 送给Q兄两个函数 (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=18943) |
-- 作者:xjw01 -- 发布时间:2009/5/9 16:41:00 -- 送给Q兄两个函数 以下两个函数比“平公式”要精确得多。平均误差在15分钟以内。 用它计算普通的万年历是足够的。你还可以认真分析其中的振动项和长期项就知道为什么19年7闰注定要失败。 以下两个函数是我利用现代的行星运动理论(方案)导出来的,精度大可放心。 //低精度定气朔计算(仍比古代日历精准很多) L = 48950621.66 + 6283319653.318*t + 53*t*t //平黄经 t -= (L/10000000 -W )/628.332 + (32*(t+1.8)*(t+1.8)-20)/86400/36525; 以上两个函数返回的是2000年1月1.5日起算的儒略日数(格林尼治平午起算),而且是世界时,不是力学时。儒略日数的计算方法在《天文算法》中有,不要用蔡勒公式之类的方不来计算,这类方法不太通用,也不太好用。
另外,定气朔历法中,“含冬至的月份定为第1月(子月,十一月)”如果你实在不能理解,那你还有待于进一步学习中国历法之后再与大家讨论,不然大家与你讨论的结果几乎等于0。 如果需要古代历法或现代历法资料,可以找本论坛上与你讨论的那些朋友要一些,与你讨论的那些朋友都是比较专业的。 精确到秒的气朔计算,在《寿星万年历》中有,不过程序很长很长。
以上那两个函数随然精度低,但外推能力很强,你推算+-10000年后,看看你的19年7闰准不准。 定气定朔公式给你也,就看你的置闰法要怎么设置了,你把历谱说排出来最有说服力。我编排农历时,用上面两个公式就可以了,可以不用其它公式,也不必再使用其它任何天文数据。 [此贴子已经被作者于2009-5-9 17:58:42编辑过]
|
-- 作者:xjw01 -- 发布时间:2009/5/10 7:40:00 -- Q兄的那几个公式我看过了,确实不错。只是它确实只适用于古代的“平”气朔。你那个置闰公式所需的起点参数以及回归年长度、平朔望长度,在《寿星万年历》2.0版及以后各版本都有都有提供。请参考下表,它是利用现代方法反向归算得到的,计算时请保留所有的有效数字。你用29.5306计算是不行的,它跟本无法保证每个朔日正确,一般要保留6至8个有效数字才能在几百年内与古代历谱相符。当然如果只是闰月,有效数字不必很高。
上述平气、平朔的计算公式表达为:D = k*n + b , 式中n=0,1,2,3,...,N-1;下面给出各朝代颁发历法的k与b的参数,每行第1个参数为b,第2参数为k,结果D表达为儒略日数;h表示k不变b允许的误差,如果b不变则k许可误差为h/N;N是历法颁行期间朔或气的总个数。 //“朔”直线拟合参数 1457698.231017,29.53067166, // -721-12-17 h=0.00032 古历·春秋 1546082.512234,29.53085106, // -479-12-11 h=0.00053 古历·战国 1640640.735300,29.53060000, // -221-10-31 h=0.01010 古历·秦汉 1642472.151543,29.53085439, // -216-11-04 h=0.00040 古历·秦汉 1683430.509300,29.53086148, // -104-12-25 h=0.00313 汉书·律历志(太初历)平气平朔 1752148.041079,29.53085097, // 85-02-13 h=0.00049 后汉书·律历志(四分历) 1807665.420323,29.53059851, // 237-02-12 h=0.00033 晋书·律历志(景初历) 1883618.114100,29.53060000, // 445-01-24 h=0.00030 宋书·律历志(何承天元嘉历) 1907360.704700,29.53060000, // 510-01-26 h=0.00030 宋书·律历志(祖冲之大明历) 1936596.224900,29.53060000, // 590-02-10 h=0.01010 随书·律历志(开皇历) 1939135.675300,29.53060000, // 597-01-24 h=0.00890 随书·律历志(大业历) 1947168.00// 619-01-21 //“气”直线拟合参数 1640650.479938,15.21842500, // -221-11-09 h=0.01709 古历·秦汉 1642476.703182,15.21874996, // -216-11-09 h=0.01557 古历·秦汉 1683430.515601,15.218750011,// -104-12-25 h=0.01560 汉书·律历志(太初历) 回归年y=365.25000 1752157.640664,15.218749978,// 85-02-23 h=0.01559 后汉书·律历志(四分历) y=365.25000 1807675.003759,15.218620279,// 237-02-22 h=0.00010 晋书·律历志(景初历) y=365.24689 1883627.765182,15.218612292,// 445-02-03 h=0.00026 宋书·律历志(何承天元嘉历) y=365.24670 1907369.128100,15.218449176,// 510-02-03 h=0.00027 宋书·律历志(祖冲之大明历) y=365.24278 1936603.140413,15.218425000,// 590-02-17 h=0.00149 随书·律历志(开皇历) y=365.24220 1939145.524180,15.218466998,// 597-02-03 h=0.00121 随书·律历志(大业历) y=365.24321 1947180.798300,15.218524844,// 619-02-03 h=0.00052 新唐书·历志(戊寅元历) y=365.24460 1964362.041824,15.218533526,// 666-02-17 h=0.00059 新唐书·历志(麟德历) y=365.24480 1987372.340971,15.218513908,// 729-02-16 h=0.00096 新唐书·历志(大衍历,至德历)y=365.24433 1999653.819126,15.218530782,// 762-10-03 h=0.00093 新唐书·历志(五纪历) y=365.24474 2007445.469786,15.218535181,// 784-02-01 h=0.00059 新唐书·历志(正元历,观象历)y=365.24484 2021324.917146,15.218526248,// 822-02-01 h=0.00022 新唐书·历志(宣明历) y=365.24463 2047257.232342,15.218519654,// 893-01-31 h=0.00015 新唐书·历志(崇玄历) y=365.24447 2070282.898213,15.218425000,// 956-02-16 h=0.00149 旧五代·历志(钦天历) y=365.24220 2073204.872850,15.218515221,// 964-02-16 h=0.00166 宋史·律历志(应天历) y=365.24437 2080144.500926,15.218530782,// 983-02-16 h=0.00093 宋史·律历志(乾元历) y=365.24474 2086703.688963,15.218523776,// 1001-01-31 h=0.00067 宋史·律历志(仪天历,崇天历) y=365.24457 2110033.182763,15.218425000,// 1064-12-15 h=0.00669 宋史·律历志(明天历) y=365.24220 2111190.300888,15.218425000,// 1068-02-15 h=0.00149 宋史·律历志(崇天历) y=365.24220 2113731.271005,15.218515671,// 1075-01-30 h=0.00038 李锐补修(奉元历) y=365.24438 2120670.840263,15.218425000,// 1094-01-30 h=0.00149 宋史·律历志 y=365.24220 2123973.309063,15.218425000,// 1103-02-14 h=0.00669 李锐补修(占天历) y=365.24220 2125068.997336,15.218477932,// 1106-02-14 h=0.00056 宋史·律历志(纪元历) y=365.24347 2136026.312633,15.218472436,// 1136-02-14 h=0.00088 宋史·律历志(统元历,乾道历,淳熙历)365.24334 2156099.495538,15.218425000,// 1191-01-29 h=0.00149 宋史·律历志(会元历) y=365.24220 2159021.324663,15.218425000,// 1199-01-29 h=0.00149 宋史·律历志(统天历) y=365.24220 2162308.575254,15.218461742,// 1208-01-30 h=0.00146 宋史·律历志(开禧历) y=365.24308 2178485.706538,15.218425000,// 1252-05-15 h=0.04606 淳祐历 y=365.24220 2178759.662849,15.218445786,// 1253-02-13 h=0.00231 会天历 y=365.24270 2185334.020800,15.218425000,// 1271-02-13 h=0.00520 宋史·律历志(成天历) y=365.24220 2187525.481425,15.218425000,// 1277-02-12 h=0.00520 本天历 y=365.24220 2188621.191481,15.218437484,// 1280-02-13 h=0.00013 元史·历志(郭守敬授时历) y=365.24250 2321919.49// 1645-02-04 值得注意的是:儒略日数的小数部分为0.5才对应晚上0点;新唐书·历志(戊寅元历)公元619年开始使用平气定朔,之前使用平气平朔,1645年及以后使用定气定朔。 举例说明:求公元88年2月15(儒略日数为1753245)附近的朔日的具体公历日期。 88年的颁行历为后汉书·律历志的四分历,它的平朔参数 b = 1752148.041079,k = 29.53085097。先把朔日D估计为88年2月15日。又因 D = k*n+b,所以 n = (D-b)/k = 37.15,四舍五入取整得 n = 37。易得准确日期为 D = k*n+b = 1753240.68,转为公历得公元88年2月11号4时,朔日在11日。
|
-- 作者:xjw01 -- 发布时间:2009/5/10 8:22:00 -- 现代农历关心的是农历天文年首(即农历的天文年第1个月)与冬至(太阳年)同步计数,而计数的时候一般都用整数来计数,也就是ymy111、浪淘沙等人说的阴阳合拍。现代农历根本就不关心闰月的位置,即闰月该在哪里就在哪里,闰月所在位置合不合里——现代农历并不关心,一部历法要谦顾多方面是不太可能的。实际上,农历年与太阳年同步之后,闰月所在位置一点也不重要,而你天天把19年7闰搬出来,难怪大家有意见。
你自已想想,中央台的北京时间比喻为太阳历,它每年播报一个冬至,我们的手表比喻为农历,每年听到中央台的报时,我们就马上与中央台校对时间一下就可以了,也不必校对得非常准确,校对个大概就可以了,反正每年都要校对,你还怕它跑不准?现在农历实际上就是利用天象自动同步阴阳(自动对时)。
“取整”后相当于一个量化的“数字量”,而“不取整”的小数,相当于一个“模拟量”。我们的电脑时间,跑的是“数字量”,计算机程序,也是“数字化”的。任何“数字量”总会有截断误差,但误差不会超过它的最小位(如个位数上的1)。月计数用的是整数,这是我们所说的“数字量”,以整数月为单位来度量年长度,误差不会超过1个月。每年都与太阳年对时一次,这样每年的误差都不会相差1个月,这样农历的天文年首,永远与冬至相差不会超过1个月,也就是说它会一直很精确的进行农历月计数。相反,“平法”没有天象的强制同步功能,那么将远期的误差将会很大,仅仅地球自转变慢一项,就会让你“平法”受不了,3万年后,自球变慢积累的误差可能积累到0.5个月(最小估计),也可能是2个月,你的平法置闰又怎么可能成立。离开天文知识来谈论农历原理,那是不可思义的。 |
-- 作者:xjw01 -- 发布时间:2009/5/10 8:34:00 -- 在V4.x版之后,作了一点改动
1683430.515601,15.218750011, // -104-12-25 h=0.01560 汉书·律历志(太初历)平气平朔 回归年=365.25000
1280年,郭守敬的授时历中,回归年已经采用365.2425,比西方的格里历要早了300年。《授时历》使用的是“平法”,这意味着,如果《授时历》的纪日以太阳历(即节气)为主,月历为辅,也会出现400年97闰现象,而且是均匀分布的,比现在的格里历要好得多。 之后的《时宪历》比《授时历》有了大幅度的进步,延用了360年,至今也没人改它(改的只是天文算法),因为它确实比较完善。 |
-- 作者:xjw01 -- 发布时间:2009/5/10 10:56:00 -- 我已说过,现在农历中“闰”的次序已不再重要,你要死死抱着“闰”我也没办法。 目前是“年年校对”,历算过程必须年年严格校对同步,不然就容易出错。
Q说到:“目前不是每年都要校对,而是19年校对7次。具体是:3+3+3+2+3+3+2=19,顺序可以任意截取。” 这就是Q你的创新了,你要19年同步校对一次也可以啊,那已经是一步新的历法了,你不能不承认。接下来你只要规定在什么时候校对就可以了,如2000年、2019年、2038年……。还有一点,同步校时的规则也可以按以前讨论过的“历理法”校时同步,这样你所希望看到的19年7闰在最近几百年内基本上都实现了。不过你别忘了考虑一下这种历法可能产生的坏处。 |
-- 作者:xjw01 -- 发布时间:2009/5/10 11:26:00 -- “ 19年的闰周也比西方早啊,可惜都是被我们自己弃而不用。汤若望等人把平气改为定气也许可以说是功过各半。定气从天文角度来说是完全正确的,而从历法角度来说应该是错的。因为严格说来它是空间(位置)概念,不是时间概念,KSL不应该影响农历的置闰,所以从客观上来说农历闰哪一个月的机率应该是均等的。”
这种说法基本正确了,现代人看来,“历”给人用的,应“从简”,不见得需要一味的追求天文学上的“先进性”或天象的严格对应关系。但这并不能说“1984年闰错了”,现代农历有他的置闰规则,你有你的置闰规则,他有他的合理性,你有你的合理性,我没有说你的闰法错得很严重,但你不能理解现代农历的闰法,反而说人农“错闰”,大家肯定要反对你的。
顺便说一下,在定气法中,最近几百年内“闰哪月”的机率是不均等的。空间位置等分与时间等分确定“气”只能说各有好处。历法核心问题之一就是要协调“日期”与“日月地空间位置”二者的关系, [此贴子已经被作者于2009-5-10 12:26:24编辑过]
|
-- 作者:xjw01 -- 发布时间:2009/5/10 11:36:00 -- 以下是引用q5968661在2009-5-10 11:12:00的发言:
对了,还要请教许老师一个问题,以您的天文计算,农历19年这个周期什么时候才会发生改变、改变后是变长还是变短?
请许老师帮忙计算一下,谢谢! 19年7闰的,这个19年作为置闰周期,在最近几十万年内肯定是没有问题的。 问题是19年是个约数,小数点以下第8位的误差都会被积累放大,最后放大到不可接受的地步。 比如,公历400年97闰,误差才0.0003天,但是经过3000年的积累就已经达到1天,经过3万年和积累(远期一般是非线性积累的),可能达到1个月。
你看看古代历法,用不了多久就得换参数,原因就是误差积累到最后让人不可接受。你用29.5306也会出现此问题,历史上也曾用过与29.5306非常接近的数值。 |
-- 作者:xjw01 -- 发布时间:2009/5/10 11:51:00 -- 定气函数中有这个表达式 (32*(t+1.8)*(t+1.8)-20)/86400/36525; 字朔函数中也可以加入这个表达式
这个表达式是反应地球地转速度变慢造成的时间误差。表达式中的t是2000年起算的世纪数,结果的单位是“世纪” 假如这个表达式可以外推300世纪,那么地球自转变慢积累的误差达到33天 |
-- 作者:xjw01 -- 发布时间:2009/5/10 11:55:00 -- 月亮“平”运动的非线性项:-0.0000331*t*t,这个积累起了也是不得了的。 其实,月运动远期的不规律项还有很多,也比-0.0000331*t*t大得多,只是没有全部列出来
总的说来,利用现代数据设计“平法”,在几千年内问题不大,几万年问题多多。
我还是主张现在的定气定朔法,如果要用“平法”,现在公历就是一个典型,也挺好的。而阴阳合历使用平法,还是有点复杂,相对于定法不见得就好。 |
-- 作者:xjw01 -- 发布时间:2009/5/10 14:10:00 -- 以下是引用q5968661在2009-5-10 13:12:00的发言:
“19年7闰的,这个19年作为置闰周期,在最近几十万年内肯定是没有问题的。 问题是19年是个约数,小数点以下第8位的误差都会被积累放大,最后放大到不可接受的地步。 比如,公历400年97闰,误差才0.0003天,但是经过3000年的积累就已经达到1天,经过3万年和积累(远期一般是非线性积累的),可能达到1个月。”
几十万年内?我没有看错吧?那还有什么好说的呢?几十万年后的事,几十万年后再说吧。误差会被积累放大没错,但等它每次达到最小单位“1”时,我们再把它减去(或加上)。如公历到3200年时,就可以减去1闰。农历也一样可以这样做啊。
你大概就是说,等误差积累到一定程序度再增减,本来就可以这样做。公历的1582年就曾被减过10天。这类作法就是大家一直在说的“人定年月日长度的历法”,我简称“人历”。比如以某一时期(如10年)的平均回归年长度为年长来定制历法。每年的回归年长度一直在变化,所以这种历法最多只能存活几千年,之后就得考虑改参数了。 还有,使用了“平法”所得的日历与天象不会严格对应,所以在“平法中”,“天象与日历是否严格同步”已不在重要,除非过度失步才考虑改参数。
|