中华农历论坛知识讨论区历法知识 → 日月计算器(包含'公农回'三合一万年历)


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

主题:日月计算器(包含'公农回'三合一万年历)

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


加好友 发短信
等级:业余侠客 帖子:315 积分:717 威望:0 精华:0 注册:2008/9/25 22:36:00
  发帖心情 Post By:2008/10/11 21:49:00

用户已被锁定

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


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2008/10/11 22:43:00

如果想得到精确结果,你的设想不大可能实现。


1、精确的节气计算是比较复杂的。节气与太阳运动密切相关,所以必须运用适当的天文算法计算太阳位置;天文数字须使用电脑计算,否则是在浪费生命。所以需具备一定的天文学的专业知识及程序设计方面的知识。二者缺一不可。

2、相邻两节气的时长是变化的,有短周期的变化项,也有长周期的变化项,详见以下程序中太阳黄经随时间变化的表达式(对黄经求导后,你将发现问题)。这种变化不是几秒钟,可能是几分钟或几十分钟,如果考查长期变化,变化量会更大。

3、“由一个已知节气日期求另一节气的日期”不易实现,或者说实现起来非常麻烦。

4、我们可以找到比较简单的节气算法,甚至可以表达为一个相对简单的公式,但精度秒差一些。比如以下javascript程序可用于求指定太阳黄经所对应的时间,进而求出节气,它是由三个算式顺序计算得到的(迭代计算)

function Sun_aLon_t(W){ //已知黄经求时间,最大可能误差120秒,平均15秒,适用时间范围:0年——4000年
  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小时以内

  var t2=t*t,t3=t2*t,t4=t3*t;
  L = 48950621.66 + 6283319653.318*t + 52.9674*t2 + 0.00432*t3 - 0.001124*t4 //平黄经
 +334166 * Math.cos( 4.669257+  628.307585*t)  //地球椭圆级数展开
   +3489 * Math.cos( 4.6261  + 1256.61517*t )  //地球椭圆级数展开
   + 350 * Math.cos( 2.744   +  575.3385*t)    //木星摄动
   + 342 * Math.cos( 2.829   +    0.3523*t)    //长期摄动(火星木星)
   + 314 * Math.cos( 3.628   + 7771.3771*t)    //月球求对地球的摄动
   + 268 * Math.cos( 4.418   +  786.0419*t)
   + 234 * Math.cos( 6.135   +  393.021*t )
   + 132 * Math.cos( 0.742   + 1150.677*t )
   + 127 * Math.cos( 2.037   +   52.9691*t)
   + 120 * Math.cos( 1.11    +  157.7344*t)
   +  99 * Math.cos( 5.23    +  588.493*t )
   +  90 * Math.cos( 2.05    +    2.63*t  )
   +  86 * Math.cos( 3.51    +   39.815*t )
   +  78 * Math.cos( 1.18    +  522.369*t )
   +  75 * Math.cos( 2.53    +  550.755*t )
   +  51 * Math.cos( 4.58    + 1884.923*t )
   +  49 * Math.cos( 4.21    +   77.552*t )
   +  36 * Math.cos( 2.92    +    0.07*t  )
   +  32 * Math.cos( 5.85    + 1179.063*t )
   +  28 * Math.cos( 1.9     +   79.63*t  )
   +  27 * Math.cos( 0.31    + 1097.71*t  )
 +2060.6 * Math.cos( 2.67823 +  628.307585*t ) * t  //一次泊松项
   +43.0 * Math.cos( 2.635   + 1256.6152*t   ) * t  //一次泊松项
   +8.72 * Math.cos( 1.072   +  628.3076*t   ) * t2 //二次柏松项
   - 994 - 834*Math.sin(2.1824-33.75705*t) - 64*Math.sin(3.5069+1256.66393*t); //光行差与章动修正

  return t - (L/10000000 -W )/(628.332 +21 *Math.sin(1.527+628.307585*t));
}
这段程序是当时为“老李飞刀”推导的,帮助他计算节气用的。如果你对精度要求不高,也可直接使用该程序。注意:返回的是2000年1月1.5日(力学时)起算的时间,单位是儒略世纪。1儒略世纪=36525天=36525*86400原子秒。如果对精度要求很高,请参考“寿星万年历”源代码。
节气一般用北京时间表示(东8区UTC时间),以上程序返回的结果是力学时,不是UTC时间。

 

 


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


