3. 分潮角速度与Doodson数的手工核算

为什么手工核算角速度与Doodson数

调和分析中每个分潮的频率由天文变量的线性组合唯一确定。Doodson数就是这套组合的编码:以平太阴时角 τ 为基准,加上太阳平黄经 s、太阴平黄经 h、月球近地点平黄经 p、太阳近地点平黄经 p₁ 以及月球升交点平黄经 N′ 的整数倍。角速度 σ 则是这些天文变量变化率的加权和。手工核算的意义在于:一旦分潮字典建立,后续设计矩阵、交点因子、天文幅角都依赖它,任何一处 Doodson 数写错都会导致整条分析链偏移。

天文变量变化率与角速度公式

采用常用天文常数(单位:度/平太阳时,即 °/h),各变量变化率如下:

变量含义变化率 (°/h)
τ平太阴时角14.4920521
s太阳平黄经0.5490165
h太阴平黄经0.0410686
p月球近地点平黄经0.0046418
p₁太阳近地点平黄经0.0000020
N′月球升交点平黄经(取负号约定)-0.0027379

分潮角速度按 σ = 14.4920521·Dτ + 0.5490165·Ds + 0.0410686·Dh + 0.0046418·Dp + 0.0000020·Dp₁ + (-0.0027379)·DN′ 计算,其中 D 为对应 Doodson 数。注意 Doodson 数通常以 τ 的系数为第一位,其余按 s、h、p、p₁、N′ 顺序排列,且常以“+5”偏移编码书写(如 M2 写作 255.555),核算时需还原为真实整数。

逐项核算示例

以四个主分潮为例,先还原 Doodson 数,再代入公式:

分潮Doodson编码还原后 (τ,s,h,p,p₁,N′)角速度计算 (°/h)结果 (°/h)
M2255.555(2,0,0,0,0,0)2×14.492052128.9841042
S2273.555(2,2,-2,0,0,0)2×14.4920521+2×0.5490165-2×0.041068630.0000000
K1165.555(1,1,0,0,0,0)14.4920521+0.549016515.0410686
O1145.555(1,-1,0,0,0,0)14.4920521-0.549016513.9430356

核对要点:S2 的角速度应恰为 30.0000000 °/h(太阳日周期 12 h),这是检验 Doodson 数与常数是否自洽的“锚点”。若算得 29.99 或 30.01,说明 s 或 h 的系数写错。K1 与 O1 之和应等于 2×14.4920521 = 28.9841042,也可作为交叉校验。

手工核算时建议保留 7 位小数,最后再按需要舍入到 6 位。Doodson 编码中的“.”只是分隔符,不参与运算;偏移量 5 必须逐位减去后再代入。

分潮字典的建立与复用

把核算结果整理成字典,字段至少包含:分潮名、Doodson 六元组、角速度、周期(360/σ)、来源备注。字典一旦建立,后续设计矩阵的列顺序、交点因子计算、天文幅角初值都直接引用,避免重复推导。下面给出一个可直接使用的字典片段(Python 字典,键为分潮名):

tidal_constituents = {
    "M2": {"doodson": (2, 0, 0, 0, 0, 0), "speed": 28.9841042},
    "S2": {"doodson": (2, 2, -2, 0, 0, 0), "speed": 30.0000000},
    "K1": {"doodson": (1, 1, 0, 0, 0, 0), "speed": 15.0410686},
    "O1": {"doodson": (1, -1, 0, 0, 0, 0), "speed": 13.9430356},
}
# 校验:S2 应等于 30.0,K1+O1 应等于 2*14.4920521
assert abs(tidal_constituents["S2"]["speed"] - 30.0) < 1e-7
assert abs(tidal_constituents["K1"]["speed"] + tidal_constituents["O1"]["speed"]
           - 2 * 14.4920521) < 1e-7

这段校验代码把“锚点”固化为断言,字典扩充新分潮时自动跑一遍,能第一时间发现录入错误。

分潮 Doodson 数 → 角速度核算链 天文变量变化率 τ 14.4920521 °/h s 0.5490165 °/h h 0.0410686 °/h p 0.0046418 °/h p₁ 0.0000020 °/h N′ -0.0027379 °/h σ = Σ 变化率 × Doodson数 编码偏移 +5 需先还原 保留 7 位小数再舍入 分潮 Doodson 数 M2 (2, 0, 0, 0, 0, 0) S2 (2, 2,-2, 0, 0, 0) K1 (1, 1, 0, 0, 0, 0) O1 (1,-1, 0, 0, 0, 0) 编码示例 M2 = 255.555 S2 = 273.555 K1 = 165.555 O1 = 145.555 逐位减 5 还原真实整数 核算结果 (°/h) M2 28.9841042 S2 30.0000000 K1 15.0410686 O1 13.9430356 锚点校验 S2 = 30.0000000 ✓ K1 + O1 = 28.9841042 ✓ = 2 × τ 变化率 ✓ 通过后写入分潮字典 加权 求和

常见错误与排查

  • 偏移量未还原:直接把 255.555 当作系数代入,结果会大出数倍。务必逐位减 5。
  • N′ 符号约定不一致:有的文献把 N′ 定义为升交点黄经并取正号,此时变化率应为 +0.0027379。字典中必须注明约定,否则 K1、O1 等含 N′ 的分潮会偏差。
  • s 与 h 混淆:S2 的 Doodson 数中 s 系数为 +2、h 系数为 -2,若写反,S2 角速度会偏离 30.0000000,锚点校验立即暴露。
  • 舍入累积:多个分潮连续计算时,中间结果不要提前舍入,最后统一保留 6 位。
若锚点校验不通过,不要继续扩充字典。先回到 Doodson 编码逐位核对,再检查变化率常数是否与所用文献一致(不同历表常数在小数第 7 位可能有差异,但不应影响 6 位结果)。

可复用的核算清单

步骤动作通过条件
1列出分潮名与 Doodson 编码编码位数完整,含分隔符
2逐位减 5 还原整数六元组六元组与文献一致
3代入变化率加权求和保留 7 位小数
4锚点校验(S2=30,K1+O1=2τ)误差 < 1e-7
5写入字典并加断言断言全部通过

完成以上五步,分潮字典即可作为后续设计矩阵、交点因子与天文幅角计算的唯一数据源,避免同一参数在多处重复推导而产生不一致。