Skip to content

曲线网格与 Jacobian ​

二维数组有规整的行列编号,但这些编号对应的地理位置可以弯曲。曲线网格(curvilinear grid)将“数据在数组哪里”与“数据在空间哪里”分开保存。想象一张画着方格的橡皮膜:编号没变,形状、距离与方向都可能改变。

网格是一个从参数到位置的函数 ​

令 ξ、η(读作 xi、eta)表示网格的参数坐标(parametric coordinates)。映射(mapping)写为 F(ξ,η)=(x,y)。规则网格可能只需原点与间距;曲线网格常为每个节点单独保存位置。

同一数据网格的索引空间与曲线地理空间

符号 / 英文含义本例单位
ξ,η / parametric coordinates网格参数,各取 [0,1]无量纲
x,y / physical coordinates平面东向、北向位置m
J / Jacobian matrix映射在当前位置的变化率m / 单位参数
det J / determinant局部有向面积缩放m² / 单位参数面积
J⁻¹ / inverse Jacobian把空间小位移换回参数小位移单位参数 / m

Jacobian 矩阵(Jacobian matrix,雅可比矩阵)把四个偏导数组成一张表:

J=(∂x∂ξ∂x∂η∂y∂ξ∂y∂η),(dxdy)≈J(dξdη)

两列分别告诉你:沿网格两个方向挪动一小步,会在物理空间朝哪边走、走多远。这与“矩阵的列是基向量”相连,只是基可能随位置变化。

手算一张斜网格 ​

设 x=1000ξ+200η、y=500η。整个单位参数方格变成一个倾斜的平行四边形:

J=(10002000500),detJ=1000×500−200×0=500000

行列式(determinant)的绝对值表示局部面积缩放。因此整个网格面积为 500,000 m²,参数面积为 0.01 的小格面积为 5,000 m²。这个映射是仿射的,以上结果精确;非线性曲线网格中的 J 随位置变化,对有限小格使用单点 J 只是一种近似。

ts
function physicalPosition(xi: number, eta: number) {
  return { x: 1000*xi + 200*eta, y: 500*eta }
}
function parameterVelocity(eastMps: number, northMps: number) {
  // 解 J × [dξ/dt,dη/dt] = [U,V]
  const etaPerSecond = northMps / 500
  const xiPerSecond = (eastMps - 200*etaPerSecond) / 1000
  return { xiPerSecond, etaPerSecond }
}
physicalPosition(0.5, 0.5) // {x:600,y:250} m
parameterVelocity(10, 5) // {xiPerSecond:0.008,etaPerSecond:0.01}

因此“把东向风 U 直接加到横向索引 ξ”通常不成立。需要先核对数据分量的定义,再处理基、尺度与单位。一些模型提供地理东/北分量,另一些提供沿网格方向的物理速度;后者也不必然等于参数变化率。

什么时候网格会折叠 ​

如果 det J = 0,一个局部方向被压扁,映射无法局部求逆。若原来朝向一致的连续网格中,行列式穿过零并改变符号,可能产生翻折。统一为负的行列式也可能只是全局轴顺序反向,不能仅凭负号断言数据损坏。

实际三角网格可检查面积、绕序与相邻单元的一致性。局部非零行列式仍不能保证整个复杂映射没有全局重叠,还应检查边界和自交。反过来从世界位置寻找数据值,则需要定位包含该点的单元,再求局部坐标;规则经纬网格的除以间距公式不能直接套用。

本节使用平面米制坐标说明映射。若 F 输出经纬度,J 的分量是角度相对于参数的变化率,不能直接把其行列式解释为平方米;地球几何还需要额外换算。

自检:两个映射代表什么 ​

F(ξ,η)=(ξ,−η) 的行列式为负,是否必然存在网格翻折?F(ξ,η)=(ξ,0) 又怎样?

答案与理由

第一个映射是完整镜像,始终可逆,没有局部折叠;只是方向与原约定相反。第二个把整张网格压成线,行列式为零,η 信息丢失,不能反解。判断时需要结合预期方向、连续性与网格几何。

回到主课:曲线网格、Geometry。

气象学 · 数学基础 · 地理可视化