加好友 发短信
等级:业余侠客 帖子:315 积分:717 威望:0 精华:0 注册:2008/9/25 22:36:00
  发帖心情 Post By:2008/10/12 15:31:00

用户已被锁定

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


加好友 发短信
等级:论坛游侠 帖子:190 积分:1585 威望:0 精华:1 注册:2008/7/6 15:34:00
  发帖心情 Post By:2008/10/15 11:17:00

请教许老师如何计算月亮的升交点公式--藏历中的罗睺


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


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2008/10/15 22:11:00

您的“升交点”是做何应用的,您说的“藏历”我不太清楚。

“升交点”的计算并不复杂,问题是:您所述的“升交点”是几何意义上的,还是“视觉”上的?如果是“视觉”上的,会涉及光行差。

您欲求月亮经过“升交点”发生的时刻,还时此刻对应的坐标?

如果您欲求的是“平升交点”,求解很容易。

我们可以定义“升交点”是月亮视黄纬为0对应的时刻,那么不妨使用“寿星万年历”中的月亮星历函数并结合迭代算法求得时间。事实上,在“寿星万年历”中已经直接给出任意时刻的月亮黄纬及视黄纬,现在要做的工作就是使用迭代算法反算。当然,如果你对迭代算法不太清楚,也可以使用高一数学课本中的“二分法”求解,不过速度慢了10倍以上。

   你先用“寿星万年历”查找月亮视黄纬为零对应的时间(人工查找),看看该时间是不是您所需要的,如果是,我就根据这个思路写个“升交点”给你。


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


加好友 发短信
等级:论坛游侠 帖子:190 积分:1585 威望:0 精华:1 注册:2008/7/6 15:34:00
  发帖心情 Post By:2008/10/16 9:14:00


升交点和远地点分别是中国历法中的罗睺和计都,是吧他们当作两个星来看的
应该是连续的
如果定义“升交点”是月亮视黄纬为0对应的时刻,她就不连续了
我想找的是求任意时刻 升交点,远地点的黄经公式
刚在网上找到两个近似公式,老师能否提供两个高精度的公式??
据现代月球运动理论,白道与黄道的升交点黄经(Ω)和月球轨道远地点黄经(ω)
在精度要求不高( < ±1°)的情况下,可分别由下面两式求出:
(1)  Ω = 259°1183275 $ 0°10529539222d       ( $这个是什么符号?)
(2)  ω = 154°13295556 + 0°11114040803d[ 21 ]
式(1)和(2) ①中的d是指距离历元(1900年1月1日12时,儒略日序为241502010)的天
数,求得的是白道升交点和月球轨道远地点的地心平黄经。由两式可计算得:白道升交点
每月退行1159度,故一年退行19°左右,在某年从正月到年终能够运行在翼、张二宿中;
月球轨道远地点每月运行3134度,故一年运行40°左右,


月亮升交点黄经的计算公式为:
Ω = 125°02′40. 40″- 1934°08′10. 266″T + 7″. 476 T*T
式中T 为从J2000. 0 起算的儒略世纪数


预报日、月食的方法,:先由积月除以罗睺的周期,商余化成日数,然后若推算日食加30日,推算月食加15日,再乘以罗睺每日运行的度数得到罗睺头数值(在此数值上以半周相加,则得到罗睺尾的数值);接着求出太阳、月亮的黄经,以太阳、凡亮的黄经与罗睺头、尾数值中最为接近者相减;最后以所得差数来判断有无日、月食


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


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2008/10/16 11:28:00

