率定曲线拟合:水位到流量的换算
水位站的流量不是测出来的,是查"率定曲线"得到的。但率定曲线怎么拟合?幂律还是多项式?外推时怎么处理?这是水文数据处理的隐藏环节。
率定曲线的物理基础
河道流量 Q 与水位 h 的关系:
- Q = A × v(过水面积 × 流速)
- 流速 v 受水位、坡度、糙率影响(曼宁公式 v = (1/n) × R^(2/3) × S^(1/2))
- A 随 h 增大而增大(断面形状决定)
对天然河道,Q 与 h 的关系近似幂律:
- Q = a × (h - h0)^b
- h0 是"零流量水位"(断流水位)
- a, b 是拟合参数,b 通常 1.5~2.5
拟合方法
方法一:幂律拟合
数据取对数后线性回归:
- ln(Q) = ln(a) + b × ln(h - h0)
参数 a、b、h0 都要拟合。h0 不易直接确定,需要试错或物理意义(河床最低点)。
方法二:多项式拟合
Q = a0 + a1 × h + a2 × h² + ...
多项式拟合灵活,但外推时容易发散——高次多项式在数据范围外迅速偏离物理意义。
方法三:分段拟合
把水位范围分为低水、中水、高水三段,各段独立拟合:
- 低水段:幂律,h 接近 h0 时 Q 趋于 0
- 中水段:幂律或多项式
- 高水段:幂律或线性(漫滩后线性化)
水文业务中最常用幂律分段拟合。
实战代码(Python)
```python import numpy as np from scipy.optimize import curve_fit
def rating_curve(h, a, b, h0): """幂律率定曲线 Q = a * (h - h0)^b""" return a * np.power(h - h0, b)
def fit_rating(water_levels, discharges, h0_init=None): """拟合率定曲线
water_levels: 实测水位 (m) discharges: 实测流量 (m³/s) h0_init: 零流量水位初值(可选,不提供则用最低水位 - 0.5) """ if h0_init is None: h0_init = np.min(water_levels) - 0.5
# 用对数变换估算初值 h_eff = water_levels - h0_init log_h = np.log(h_eff) log_Q = np.log(discharges) slope, intercept = np.polyfit(log_h, log_Q, 1) a_init = np.exp(intercept) b_init = slope
# 非线性拟合 popt, pcov = curve_fit( rating_curve, water_levels, discharges, p0=[a_init, b_init, h0_init], bounds=([0, 1, -np.inf], [np.inf, 5, np.max(water_levels)]) )
return popt # (a, b, h0)
模拟:实测数据
h = np.array([1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0]) Q = np.array([0.5, 1.2, 2.5, 4.5, 7.2, 10.8, 15.2, 20.5, 27.0]) a, b, h0 = fit_rating(h, Q) print(f"率定曲线: Q = {a:.3f} * (h - {h0:.3f})^{b:.3f}") print(f"零流量水位 h0 = {h0:.3f} m")
验证
h_test = np.array([2.2, 3.8, 4.8]) Q_pred = rating_curve(h_test, a, b, h0) print(f"预测流量: {Q_pred}") ```
外推的风险
率定曲线的最大问题是实测数据范围有限:
- 平水期实测集中在低水段
- 大洪水实测少(人员难到现场、设备量程不够)
- 据率定曲线外推到百年洪水,误差可能 ±30%
外推的合理做法
- 物理约束:高水段不能偏离曼宁公式
- 断面模型:用断面地形 + 曼宁公式做高水段外推
- 相似流域类比:用相邻流域的高水段率定关系
不要纯数学外推——多项式在高水段可能给出负流量或过高流量。
率定曲线的时效性
河道会变化(冲淤、水草、人工改造),率定曲线不是一次定终身:
- 稳定河床:1~2 年复测
- 易冲淤河床:每场大洪水后复测
- 施工期间:每季度复测
某站"率定曲线 5 年未复测"的流量数据,洪水期误差可能 ±30%——这是水文数据"看似完整实则不准"的典型。
一个被忽视的:h0 的稳定性
零流量水位 h0 不是常数:
- 河床淤积:h0 上升
- 河床冲刷:h0 下降
- 拦河坝建设:h0 突变
每次复测率定曲线,h0 也要重新拟合。固定 h0 拟合 a、b 会让曲线偏离实际。
数据质量
率定数据的来源:
- 流速仪测流:传统方法,人工操作,精度 ±5~10%
- ADCP 走航测流:现代方法,精度 ±3~5%
- 超声波时差法:固定式,连续测,精度 ±3~5%
拟合时要用各数据点的不确定度加权(精度高的权重大)。很多业务系统等权拟合,精度低的数据点会拉偏整条曲线。
结语
率定曲线是水文站的"核心算法",但常被简化为"调个拟合函数"。幂律分段拟合 + h0 重新估计 + 物理外推约束 + 周期复测,是水文数据处理的稳健配置。看似"完整"的流量数据,如果率定曲线 5 年未复测,洪水期可信度可能远低于宣称。