3. 状态空间表达式的标准形式
好,咱们今天聊聊状态空间表达式的标准形式。说白了,就是连续时间系统的状态方程和输出方程到底长什么样。我刚开始学的时候,觉得这东西就是一堆矩阵在跳舞,后来做项目多了才发现——矩阵的维度一旦搞错,整个系统就崩了。
3.1 连续时间系统的状态方程
先看状态方程。对于一个连续时间系统,状态方程的标准形式是:
ẋ(t) = A x(t) + B u(t)
这里每个符号都有明确的物理意义:
- x(t):状态向量,维度是 n×1。n 就是系统的阶数,也是状态变量的个数。
- ẋ(t):状态向量的导数,维度也是 n×1。说白了就是状态的变化率。
- u(t):输入向量,维度是 m×1。m 是输入信号的个数。
- A:系统矩阵,维度是 n×n。它描述了状态之间的耦合关系。
- B:输入矩阵,维度是 n×m。它描述了输入如何影响状态的变化。
嗯,这里要注意:A 矩阵一定是方阵。为什么?因为状态变量的个数是 n,每个状态的变化率都跟所有状态有关,所以必须是 n×n。我在项目中遇到过有人把 A 矩阵的维度搞错了,结果仿真出来的系统完全不对,查了半天才发现是矩阵乘法维度不匹配。
核心要点:状态方程描述的是「状态如何随时间变化」。它是一阶微分方程组,矩阵形式让表达更紧凑。
3.2 输出方程
输出方程的标准形式是:
y(t) = C x(t) + D u(t)
各符号的含义:
- y(t):输出向量,维度是 p×1。p 是输出信号的个数。
- C:输出矩阵,维度是 p×n。它把状态映射到输出。
- D:直接传递矩阵,维度是 p×m。它描述了输入直接到输出的通路。
你想想看,为什么需要输出方程?因为状态变量不一定都能直接测量。比如一个电机系统,状态可能是电流和转速,但你能测到的可能只有转速。输出方程就是干这个的——从状态中提取出你关心的量。
个人经验:我习惯先确定输出变量的个数 p,再反推 C 矩阵的维度。这样不容易出错。曾经有个项目,输出是 3 个传感器信号,状态是 5 个,C 矩阵就是 3×5。这个逻辑很直接。
3.3 矩阵维度分析
维度分析是状态空间建模的基石。我把它整理成一张表,你对照着看:
| 矩阵/向量 | 符号 | 维度 | 说明 |
|---|---|---|---|
| 状态向量 | x(t) | n×1 | n 个状态变量 |
| 状态导数 | ẋ(t) | n×1 | 与状态向量维度一致 |
| 输入向量 | u(t) | m×1 | m 个输入信号 |
| 输出向量 | y(t) | p×1 | p 个输出信号 |
| 系统矩阵 | A | n×n | 方阵,描述状态耦合 |
| 输入矩阵 | B | n×m | 输入对状态的影响 |
| 输出矩阵 | C | p×n | 状态到输出的映射 |
| 直接传递矩阵 | D | p×m | 输入到输出的直通 |
维度匹配的规则很简单:矩阵乘法必须满足「左列数等于右行数」。比如 A 是 n×n,x 是 n×1,A·x 就是 n×1,跟 ẋ 的维度一致。B 是 n×m,u 是 m×1,B·u 也是 n×1。加起来没问题。
避坑指南:我曾经在写代码时把 B 矩阵的维度写成了 m×n,结果矩阵乘法直接报错。检查了半小时才发现是维度顺序搞反了。记住:B 是 n×m,不是 m×n。这个顺序跟你的直觉可能相反,但数学上就是这么定义的。
3.4 知识体系结构图
下面这张图把状态空间表达式的核心逻辑串起来了。我建议你多看几遍,把矩阵维度的对应关系刻在脑子里。
这张图把状态方程和输出方程并列展示,下面列出了四个矩阵的维度。你注意看,A 和 B 服务于状态方程,C 和 D 服务于输出方程。它们通过状态向量 x(t) 连接在一起。
3.5 一个简单的例子
拿一个 RLC 电路来说。状态变量选电容电压 v_c 和电感电流 i_L,所以 n=2。输入是电压源 v_s,m=1。输出是电容电压 v_c,p=1。
那么:
- x(t) = [v_c; i_L],2×1
- u(t) = [v_s],1×1
- y(t) = [v_c],1×1
- A 是 2×2,B 是 2×1,C 是 1×2,D 是 1×1(通常为 0)
你看,维度完全匹配。这就是标准形式的力量——你不需要记住每个方程的具体系数,只要维度对了,结构就对了。
总结一下:状态空间表达式的标准形式,核心就是四个矩阵和两个方程。矩阵维度决定了系统的规模,也决定了你能控制什么、观测什么。搞清楚了维度,建模就成功了一半。