4. 由微分方程建立状态空间模型:高阶微分方程到一阶微分方程组的转换
好,咱们进入正题。前面几章我们聊了状态空间的基本概念,今天要啃的这块骨头,是很多初学者觉得绕的地方——怎么把一个高阶微分方程,变成一阶微分方程组?
说白了,这就是状态空间建模的“翻译”过程。你想想看,实际物理系统往往用高阶微分方程描述,但状态空间法只认一阶微分方程组。怎么办?硬转。
4.1 为什么非要转成一阶?
我刚开始学控制时也有这个疑问。后来在做一个电机位置伺服项目时,系统模型是个三阶微分方程,我想用状态反馈设计控制器,结果发现现代控制理论的工具——能控性、能观性、极点配置——全都建立在状态空间模型上。你不转,就没法用这些工具。
另外,数值仿真也是个现实问题。MATLAB的ode45、Python的solve_ivp,这些求解器都只接受一阶微分方程组。你给它们扔一个三阶方程,它们不认。
核心思想:引入新的状态变量,把高阶导数降阶。每降一阶,就多一个状态变量。
4.2 标准转换方法
假设我们有一个n阶线性微分方程:
y^(n) + a₁y^(n-1) + ... + aₙ₋₁y' + aₙy = b₀u^(n) + b₁u^(n-1) + ... + bₙu
嗯,这里要注意,方程右边可能也包含输入u的高阶导数。这种情况在实际系统中很常见,比如弹簧阻尼系统,外力可能直接作用在加速度上。
我的做法是分两步走:
- 定义状态变量:令 x₁ = y, x₂ = y', x₃ = y'', ..., xₙ = y^(n-1)
- 写出状态方程:利用原方程的最高阶导数,表达 xₙ'
举个例子,一个二阶系统:
y'' + 3y' + 2y = u
定义状态:
x₁ = y
x₂ = y'
那么:
x₁' = x₂
x₂' = y'' = -3y' - 2y + u = -3x₂ - 2x₁ + u
写成矩阵形式:
[x₁'] [0 1] [x₁] [0]
[x₂'] = [-2 -3] [x₂] + [1] u
y = [1 0] [x₁]
[x₂]
你看,就这么简单。但实际项目中,我遇到过方程右边有导数项的情况,那就得用另一种套路了。
4.3 能控标准型
当系统方程为:
y^(n) + a₁y^(n-1) + ... + aₙy = b₀u
(右边只有u,没有u的导数)
这时候,能控标准型是最自然的表达方式。我个人习惯把它叫做“直接法”,因为状态变量就是输出及其各阶导数。
能控标准型的矩阵形式:
[0 1 0 ... 0] [0]
[0 0 1 ... 0] [0]
A_c = [ ... ...] B_c = [ ... ]
[0 0 0 ... 1] [0]
[-aₙ -aₙ₋₁ ... -a₁] [1]
C_c = [b₀ 0 0 ... 0]
我的经验:能控标准型的A矩阵最后一行就是原方程系数的负值,B矩阵最后一个是1。这个结构非常规整,写代码时可以直接套模板。我在做飞行器姿态控制时,就是用这个模板快速搭建了六自由度模型。
4.4 能观标准型
能观标准型是能控标准型的“对偶”。如果你把能控标准型的A、B、C矩阵转置一下,再交换B和C的角色,就得到了能观标准型。
它的形式:
[0 0 ... 0 -aₙ] [b₀]
[1 0 ... 0 -aₙ₋₁] [0 ]
A_o = [0 1 ... 0 ... ] B_o = [ ... ]
[ ... ... ] [0 ]
[0 0 ... 1 -a₁ ] [0 ]
C_o = [0 0 ... 0 1]
为什么要搞两种标准型?
我曾经在一个传感器故障诊断项目里吃过亏。当时用能控标准型建模,设计观测器时发现系统不可观。后来换成能观标准型,一眼就看出哪个状态观测不到。说白了,能观标准型把观测性问题摆在明面上。
注意:能控标准型和能观标准型不是互斥的。一个系统可以同时是能控标准型和能观标准型,但通常我们根据设计目标选择。做控制器设计用能控标准型,做观测器设计用能观标准型。
4.5 含输入导数项的转换
这是很多教材一笔带过,但实际项目中经常遇到的情况。比如:
y'' + 3y' + 2y = u' + 2u
这时候不能直接定义x₁=y, x₂=y'了,因为状态方程里会出现u',这不是我们想要的。
我的做法是引入辅助变量。令:
x₁ = y - β₀u
x₂ = y' - β₀u' - β₁u
其中β系数通过匹配原方程得到。对于n阶系统,有通用的递推公式:
β₀ = b₀
β₁ = b₁ - a₁β₀
β₂ = b₂ - a₁β₁ - a₂β₀
...
嗯,这个公式看起来有点繁琐,但写程序时用循环实现很方便。我在做液压伺服系统建模时,就用这个办法处理了油液压缩性带来的高阶导数项。
4.6 知识体系总览
下面这张图是我自己整理的,把今天讲的内容串起来:
4.7 实际项目中的选择建议
| 场景 | 推荐标准型 | 原因 |
|---|---|---|
| 状态反馈控制器设计 | 能控标准型 | 能控性矩阵直接可见,极点配置方便 |
| 状态观测器设计 | 能观标准型 | 能观性矩阵结构清晰,便于判断 |
| 系统仿真 | 能控标准型 | 状态变量物理意义明确,调试方便 |
| 故障诊断 | 能观标准型 | 残差生成和隔离更容易实现 |
最后说一句,别被这些标准型的名字吓到。你想想看,它们本质上就是同一个系统的不同“坐标系”表达。就像同一个地点,你可以用经纬度描述,也可以用UTM坐标描述,位置没变,只是看问题的角度变了。
我在带新人时经常说:先动手算一个二阶系统的两种标准型,感受一下它们的区别。纸上得来终觉浅,绝知此事要躬行。
公众号:蓝海资料掘金营,微信deep3321