PyEphem:冬至和昼夜平分点的日期及其在较长时间尺度上的有效性

时间:2015-03-17 17:02:03

标签: python pyephem skyfield

我的问题是PyEphem为冬至和昼夜平分点以及太阳几何的日期提供准确结果的时间跨度。

到目前为止,我发现了B.C.的限制。 9998-03-20到A.D. 9999-12-31这篇关于GitHub https://github.com/brandon-rhodes/pyephem/issues/61的非常翔实的帖子,以及总体迹象表明,当在任何一个现场移动超过+/- 20,000年时,结果变得不稳定。

我想澄清这一点,因为我试图获得更长时间的太阳位置 - 通常可以追溯到1万年BP-以计算太阳的高度和方位角引入的太阳辐射在给定的位置。 PyEphem似乎提供了例如Berger,1978(J.Atmosph.Sc。,35:2362-2367)提供的功能的良好替代品。对我而言,PyEphem相对于这些算法的一个重要优势是,它还可以跟踪时间,而地球轨道通常固定在上述算法中的某个特定时刻(例如,3月21日的春分点)。

通常,使用Berger和其他算法的地球轨道的变化是根据最后一次冰川(最高126,000年BP)的尺度来评估的。在评估此范围内的PyEphem时,我发现了一些奇怪的行为,因为日期在今天之前就已经到了日期:

import ephem
date= ephem.date((-59000,1,1))

orbitPoints= ['vernal_equinox_start','summer_solstice',\
  'autumnal_equinox','winter_solstice','vernal_equinox_end']

dates= {}
dates['vernal_equinox_start']= ephem.next_vernal_equinox(date)
dates['summer_solstice']= ephem.next_summer_solstice(dates['vernal_equinox_start'])
dates['autumnal_equinox']= ephem.next_autumnal_equinox(dates['vernal_equinox_start'])
dates['winter_solstice']= ephem.next_winter_solstice(dates['vernal_equinox_start'])
dates['vernal_equinox_end']= ephem.next_vernal_equinox(dates['winter_solstice'])

for orbitPoint in orbitPoints:
  date= dates[orbitPoint]
  distance= body_distance(sun, date)
  hlon, hlat= body_hpos(sun, date)
  print '%-20s %30s %8.4f %12s %12s' %\
    (orbitPoint, date, distance, hlon, hlat)

print 'days between between equinoxes: %.1f, year length (vernal equinox): %.1f' %\
  (dates['autumnal_equinox']-dates['vernal_equinox_start'],\
   dates['vernal_equinox_end']-dates['vernal_equinox_start'])

给出:

vernal_equinox_start          -59001/12/20 01:33:21   1.6255  180:01:53.6    0:00:01.7
summer_solstice                -59000/2/19 04:16:18   1.3380  180:03:56.7    0:00:09.6
autumnal_equinox                -59000/7/1 09:20:58   0.3704    0:00:42.2    0:00:09.6
winter_solstice                -59000/10/9 07:35:39   1.1335  179:56:59.4   -0:00:12.4
vernal_equinox_end            -58999/10/10 07:40:47   1.1348  180:00:52.7    0:00:16.2
days between between equinoxes: 193.3, year length (vernal equinox): 659.3

当我将日期设置为date= ephem.date((-25000,1,1))时,我仍然可以得到年份长度的合理(?)值。

如果PyEphem在我感兴趣的时期(1万年BP)确实给出了准确的结果,那将符合我的目的。但是,我希望澄清这一点,并且我愿意接受扩展此范围的建议,即使它只是用于验证。我正在寻找SkyField作为替代方案,但它似乎没有提供扩展范围。

对PyEphem的有效范围和任何建议的清晰描述将不胜感激。

1 个答案:

答案 0 :(得分:0)

您得到的结果是合理的,尽管我无法说出它们的具体准确性。只是短暂地说,地球的自转速率与当今的相似。仅仅几百年前,日子越来越短了,将来,日子将会越来越长(由于误差的累积,我们有了leap秒),而且历史上每一年的累积差异使我们当前的公历变得越来越差。每隔一千年的季节,您都会倒退。参见:

https://eclipse.gsfc.nasa.gov/SEcat5/deltat.html

我没有坐下来计算累积的差额是否真的解释了您在上面看到的差额,或者是否还有其他影响也在起作用,但是我一定会惊讶地发现我们当前的格里高利历日正好是我们的长度,可以追溯到公元前59,000年,在整个季节中都落在今天以外的其他地方。