Насколько точно PyEphem поднимается и устанавливает расчеты за несколько сотен лет?
Подсчитывая дневные часы солнечного света (закат-восход) и находя максимум для каждого года (как правило, в день солнцестояния, но не всегда), появляется интересная картина. Около 5 секунд солнечного света теряется каждый век.
Это фактор ошибки в PyEphem? Является ли это точным и PyEphem с учетом изменений на орбите Земли? какая-то другая причина?
import pandas as pd
import ephem
sun = ephem.Sun()
raleigh = ephem.Observer()
raleigh.lon, raleigh.lat = "-78.6382", '35.7796'
raleigh.horizon = '-0:34' # USNO standard atmospheric diffraction
raleigh.pressure = 0 # atmospheric refraction parameters
def riseset(date, f):
# compute passed function (sunrise or sunset)
raleigh.date = date
sun.compute(raleigh)
sr = ephem.localtime(f(sun))
return sr
def createdataframe(start, end):
# create a dataframe index by daily dates, add columns for the
# sunrise, sunset, and their delta
df = pd.DataFrame(index=pd.date_range(start=start, end=end, freq='D'))
df['date'] = df.index.map(lambda d: d.strftime("%b %d"))
df['sunrise'] = df.index.map(lambda d: riseset(d, raleigh.next_rising))
df['sunset'] = df.index.map(lambda d: riseset(d, raleigh.next_setting))
df['daylightdelta'] = df['sunset'] - df['sunrise']
return df
def outputmax(df, year):
i = df['daylightdelta'].idxmax() # index of the day where the sun is visible above the horizon for the most time
return "solstice: %s longest day sunrise: %s sunset: %s daylight: %s" % (
ephem.localtime(ephem.next_solstice(str(year))).strftime("%Y %b %d %X"),
df.loc[i]['sunrise'].strftime("%b %d %X"),
df.loc[i]['sunset'].strftime("%T"),
df.loc[i]['daylightdelta'])
if __name__ == "__main__":
for year in range(1900,2201):
# looping through 1900-2200, find the date with the most hours of sunlight
start = '%d-01-01 04:00:00' % year # compensating for UTC which can throw off pandas columnar math
end = '%d-12-31 23:59:00' % year
print outputmax(createdataframe(start, end), year)
1 ответ
Я думаю, что PyEphem показывает вам реальное явление. В то время как мне не хватает эксперта, чтобы перечислить все многие завихряющиеся факторы, которые влияют на число, например, продолжительность самого длинного дня, я обращаю внимание на то, что наклон полюса Земли меняется с годами и в настоящее время уменьшается:
https://en.wikipedia.org/wiki/Milankovitch_cycles
Давайте попробуем сделать очень приблизительное предположение о размере, который может иметь этот эффект. Если в течение 41 000 лет наклон изменяется от максимального к минимальному и обратно, то текущий полупериод от максимального наклона назад к минимальному должен занимать около 20 500 лет. Хотя, конечно, реальная корректировка является синусоидальной, с медленным изменением вблизи максимумов и затем более быстрым изменением в середине между крайностями, что, если бы оно было просто линейным в первом приближении? Тогда скорость изменения за 20 500 лет = 205 веков была бы примерно:
(24,5 - 22,1) градусов / 205 веков ≅ 0,01 градуса
Таким образом, можно ожидать, что наклон оси изменится примерно на сотую часть градуса в год. Сколько секунд дневного света изменяется в самом длинном дне в Роли, если вы измените наклон оси на 0,01 градуса? PyEphem не позволяет нам произвольно изменять осевой наклон, поэтому вместо этого давайте отрегулируем положение Роли. Измените нижний пункт вашей программы на:
if __name__ == "__main__":
year = 2000
start = '%d-01-01 04:00:00' % year # compensating for UTC which can throw off pandas columnar math
end = '%d-12-31 23:59:00' % year
raleigh.lat = '35.76'
print outputmax(createdataframe(start, end), year)
raleigh.lat = '35.77'
print outputmax(createdataframe(start, end), year)
raleigh.lat = '35.78'
print outputmax(createdataframe(start, end), year)
И в качестве результата вы должны получить:
solstice: 2000 Jun 20 21:47:51 longest day sunrise: Dec 21 07:20:52 sunset: 17:04:27 daylight: 0 days 14:16:24.970989
solstice: 2000 Jun 20 21:47:51 longest day sunrise: Dec 21 07:20:54 sunset: 17:04:26 daylight: 0 days 14:16:28.206467
solstice: 2000 Jun 20 21:47:51 longest day sunrise: Dec 21 07:20:55 sunset: 17:04:24 daylight: 0 days 14:16:31.442902
Примерно три или четыре секунды за столетие, что примерно соответствует величине эффекта, который вы видите. Поэтому я предполагаю, что ваша программа раскрывает постепенное уменьшение осевого наклона планеты, которое постепенно делает сезоны менее экстремальными, а самый длинный день и самую длинную ночь - менее экстремальными.