深色模式
标量场、向量场与导数
如果一个函数输入位置、输出一个温度,它就是标量场(scalar field);输出一支风速箭头,则是向量场(vector field)。“场”不要求先掌握高等数学,可以先把它看作带有空间坐标和时间参数的函数。
text
temperature(x,y,t) → 一个数
wind(x,y,t) → 两个速度分量 (u,v)坐标、输出单位、参考系与有效范围都是函数契约的一部分。真实场通常只能通过离散样本近似;合成场可以直接用解析函数(analytic function)生成,特别适合检验算法。
导数:把“增加多少”除以“走了多远”
导数(derivative)描述局部变化率。若沿东向 100 m,温度升高 0.2°C,平均变化率就是 0.2/100 = 0.002°C/m。把测量间隔逐渐缩小,理想极限就是该点的导数;工程中常用有限差分(finite difference)近似它。
偏导数(partial derivative)只改变一个输入,其余保持不变。∂T/∂x 表示时间和 y 不变时,沿 x 方向的温度变化率。“∂”读作偏导符号;它并不是另一种温度单位。
| 符号 / 英文 | 含义 | 本例单位 |
|---|---|---|
| T / scalar field | 平面温度场 | °C |
| x,y / coordinates | 向东、向北的距离 | m |
| ∂T/∂x / partial derivative | 向东变化率 | °C/m |
| ∇T / gradient | 两个变化率组成的梯度 | °C/m |
| δ / finite-difference step | 用来估计变化率的空间步长 | m |
手算:沿哪个方向升温最快
取 T(x,y)=10 + 0.002x + 0.001y。x、y 的单位是米,两个系数的单位为 °C/m。由函数直接得到梯度(gradient):
梯度方向是局部升温最快的方向,约为东偏北 26.6°。向东走 100 m 升高 0.2°C;沿梯度单位方向走 100 m,在这个线性场中升高约 0.2236°C。沿单位方向 d 的变化率是 ∇T·d,把之前的点积连接到了空间分析。
ts
const temperature = (x: number, y: number) => 10 + 0.002*x + 0.001*y
function gradient(x: number, y: number, deltaMetres: number) {
if (deltaMetres <= 0) throw new Error('差分步长必须为正')
return [
(temperature(x+deltaMetres, y) - temperature(x-deltaMetres, y))
/ (2*deltaMetres),
(temperature(x, y+deltaMetres) - temperature(x, y-deltaMetres))
/ (2*deltaMetres),
]
}
gradient(100, 200, 10) // 约[0.002,0.001],单位°C/m这是中心差分(central difference)。在离散网格边缘,左右样本可能不齐,需要边界策略;缺测和噪声也会影响差分。经纬度以度为单位时,直接做差得到的是“每度变化率”,不能当作“每米变化率”。
等值线与风的旋转:理解即可
等值线(contour / isoline)是满足 T(x,y)=c 的位置集合。在梯度非零且场光滑的地方,等值线与梯度垂直。沿等值线走温度不变,因此该方向与梯度点积为零。平坦区的梯度为零,不能据此定义唯一的等值线方向。
散度(divergence)∂u/∂x + ∂v/∂y 描述局部向外流出的趋势;二维旋度的垂直分量(vertical curl)∂v/∂x − ∂u/∂y 描述局部旋转趋势。两者单位都是 1/s。本式适用于同一平面米制坐标与相应分量;球面和曲线网格需要考虑几何。会画出涡旋不代表合成风场满足大气动力学方程。
自检:梯度与等值线
对 T=10+0.002x+0.001y,向 (1,−2) 的方向走时,温度是否改变?把网格间距从 100 m 改成 1000 m,有限差分的分母能否保持不变?
答案与理由
不改变:(0.002,0.001)·(1,−2)=0,这是等值线方向。分母必须随实际距离改变,否则导数的数值与单位解释都会错误。