星历表只记几次,怎么找出“最近”和“刚好过零”的时刻?
除了补一个中间值,插值还能寻找局部极小值或过零点;前提是数据真的在附近。
表格里太阳到火星的距离先变小、再变大,最小值可能藏在两行之间。另一张表里水星纬度一负一正,它也在两次记录之间穿过了零。我们用书中的三点或五点,把这些时刻找出来。
打开互动课程 →
先猜一下
看到一段曲线在下降,就能把它外推很远来确定最低点吗?
查看答案与解释
不能,最低点应有附近数据支持 — 局部插值多项式在远处可能与真实函数完全不同。
再把体验和科学连起来
先把单位和中心选对
表中角度已化成角秒,时刻偏移除以表格间隔才是n。中心应靠近要查询的事件。
n=(查询时刻−中心时刻)/表格间隔
三点与五点用到的信息不同
三点描述二次弯曲;第三差分不能忽略时,五点会保留更高阶变化。不是简单把五个点平均。
三点二次 / 五点四次差分多项式
过零与极值是两个不同条件
水星纬度过零求y=0;火星距离最小求导数y′=0。找到时刻后还要计算该时刻的函数值。
零点 y(n)=0;极值 y′(n)=0
只信附近,不把外推当预测
求出的n如果远离中心,书中公式可能给出荒谬结果。本课拒绝这种事件输出,提示换中心或数据。
局部求根后再检查范围和残差
把计算链展开
a = y₂−y₁;b = y₃−y₂;c = b−a y(n) = y₂ + n(a+b+nc)/2 y′(n) = (a+b)/2 + nc 零点:y(n)=0;极值:y′(n)=0
以上展开三点分支,五点分支采用四次多项式。导数针对无量纲n;求根后还需检查范围,c=0时不直接除以c求极值。
试一试
先看月球表的三点与五点差别,再切到水星过零和火星最近距离。不能从遥远的一小段数据可靠外推极值。
动手看一遍 →
符号不用背
- n
- 距中心时刻的偏移,除以采样间隔
- a,b,c / A…K
- 逐阶差分
- y(n)
- 三点二次或五点四次插值多项式
- y′(n)=0 / y(n)=0
- 极值条件 / 过零条件
算法、精度与适用范围
补齐第3章3.3–3.11。三点与五点差分展开为同一多项式;零点用原式3.7/3.11等价Newton修正,极值对导数求零;另保留3.6/3.10式固定迭代的数学入口作比较。不把没有找到局部根当作零,不接受离中心超过一个间隔的外推根。界面查询限制|n|≤0.5,事件搜索检查|n|≤1。月球地平视差采用例3.e;水星五点过零采用印刷页30练习;火星极值采用3.b;第四表为明确标记的自编四次函数。结果时间沿用各表注明的TD或UT,不作相互换算。所有数据预先转同一单位;另有原书赤经跨24h与太阳经度跨0°数据,采用最短连续差展开后插值,不把359°到0°当成倒走359°。五点不是任意情况下都更准确。原书的远处正弦极值反例说明了外推风险,未将不可靠外推作为预报功能。
我的理解检查
寻找函数的零点,与寻找最小值,条件相同吗?
不同 — 零点要求y=0,极值要求导数为零。
n=0.25总等于6小时吗?
不是,要看表格间隔 — 只有采样间隔为一天时,0.25个间隔才是6小时。
只给三条记录,能直接当成五点法吗?
不能 — 五点法需要五个等间隔值,程序不能自己捏造另外两个。
先选事件附近的表格,再分别求值、求零或求极值;最后检查单位、范围和残差。
Jean Meeus · Astronomical Algorithms, 2nd ed. · 第 3 章