16c62a97d5
- 新增时标、ΔT 模型、质心时间与 UT1 支持 - 改进日月食、月掩、行星事件及路径边界计算 - 完善恒星三维自行与动态距离传播 - 扩展 SVG、GeoJSON、KML 输出与底层距离换算工具 - 整理中英文手册、示例资源及回归测试
94 lines
6.6 KiB
Markdown
94 lines
6.6 KiB
Markdown
# 精度与性能
|
||
|
||
[English](en/accuracy.md) | [README](../../README.md)
|
||
|
||
下表说明内置模型及已有样本的对照结果。样本最大误差不代表所有日期、地点的误差上限。与外部星历比较时,需要先统一时标、参考系、观测点高度和折射模型。
|
||
|
||
UTC、UT1 与 TT 的换算见[时标](timescale.md)。
|
||
|
||
## 目录
|
||
|
||
- [太阳与行星](#太阳与行星)
|
||
- [月球](#月球)
|
||
- [Lite 轻量链路](#lite-轻量链路)
|
||
- [精度校验参考](#精度校验参考)
|
||
|
||
## 太阳与行星
|
||
|
||
太阳和行星使用内置 VSOP87 解析项,当前表项覆盖 **J2000 前后约 4000 年**。下表列出相对完整 VSOP87 的截断误差量级:
|
||
|
||
| 目标 | 黄经/黄纬 | 距离 |
|
||
| --- | --- | --- |
|
||
| 太阳/地球 | 约 `0.1"` | 约 `0.1 × 10^-6 AU` |
|
||
| 水星、金星 | 约 `0.2"` | 约 `0.2 × 10^-6 AU` |
|
||
| 火星 | 约 `0.5"` | 约 `1 × 10^-6 AU` |
|
||
| 木星 | 约 `0.5"` | 约 `3 × 10^-6 AU` |
|
||
| 土星 | 约 `0.5"` | 约 `5 × 10^-6 AU` |
|
||
| 天王星 | 约 `1"` | 约 `20 × 10^-6 AU` |
|
||
| 海王星 | 约 `1"` | 约 `40 × 10^-6 AU` |
|
||
|
||
这类精度适合常规天文历法、观测辅助、科普展示和个人研究;航天导航、精确掩星预报和严格动力学积分不在该范围内,这类用途通常需要 JPL DE 等专业星历。
|
||
|
||
## 月球
|
||
|
||
月球使用内置的 ELP2000/82 风格截断解析级数,库体积轻,不需要外部星历文件。它适合农历定朔、月相、升落、月食、业余月掩预报和常规位置计算;极高精度月球测距、长期物理天平动和专业掩星超出该范围,这类用途以 JPL 星历或专门月球星历为准。
|
||
|
||
## Lite 轻量链路
|
||
|
||
`lite/sun` 和 `lite/moon` 是独立于 `sun` / `moon` 的近似实现。不依赖 VSOP87 或主链的 ELP2000/82 级数,适合 CPU / 内存受限环境。
|
||
|
||
- `lite/sun`:简化太阳真黄经 / 视黄经公式 + 轻量赤道坐标转换
|
||
- `lite/moon`:Schlyter 风格月球近似(约 15 个摄动项)+ 轻量站心修正
|
||
- 升落搜索:固定步长扫描 + 二分,不走主链的高精度章动迭代
|
||
- 计算链路零堆分配(0 allocs/op);相对主链,位置与月相等纯求值接口约快 `7.5–27.1x`,升落接口约 `0.9–3.5x`
|
||
|
||
能力边界:
|
||
|
||
| 包 | 位置模型 | 升落搜索 | 主要用途 |
|
||
| --- | --- | --- | --- |
|
||
| `lite/sun` | 简化太阳真/视黄经 + 轻量赤道坐标转换 | `30` 分钟步长扫描 + 二分 | 日出日落、太阳高度角、表盘/前端周期刷新 |
|
||
| `lite/moon` | Schlyter / vFPS 月球近似 + 轻量站心修正 | `15` 分钟步长扫描 + 二分 | 月出月落、月相、月龄、轻量月球观测辅助 |
|
||
|
||
与 `sun` / `moon` 包的误差(2026 全年,8 个站点;升落每 7 或 15 天取样,月相月龄每 6 小时):
|
||
|
||
| 能力 | 平均绝对误差 | P95 | 最大绝对误差 | 备注 |
|
||
| --- | --- | --- | --- |-----------------------------------|
|
||
| `lite/sun` 日出 | `0.02 min` | `0.04 min` | `0.31 min` | 样本中无事件存在性分歧 |
|
||
| `lite/sun` 日落 | `0.02 min` | `0.06 min` | `0.35 min` | `2` 个高纬样本在跨午夜日期归属上有语义差异 |
|
||
| `lite/moon` 月出 | `0.28 min` | `0.57 min` | `1.44 min` | 样本中无事件存在性分歧 |
|
||
| `lite/moon` 月落 | `0.36 min` | `0.86 min` | `1.24 min` | `1` 个高纬样本在“当天是否有月落”上与主链判断不同 |
|
||
| `lite/moon` `Phase()` | `0.00089` | `0.00185` | `0.00243` | 与 `moon.Phase` 对比的结果 |
|
||
| `lite/moon` `PhaseAge()` | `0.003 d` | `0.010 d` | `0.014 d` | 约平均 4.3 分钟、P95 14.4 分钟、最大 20.2 分钟 |
|
||
| `lite/moon` 地心黄经 | `2.41'` | `6.82'` | `9.91'` | 相对主链月球位置 |
|
||
| `lite/moon` 地心黄纬 | `0.87'` | `1.83'` | `2.92'` | 相对主链月球位置 |
|
||
|
||
`Go testing.Benchmark` 参考值(单机测量,仅供比较;绝对值因机器而异):
|
||
|
||
| 接口 | 主链 | `lite` | 加速倍数 | 主链分配 | `lite` 分配 |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Sun ApparentRaDec` | `6.031 µs/op` | `222.4 ns/op` | `27.1x` | `0 B/op, 0 allocs/op` | `0 B/op, 0 allocs/op` |
|
||
| `Sun Altitude` | `6.127 µs/op` | `672.3 ns/op` | `9.1x` | `0 B/op, 0 allocs/op` | `0 B/op, 0 allocs/op` |
|
||
| `Sun RiseTime` | `101.874 µs/op` | `29.168 µs/op` | `3.5x` | `0 B/op, 0 allocs/op` | `0 B/op, 0 allocs/op` |
|
||
| `Moon ApparentRaDec` | `16.897 µs/op` | `1.070 µs/op` | `15.8x` | `0 B/op, 0 allocs/op` | `0 B/op, 0 allocs/op` |
|
||
| `Moon Phase` | `15.441 µs/op` | `935.6 ns/op` | `16.5x` | `0 B/op, 0 allocs/op` | `0 B/op, 0 allocs/op` |
|
||
| `Moon Altitude` | `9.714 µs/op` | `1.294 µs/op` | `7.5x` | `0 B/op, 0 allocs/op` | `0 B/op, 0 allocs/op` |
|
||
| `Moon RiseTime` | `121.772 µs/op` | `132.312 µs/op` | `0.9x` | `0 B/op, 0 allocs/op` | `0 B/op, 0 allocs/op` |
|
||
|
||
主链与 `lite` 的差距随场景变化:位置、月相等纯求值接口约 `7.5–27.1x`;升落接口两边都要做时间搜索,差距缩小到 `0.9–3.5x`,其中 `Moon RiseTime` 接近持平。
|
||
|
||
日月食、物理天平动或高纬边界判定使用主链 `sun` / `moon`。
|
||
|
||
## 精度校验参考
|
||
|
||
下面这些函数曾与 JPL Horizons、NASA GSFC 等资料对照,可作为使用时判断结果量级的参考:
|
||
|
||
- 太阳/行星/月亮视直径:各天体与外部基线的最大差异从 `0.000002"` 到 `0.194598"` 不等,月亮因视差和距离变化更敏感
|
||
- 太阳物理星历 `P/B0/L0`:最大差异约 `0.003349° / 0.003986° / 0.047394°`
|
||
- 行星升/中天/落:已用 JPL Horizons 升中落事件做对比校验;该基线按 1 分钟步长生成,当前结果与 Horizons 事件时间在分钟级上对齐
|
||
- 月出/月落:`aero=true` 按动态标准折射和实时月球视半径计算上缘过地平线。7 个地点、14 个海平面事件相对 JPL Horizons DE441 的平均/最大差异约 `0.30s / 0.75s`
|
||
- 月出/月落的其他口径:相对固定 `-0.8333°` 的 MET Norway(Skyfield 1.53 + DE440s)约 `38.77s / 76.22s`;相对未公开地平线口径的 IMCCE Miriade 平均约 `2m13.46s`,`61°N` 低仰角样本最大约 `6m41.82s`
|
||
- 地球近日点/远日点:时刻最大差异约 `1m28.84s`,距离最大差异约 `0.000000039837 AU`
|
||
- 月球主链位置:当前算法为 ELP2000/82 风格截断解析级数;在 `-2000` 年四个 JPL/Horizons `JDTT` 样本上,相对 JPL/Horizons 的最大差异约为黄经 `219.6"`、黄纬 `25.8"`、距离 `34.3 km`
|
||
- 月球近地点/远地点:时刻最大差异约 `15m53.45s`,距离最大差异约 `39.758 km`
|
||
- 月球最大赤纬:时刻最大差异约 `2.43s`,赤纬最大差异约 `0.00006431°`
|