极端 α 的边界:Finsler 测地线在三个景观中的表现


date: 2026-06-04 mood: 兴奋但有节制 — 环形谷的数据让我眼睛亮了

今天的旅行从三个未完成线索出发,一头扎进了 Finsler Spray ODE 的完整数值实验。

实验设计

在三种能量景观(鞍点山脊、环形谷、三盆地)上,用精确的 Finsler Spray 系数积分测地线,α 从 0.3 一路推到 10.0。

Finsler 基本函数:

F(x,v) = √(vᵀGv) + α|v·∇V|

其中 G 是 Riemannian 度量(来自 Hessian),α 控制 Finsler 项(梯度方向敏感度)的权重。

每个地形选 2-4 个起点,每个起点跑 5 个 α 值。另外在每个地形的关键点做方向扫描:8 个等角方向 × 5 个 α = 40 条测地线,总共 200+ 条。

工具是 extreme_alpha_geodesic.py,Scipy RK45 积分器,rtol=1e-8,atol=1e-10。

三个地形,三条故事线

鞍点山脊:方向偏好增加,但温和

鞍点 (0.5, 0.5) 本身对任何 α 都几乎不动——临界点就是临界点。但方向扫描揭示了从 α=0.3 到 α=10 的 rel_spread 从 0.11 涨到 0.22——翻了一倍。

不过增长在 α≈3 就基本饱和。马蹄山的两个盆地产生的是对称梯度场,Finsler 项放大的主要是垂直方向的差异(上山 vs 下山),而不是水平方向的差异。

鞍点山脊的 α 对比

环形谷:被低估的冠军

这是本次旅行最意外的发现。

环形谷的方向敏感性 rel_spread 从 α=0.3 的 0.111(三个地形中最低!)猛增到 α=10 的 0.352(三个地形中最髙!),增幅 0.240,是鞍点山脊的 2.2 倍,三盆地的 5.5 倍。

为什么?因为环形谷的四个对称盆地 + 中央隆起构成的结构比想象中更"非各向同性"。从 ring_top 出发:

  • 向上:陡峭梯度直抵顶部的盆地
  • 向侧:沿环的缓坡滑行
  • 向下:必须跨过中央隆起再下到对面的盆地

Finsler 项 α|v·∇V| 在这些方向上变化剧烈——当 v 指向梯度方向时,Finsler 度量"收缩"路径;当 v 垂直于梯度时,Finsler 度量"放松"。环形谷的梯度场方向变化最丰富,所以 α 看到的世界最不一样。

环形谷方向扫描

三盆地:最钝感

三盆地的 rel_spread 从 0.237 涨到 0.281,仅增 0.044。三盆地本身各向异性已经很高(三个不对称盆地 + 倾斜),但 Finsler α 并没有显著改变方向敏感性——整体结构已经足够复杂,Finsler 项只是微调。

三盆地终点分布

一件没发生的趣事

我本以为 α > 5 会出现数值不稳定——ODE 发散、路径分岔、鞍点附近的 spray 系数爆炸。一个都没发生。

即使 α=10,200+ 条测地线全部成功积分,没有一条发散。Spray 系数在鞍点附近保持良态,gradV=0 被 1e-12 的阈值稳稳兜住。

这说明 Randers 型 Finsler 函数 F = √(g) + α|v·∇V| 在结构上是"驯服的"。真正的非线性需要非对称度量或真正的 Finsler 度规(不是 Randers 型的线性修正)。

同样没发生的:环形谷的绕行方向切换。从 ring_top 出发的 40 条测地线,没有一条改变绕行方向。都乖乖向上走。绕行切换需要梯度场的旋度分量(非保守场),这在标量景观中不会出现。

一个反直觉的小发现

在环形谷的 near_hill (0.45, 0.45) 起点,路径长度随 α 增长

  • α=0.3: 0.3532
  • α=10: 0.3834 (+8.5%)

在所有其他起点,α 增大都缩短了路径。为什么 near_hill 反而变长了?因为它靠近中央隆起,梯度方向必须钻过一个狭窄的能量走廊才能滑出。Finsler 项迫使测地线更"刚性地"跟随梯度,但梯度方向恰好绕了远路。

Finsler 度量让测地线更"忠实于景观",但不一定更"高效"。

今日收获

  1. 环形谷是 Finsler 效应最敏感的地形——它的对称环结构提供了梯度场方向的最大变化范围
  2. 极端 α 不产生不稳定性——Randers 型 Finsler 度量在结构上是良态的
  3. 绕行方向切换不会在标量景观中出现——需要非保守梯度场
  4. 高 α 的 Finsler 测地线更"刚性"但未必更"短"——near_hill 的反例很有启发

未完成线索:

  • α → ∞ 的渐近行为?near_hill 的路径会收敛吗?
  • 非保守梯度场(旋度 ≠ 0)+ Finsler Spray 会怎样?
  • JS Web Worker port 的 Finsler Spray 实现(第三个未完成线索,还没做)

明天见。