1. 课程导入与问题定义

在工程实践中,我们经常面对这样一类问题:系统的结构形式已知,但其中若干关键参数无法直接测量,或者测量代价极高。例如,一台伺服电机的转动惯量与阻尼系数、一段供热管网的等效热阻与热容、一个电池包的内阻与极化电容、一架四旋翼的推力系数与阻力系数。这些参数决定了系统的动态行为,却往往藏在“输入—输出”的响应曲线背后。参数反演(parameter inversion)要解决的,正是由可观测的输入输出数据,反向推断不可直接观测的系统参数这一问题。

需要先厘清三个容易混淆的概念。参数辨识通常指在已知模型结构下,用数据拟合出参数值;参数反演更强调“由果推因”的逆问题属性,往往伴随不适定性(解不唯一、对噪声敏感);参数验证则是对反演结果的可信度作出判断——参数是否物理合理、是否在独立数据上复现了真实响应、是否对扰动稳健。三者构成一条完整链路:建模定结构 → 数据定参数 → 独立检验定可信度。本课程后续所有章节,都围绕这条链路展开。

核心挑战:为什么反演不是简单的“曲线拟合”

第一个挑战是不适定性。不同参数组合可能产生几乎相同的输出轨迹,这叫参数不可辨识。典型例子是一阶惯性系统 \(G(s)=K/(Ts+1)\):当输入为阶跃时,增益 \(K\) 由稳态值决定,时间常数 \(T\) 由上升段决定,二者尚可分离;但若输入变化极慢,输出几乎只反映 \(K\),\(T\) 的信息被“淹没”,此时反演出的 \(T\) 方差极大。这说明激励信号的设计本身就是反演问题的一部分。

第二个挑战是噪声与模型误差的放大。反演本质上是求逆运算,而求逆会放大高频噪声。对输出做差分估计速度、再由速度估计加速度,噪声会被逐级放大。因此实际工程中很少直接“硬求逆”,而是采用最小二乘、极大似然、贝叶斯推断、正则化等带约束或带先验的估计方式。

第三个挑战是可辨识性的先验判断。在采集数据之前,就应通过灵敏度分析判断哪些参数对输出影响显著、哪些参数彼此强相关。若两个参数在灵敏度意义上几乎共线,那么无论数据多长、噪声多小,都无法将它们分开,此时正确做法是固定其中一个或改用能激发差异的工况,而不是盲目增加数据量。

判断一个反演问题是否“值得做”,可以先问三句话:输出对目标参数是否敏感?目标参数之间是否可分离?现有传感器能否以足够带宽和精度记录响应?三问有一问为否,就应先改实验设计,而非改算法。

整体学习路径

下图给出本课程的知识主线:从问题定义出发,经建模与可辨识性分析、激励设计与数据采集、反演算法、验证与不确定性评估,最终落到典型工程场景的闭环应用。图中同时标出了各环节之间的反馈关系——验证不通过时,需要回到模型结构或激励设计,而不是只在算法层面调参。

动力系统参数反演与验证 · 知识主线 ① 问题定义 模型结构 · 待估参数 · 可观测量 ② 可辨识性分析 灵敏度 · 参数相关性 · 秩检验 ③ 激励与采集 激励信号 · 采样率 · 传感器带宽 ④ 反演算法 最小二乘 · 极大似然 · 正则化 ⑤ 参数估计结果 点估计 · 置信区间 · 残差 ⑥ 独立验证 交叉工况 · 残差白性 · 物理合理性 验证不通过:回到模型结构或激励设计 典型应用场景(同一套方法论,不同的物理载体) 机电伺服 惯量 · 阻尼 · 摩擦 热工管网 热阻 · 热容 · 时滞 电池储能 内阻 · 极化电容 · SOC 飞行器 推力系数 · 气动阻尼

一个可动手的最小示例

为了让抽象概念落地,考虑一个一阶热对象:加热功率 \(u(t)\) 为输入,温升 \(y(t)\) 为输出,模型为 \(T\dot y + y = K u\)。设真实参数为 \(K=2.5\ \mathrm{^\circ C/W}\)、\(T=40\ \mathrm{s}\),采样周期 \(1\ \mathrm{s}\),加入标准差 \(0.05\ \mathrm{^\circ C}\) 的测量噪声。若采用阶跃激励,可用稳态值估计 \(K\),用达到 63.2% 稳态值的时刻估计 \(T\)。下面是一段可直接运行的 Python 示例(数据为仿真生成,用于演示方法,非实测):

import numpy as np
rng = np.random.default_rng(7)
dt, N = 1.0, 300
K_true, T_true = 2.5, 40.0
u = np.ones(N)                      # 单位阶跃加热功率
y = np.zeros(N)
for k in range(1, N):               # 一阶系统离散化(前向欧拉)
    y[k] = y[k-1] + dt/T_true * (K_true*u[k-1] - y[k-1])
y_meas = y + rng.normal(0, 0.05, N)

K_hat = y_meas[-50:].mean() / u[-1]          # 稳态段均值估增益
idx = np.argmax(y_meas >= 0.632 * y_meas[-50:].mean())
T_hat = idx * dt                              # 63.2% 时刻估时间常数
print(f"K_hat={K_hat:.3f}, T_hat={T_hat:.1f}s")

典型输出约为 K_hat=2.48, T_hat=41.0s,与真值接近但不完全相等——这正是噪声与离散化带来的偏差。此时若换一组未参与估计的激励(例如方波或变功率序列)重新仿真,比较预测输出与测量输出的残差,若残差均值接近零、无显著趋势、且参数落在物理合理区间(如 \(T>0\)),才可认为反演结果通过验证。若残差呈现系统性偏差,则说明模型结构(例如忽略了散热非线性)需要修正,而非继续微调参数。

学习本课程后应具备的能力

  • 能针对给定物理对象写出含待估参数的动态模型,并说明各参数的物理意义与量纲;
  • 能在采数之前完成灵敏度与相关性分析,判断参数是否可辨识,并据此设计激励信号与采样方案;
  • 能选用合适的最小二乘、极大似然或正则化方法完成参数估计,并给出置信区间或后验分布;
  • 能用独立工况数据完成验证,区分“拟合得好”与“参数可信”两件事;
  • 能在验证失败时定位问题出在模型结构、激励设计还是算法选择,并给出修正路径。