天体の位置計算 – 黄道傾斜角の計算
「平均黄道傾斜角の計算式」 62, 229頁
「シリーズ現代の天文学 13 天体の位置と運動」 64頁
黄道傾斜角には、平均黄道傾斜角と真黄道傾斜角の2つがあります。主に位置計算に用いられるのは平均黄道傾斜角です。平均黄道傾斜角を求めるには、計算式があるので簡単に求められます。ですが、真黄道傾斜角の方は求めるには大変な計算量が必要です。
今回は、平均黄道傾斜角と真黄道傾斜角を求めてみます。真黄道傾斜角は、黄道章動表から求めています。この表は1056ものデータがあり、それらを「天体の位置計算 増補版」63頁にあるように計算して求めなければなりません。コードにすると少し大変なので、Excelの表で計算したものを紹介します。この表はダウンロード可能となっています。ぜひ、国立天文台天文情報センター暦計算室の結果と較べてみてください。なお、⊿εはおまけです。
Fortranによるコード
▶ サブルーチン iauMOE50
function iauMOE50(t) result(moe)
! 平均黄道傾斜角(1950)
! t = (JD - 2415020.0) / 36525.0
double precision, intent(in) :: t
double precision :: moe
moe = 23.45229444d0 - 0.0130125d0 * t - 0.0000016389d0 * t**2 + 0.00000050278d0 * t**3
end function iauMOE50
▶ サブルーチン iauMOE80
function iauMOE80(t) result(moe)
! 平均黄道傾斜角(1984)
! t = (JD - 2451545.0) / 36525.0
double precision, intent(in) :: t
double precision :: moe
moe = 84381.448d0 - 46.8150d0 * t - 0.00059d0 * t**2 + 0.001813d0 * t**3
moe = moe / 3600d0
end function iauMOE80
▶ サブルーチン iauMOE
function iauMOE(t) result(moe)
! 平均黄道傾斜角
! t = (JD - 2451545.0) / 36525.0
double precision, intent(in) :: t
double precision :: moe
moe = 84381.406d0 - 46.836769d0 * t - 0.0001831d0 * t**2 + 0.0020034d0 * t**3 &
- 0.000000576d0 * t**4 - 0.0000000434d0 * t**5
moe = moe / 3600d0
end function iauMOE
▶ メインルーチン pcc_moe.f90
program moe
use pcclib
implicit none
double precision :: julian, t
double precision :: dy, dt
double precision :: year, month, day
double precision :: hour, minute, second
double precision :: ecl
double precision :: dtime(3)
character(255) :: dfmt
write(*,*)
write(*, fmt='(a)', advance='no') 'DATE AND TIME(JST) ? '
read(*,*) dy, dt
! 日付と時刻を抽出
year = int(dy / 10000.0d0)
month = mod(int(dy / 100.0d0), 100)
day = mod(dy, 100.0d0)
hour = int(dt / 10000.0d0)
minute = mod(int(dt / 100.0d0), 100)
second = mod(dt, 100.0d0)
! ユリウス日の計算
julian = JulianDay(year, month, day)
julian = julian + (hour / 24d0 + minute / 1440d0 + second / 86400d0)
julian = julian - 0.375
! ユリウス日から年月日を求める
dtime = Julian2date(julian)
year = dtime(1)
month = dtime(2)
day = dtime(3)
! 時刻引数の計算
! t = (julian - 2415020d0) / 36525d0
t = (julian - 2451545d0) / 36525d0
!平均黄道傾斜角の計算
! ecl = iauMOE50(t)
! ecl = iauMOE80(t)
ecl = iauMOE(t)
! 出力
write(*, *)
dfmt = '(" ", i4, " ", i2, " ", f8.5, " ", f14.5, " ", f15.12)'
write(*, *)
write(*, *) 'Date / UTC Julian Date Mean obliquity of ecliptic'
write(*, *) '-------------------------------------------------------------------------'
write(*, *) ' 。'
write(*, dfmt) int(year), int(month), day, julian, ecl
write(*, *)
stop
end program moe
コンパイル
gfortran pcc_lib.f90 pcc_moe.f90
実行
./a.out
実行結果
DATE AND TIME(JST) ? 20221024,210000 Date / UTC Julian Date Mean obliquity of ecliptic ------------------------------------------------------------------------- 。 2022 10 24.50000 2459877.00000 23.4363116
国立天文台天文情報センター暦計算室の結果と較べても一致していることがわかります。