以文本方式查看主题 - 中华农历论坛 (http://bbs.nongli.net/index.asp) -- 历法知识 (http://bbs.nongli.net/list.asp?boardid=2) ---- 关于农历算法的一些讨论 (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=4620) |
-- 作者:历用五百年 -- 发布时间:2006/11/27 17:25:00 -- 关于农历算法的一些讨论 首先,我们要确定一个时刻,作为一天的起点(包括这个时刻)。然后我们以月亮通过朔望交界点的那一天作为每个月的第一天,以太阳通过雨水点的那个月作为正月,依次的,以太阳通过各中气点的那个月作为二月、三月等等。 在本算法中我们使用了三个近似处理: 接下来,我们就逐月推算每月的大小: 每年中各月的月份、是否为闰月 这就是我们的核心算法。通过它,我们可以从任何一个包含中气的月份开始向后推算各月各年的情况。 下面对大小月的排列和闰月的出现作一些定性分析 一年中最少有十二个月,因为YL * 12 (代表十二个中气循环一次的时间)> ML * 12 (代表十二个朔望月的时间) + 1 (第一个月的DM总小于1),最多有十三个月,因为30(第一个月的DY总小于30) + YL * 12 < ML * 14。两个相邻中气的间隔时间大于30,所以一个月不可能有两个中气,那么一年有十二个月的时候,12个中气必然刚好依次各居一个月,这一年就称为平年,一年有十三个月的时候,必然有且仅有一个月没有中气,那个月就时闰月,这一年就称为闰年。平年的时候,根据大小月的排列规则,一年最多有8个大月,最少有6个大月,因为ML * 12 + 1 < 30 * 8 + 29 * (12 - 8),所以不可能有8个大月,最多为7个大月,那么一年就为354或355天。闰年的时候,根据大小月的排列规则,一年最多有9个大月,最少有6个大月,因为ML * 13 + 1 < 30 * 8 + 29 * (13 - 8),所以不可能有8个或更多的大月,最多为7个大月,那么一年就为383或384天。 因为每月的天数不固定,所以闰月的出现规律也不好讨论,连续十二个月的天数也不固定,所以闰年的出现规律也不好讨论。不过可以肯定是,每年的第一个月肯定不是闰月,因为我们是以包含中气雨水的月份作为正月,也就是每年的第一个月的。所以,闰月必定出现在某个有名字的月份后面,出现在哪个后面就叫闰哪月。 |
-- 作者:萧铁 -- 发布时间:2006/11/28 8:10:00 -- > 在本算法中我们使用了三个近似处理: 头两个假设问题应不大, 尤其如果平均值是从足够长的周期导出, 如此应有在该周期内最大误差值的数据, 但文中看不到这方面的分析. |
-- 作者:历用五百年 -- 发布时间:2006/11/30 11:16:00 -- 那么,设置一个长度为12的数组 将12个中气的间隔时间填入其中 |
-- 作者:萧铁 -- 发布时间:2006/12/2 6:20:00 -- 用组数或函数处理都可以, 不过要知道它们的局限性. 我前帖提到"现时夏/冬至是在近/远日点附近", 意思是这并不是永恒不变的. 引起变动的其中一个重要原因是岁差. 而引起岁差的机制应可说现已了解清楚, 但这不等於很容易弄出个模型/程式来, 况且还有其他一些不能用岁差解释的扰动尚不完全明白其机制. 说到这里, 想起古人从观象授时到历法推步, 不断创新细化推步技术固然是一种进步, 今天也许不需要观象授时, 但肯定还要观象对时, 所以说到底, 关键一是无论是组数还是函数, 其中使用的数据怎么来; 二是最好先把如何应对微调的问题想清楚, 预先设计好简易的方法放进算法中去. 我不知你搞这个算法的目的是什么, 或许是学校的功课吧? 其实, 类似算法网上可以搜到, 也有的已作成网站工具, 再重新弄一个正是所谓的re-invent the wheel, 不知比现有的强在那里. 换个角度看, 在现今孔雀绿和苏丹红都成了常用词的时代, 老实说我对这些一无监管二无认证的所谓算法的准确性是十分怀疑的. 如果真想搞些认真/有用的研究, 倒不如想想如何验证这些已发表的算法/工具的正确性, 这个题目不仅更有即时的价值, 且更具挑战性. |
-- 作者:hst0518 -- 发布时间:2006/12/3 13:03:00 -- 如果真想搞些认真/有用的研究, 倒不如想想如何验证这些已发表的算法/工具的正确性, 这个题目不仅更有即时的价值, 且更具挑战性. |
-- 作者:历用五百年 -- 发布时间:2006/12/3 13:21:00 -- 现有的农历算法 现有的农历算法只是把各年的信息放在一个数组里 然后直接调出来显示 而且只有100年的 我需要的是从西汉到清末的信息 包括是否闰年,闰几月,每月多少天 |
-- 作者:萧铁 -- 发布时间:2006/12/5 6:40:00 -- 还是这句话: 怎么验证你指使电脑所产生出来的信息正确无误才是关键, 否则就只能是garbage-in garbage-out. 如果如你说还想囊括从西汉到清末, 那这"正确"两字的含义就更复杂了. 比如说, 如果要能使用此算法结果去查找史书上说的某一天是对应公历何日(或反过来查), 那得根据当时使用的即使是不准确的历法来定年月日, 而不是纯粹根据我们现在的"正确"模型去反推, 或可说是要"正确地"犯[当时所使用那种历法同样的]错误. 月绕地、地绕日这事虽说都属"不以人们的意志为转移"一类, 但化成历法的年月日却是帝皇们一个命令就可从改变的. 汉武帝改行太初历, 那年就有16个月. 应该承认西方在这方面比较进步, 但原则是相同的. 公历在儒略历改格里历时就少了十日. 总之, 这事儿嘛, 比较起所需的背景知识, 编程式是再简单不过了. 如天官书/律历志里那些用文言写成的算法, 就算专攻文史哲的教授也不一定看得懂, 更遑论将之编成程式了. 公元前841年起的历代编年对应公历年份如今已完全确定, 很多书都可以找到. 但要准确到日、时, 有此必要吗? 前辈专家们(有些已是院士级的)花了几十年功夫, 当然拥有必要的知识积累, 但你如果没有机会"站在他们的肩膀上", 恐怕连门儿都未摸到. 而所需要的投入又是否值得? 动手之前不妨先再多想想. |
-- 作者:历用五百年 -- 发布时间:2006/12/7 19:52:00 -- 《史记-历书第四》上明明写着太初元年12个月嘛 怎么乱说有16个月呢,这样子改历当时的老百姓怎么习惯呢? 《汉书-律历志》里并没有提供具体的算法,倒是《史记-历书第四》里以《太初历》为例具体讨论了当时的历法,只可惜对每月的大小没有进一步说明。
******************************* 编辑一下,以免其他朋友误解.
史记里历术甲子篇,已经被后人更改过,并非太史公的原作. 太史公的原作,是没有"太初"字样的. 太史公大约卒于武帝末年. 但实际上,我们看到的史记历术甲子篇,武帝之后的帝王年号都标注上去了.难道太史公是神仙,知道后世的帝王的年号?
太初元年是甲寅年.
而历术甲子篇中的元年是丁丑年.这也说明,太史公记述的并非一部<太初历>. |
-- 作者:历用五百年 -- 发布时间:2006/12/7 19:56:00 -- 至日点和近/远日点本来就不相干,只是位置很近而已 把它们扯在一起会让别人更混淆的 |
-- 作者:历用五百年 -- 发布时间:2006/12/7 20:05:00 -- 我写的算法是: 向后推算,实时修正 即只管以后的情况,让以后来验证正确性 发现了偏差,马上用新的参数填补 而且在保证参数的精确度为万分之一的情况下,每次修改后用五百年应该是可以的 因为历来诸朝的气数都超不过500年 |