中华农历论坛知识讨论区历法知识 → 送给Q兄两个函数


  共有45145人关注过本帖平板打印

主题:送给Q兄两个函数

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


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
送给Q兄两个函数  发帖心情 Post By:2009/5/9 16:41:00

以下两个函数比“平公式”要精确得多。平均误差在15分钟以内。

用它计算普通的万年历是足够的。你还可以认真分析其中的振动项和长期项就知道为什么19年7闰注定要失败。

以下两个函数是我利用现代的行星运动理论(方案)导出来的,精度大可放心。

//低精度定气朔计算(仍比古代日历精准很多)
function suo_low(W){ //低精度定朔望弦计算,在2000年+-1400年,误差在2小时以内,W是日月黄经差
  var v = 7771.37714500204;
  var t  = ( W + 1.08472 )/v, L;
  t -= ( -0.0000331*t*t
+ 0.10976 *Math.cos( 0.785 + 8328.6914*t)
+ 0.02224 *Math.cos( 0.187 + 7214.0629*t)
- 0.03342 *Math.cos( 4.669 +  628.3076*t ) )/v
+ (32*(t+1.8)*(t+1.8)-20)/86400/36525;
  return t*36525 + 2451545;
}
function qi_low(W){ //最大误差小于30分钟,平均5分,W是太阳黄经,0度计算春分,W为弧度。
  var t,L,v= 628.3319653318;
  t =  ( W - 4.895062166 )/v; //第一次估算,误差2天以内
  t -= ( 53*t*t + 334116*Math.cos( 4.67+628.307585*t) + 2061*Math.cos( 2.678+628.3076*t)*t )/v/10000000; //第二次估算,误差2小时以内

  L = 48950621.66 + 6283319653.318*t + 53*t*t //平黄经
 +334166 * Math.cos( 4.669257+  628.307585*t)  //地球椭圆轨道级数展开
   +3489 * Math.cos( 4.6261  + 1256.61517*t )  //地球椭圆轨道级数展开
 +2060.6 * Math.cos( 2.67823 +  628.307585*t ) * t  //一次泊松项
   - 994 - 834*Math.sin(2.1824-33.75705*t); //光行差与章动修正

   t -= (L/10000000 -W )/628.332 + (32*(t+1.8)*(t+1.8)-20)/86400/36525;
   return t*36525 + 2451545;
}

  以上两个函数返回的是2000年1月1.5日起算的儒略日数(格林尼治平午起算),而且是世界时,不是力学时。儒略日数的计算方法在《天文算法》中有,不要用蔡勒公式之类的方不来计算,这类方法不太通用,也不太好用。

 

   另外,定气朔历法中,“含冬至的月份定为第1月(子月,十一月)”如果你实在不能理解,那你还有待于进一步学习中国历法之后再与大家讨论,不然大家与你讨论的结果几乎等于0。

  如果需要古代历法或现代历法资料,可以找本论坛上与你讨论的那些朋友要一些,与你讨论的那些朋友都是比较专业的。

  精确到秒的气朔计算,在《寿星万年历》中有,不过程序很长很长。

 

  以上那两个函数随然精度低,但外推能力很强,你推算+-10000年后,看看你的19年7闰准不准。

  定气定朔公式给你也,就看你的置闰法要怎么设置了,你把历谱说排出来最有说服力。我编排农历时,用上面两个公式就可以了,可以不用其它公式,也不必再使用其它任何天文数据。

[此贴子已经被作者于2009-5-9 17:58:42编辑过]

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
总数 35 1 2 3 4 下一页

返回版面帖子列表

送给Q兄两个函数








签名