第二十二章 章动和黄赤交角 Nutation and the Obliquity of the Ecliptic
1. 名词解释
2. 章动的分量
章动可以很容易的分解为黄道的水平分量和的垂直分量。黄道上的分量记为$Δψ$,称为黄经章动;它影响了天球上所有天体的经度。黄道的垂直分量记为$Δε$,称为交角章动,它影响了黄赤交角。
3. 较精确计算章动
// Nutation returns nutation in longitude (Δψ) and nutation in obliquity (Δε)
// for a given JDE.
//
// JDE = UT + ΔT, see package deltat.
//
// Computation is by 1980 IAU theory, with terms < .0003″ neglected.
// 计算 jde 对应的章动
func Nutation(jde float64) (Δψ, Δε unit.Angle) {
T := base.J2000Century(jde)
D := base.Horner(T,
297.85036, 445267.11148, -0.0019142, 1./189474) * math.Pi / 180
M := base.Horner(T,
357.52772, 35999.050340, -0.0001603, -1./300000) * math.Pi / 180
N := base.Horner(T,
134.96298, 477198.867398, 0.0086972, 1./56250) * math.Pi / 180
F := base.Horner(T,
93.27191, 483202.017538, -0.0036825, 1./327270) * math.Pi / 180
Ω := base.Horner(T,
125.04452, -1934.136261, 0.0020708, 1./450000) * math.Pi / 180
// sum in reverse order to accumulate smaller terms first
var Δψs, Δεs float64
for i := len(table22A) - 1; i >= 0; i-- {
row := table22A[i]
arg := row.d*D + row.m*M + row.n*N + row.f*F + row.ω*Ω
s, c := math.Sincos(arg)
Δψs += s * (row.s0 + row.s1*T)
Δεs += c * (row.c0 + row.c1*T)
}
Δψ = unit.AngleFromSec(Δψs * .0001)
Δε = unit.AngleFromSec(Δεs * .0001)
return
}
4. 粗略计算章动
Δψ精度为0.5″,Δε精度为0.1″
// ApproxNutation returns a fast approximation of nutation in longitude (Δψ)
// and nutation in obliquity (Δε) for a given JDE.
//
// Accuracy is 0.5″ in Δψ, 0.1″ in Δε.
// 精度要求为0.5″ in Δψ, 0.1″ in Δε
func ApproxNutation(jde float64) (Δψ, Δε unit.Angle) {
T := (jde - base.J2000) / 36525
Ω := (125.04452 - 1934.136261*T) * math.Pi / 180
L := (280.4665 + 36000.7698*T) * math.Pi / 180
N := (218.3165 + 481267.8813*T) * math.Pi / 180
sΩ, cΩ := math.Sincos(Ω)
s2L, c2L := math.Sincos(2 * L)
s2N, c2N := math.Sincos(2 * N)
s2Ω, c2Ω := math.Sincos(2 * Ω)
Δψ = unit.AngleFromSec(-17.2*sΩ - 1.32*s2L - 0.23*s2N + 0.21*s2Ω)
Δε = unit.AngleFromSec(9.2*cΩ + 0.57*c2L + 0.1*c2N - 0.09*c2Ω)
return
}
5. 黄赤交角
平黄赤交角$ε_0$:黄道与平赤道的夹角
$$ε_0 = 23°26’21”.448 - 46”.8150T - 0”.00059T^2 + 0”.001813T^3$$
T是J2000.0起算的儒略世纪数
当时间范围很长,上述公式的精度并不令人满意:2000年误差1”,4000误差为10”。Laskar提供了以下改良的的公式,式中U是J2000.0起算的儒略万年数,即U=T/100: \begin{align} ε_0 =& 23°26’21”.448 - 4680”.93U - 1.55U^2 + 1999.25U^3 - 51.38U^4 - 249.67U^5 \\[2ex] &-39.05U^6 + 7.12U^7 + 27.87U^8 + 5.79U^9 + 2.45U^{10} \end{align} 该表达式的精度是:1000年后误差0”.01(公元 1000 到 3000),10000年后误差数个角秒。
该表达式适用于|U|<1,即 J2000.0 起算前后各 10000 年的范围内。// MeanObliquity returns mean obliquity (ε₀) following the IAU 1980 // polynomial. // // Accuracy is 1″ over the range 1000 to 3000 years and 10″ over the range // 0 to 4000 years. // 平黄赤交角 - 精度一般,2000年误差 1",4000年误差为 10" func MeanObliquity(jde float64) unit.Angle { // (22.2) p. 147 return unit.AngleFromSec(base.Horner(base.J2000Century(jde), unit.FromSexaSec(' ', 23, 26, 21.448), -46.815, -0.00059, 0.001813)) } // MeanObliquityLaskar returns mean obliquity (ε₀) following the Laskar // 1986 polynomial. // // Accuracy over the range 1000 to 3000 years is .01″. // // Accuracy over the valid date range of -8000 to +12000 years is // "a few seconds." // 平黄赤交角 - 精度较好,1000年后误差0".01(公元 1000 到 3000),10000年后误差数个角秒 // 适用范围:J2000.0 起算前后各10000年的范围内。 func MeanObliquityLaskar(jde float64) unit.Angle { // (22.3) p. 147 return unit.AngleFromSec(base.Horner(base.J2000Century(jde)*.01, unit.FromSexaSec(' ', 23, 26, 21.448), -4680.93, -1.55, 1999.25, -51.38, -249.67, -39.05, 7.12, 27.87, 5.79, 2.45)) }
真黄赤交角:黄道与真赤道的夹角
$$ε = ε_0 + Δε$$