说了半天,原来你要的是轨道升交点(即黄道与白道的交点),而不是月亮经过升、降交点的时刻。

准确计算轨道升降交点,需要轨道的密切椭圆要素。不过我们常用的“平”轨道,即无短期摄动的轨道要素。

每年的月亮轨道要素在《中国天文年历》中有。

《中国天文年历》是好像是使用ELP-82及VSOP87得到轨道要素的。

如果仅仅是需要升交点的平黄经,可在IAU2000的岁差章动中找到高精度的表达式。详见已被“春光”置顶的帖子。

 

/***********************
 l = 月亮平近点角
 l1= 太阳平近点角
 F = L-Om
 D = 日月平角距
 Om= 月亮升交点平黄经
 如果:
    千年的运算精度(不是理论本身的精度)要求小于10毫角秒,
    或者百年以内的运算精度要求小于1毫角秒:
    以上5个角度量取值到t的一次方即可。
***********************/

l = 485868.249036 + 1717915923.2178*t + 31.8792*t2 + 0.051635*t3 - 0.00024470*t4;
l1=1287104.79305  +  129596581.0481*t -  0.5532*t2 - 0.000136*t3 - 0.00001149*t4;
F = 335779.526232 + 1739527262.8478*t - 12.7512*t2 - 0.001037*t3 + 0.00000417*t4;
D =1072260.70369  + 1602961601.2090*t -  6.3706*t2 + 0.006593*t3 - 0.00003169*t4;
Om= 450160.398036 -    6962890.5431*t +  7.4722*t2 + 0.007702*t3 - 0.00005939*t4;

如果仅是预报有无日食及日月食的类型是比较简单的,详见《天文算法》一书。如果要计算日月食的路径以及在世界各地的情况,是比较复杂的。在每年的《天文年历》中可以找到每次日月食的详细资料。

当你有了计算机, 日月食预的最简单方法是,计算每次朔月、望月发生时月亮的黄纬,或者计算每次朔月、望月发生时月亮的黄经距轨道升交点的角距离。当角距离小于30几度时(或者说月亮黄纬很小),一般要发生日月食。接下来计算日地距离、地月距离,进一步判断日月食的情况。

事实上,当计算出日月坐标以后,日月食的判断主要是几何问题,具体方法比较多,古人就很早已经会计算日月食了,今人多使用一些根数表计算,速度快且方便。


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


加好友 发短信
等级:论坛游侠 帖子:190 积分:1585 威望:0 精华:1 注册:2008/7/6 15:34:00
  发帖心情 Post By:2008/10/16 13:05:00

多谢老师赐教

(好像没有月亮近地点或远地点的公式??)

[此贴子已经被作者于2008-10-16 14:39:28编辑过]

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


加好友 发短信
等级:业余侠客 帖子:315 积分:717 威望:0 精华:0 注册:2008/9/25 22:36:00
  发帖心情 Post By:2008/10/16 17:49:00

用户已被锁定

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


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2008/10/16 19:42:00

回复q5968661

您大概试图寻找节气日期的计算公式吧。类似的工作我曾做过,在寿星万年历中,我曾寻找回历的通用计算公式。寻找方法在寿星万年历的帮助文档中有详细的论述,寻找过程大致如下:

(1)把已知的日历(或日数)列表出来,放在Excel中

(2)观查日历(或日数)的变化规律,然后在用一条适当的直线或二次曲线拟合。当然拟合分析时,借助Excel的强大的计算能力,可以很快速的“试验”出所需的直线或曲线的待定参数。

我想,节气的日期计算也可参考以上方法实现,在时间跨度不大的情况下,以上方法是可能实现的。如果时间跨度很大,上述方法不易实现,因为数据量太大,验证麻烦。


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

返回版面帖子列表

日月计算器(包含'公农回'三合一万年历)








签名