第三章 数学模型基础:传递函数、状态空间方程、零极点模型与转换方法
各位同学,咱们今天聊聊控制算法的“根”——数学模型。说实话,我干了这么多年控制工程,最深的体会就是:模型建对了,仿真就成功了一半。模型建错了,后面再怎么调参数都是白费力气。
这一章,我会把四种最常用的数学模型讲透:传递函数、状态空间方程、零极点模型,还有它们之间的转换方法。嗯,都是硬核干货,咱们一个一个来。
3.1 传递函数——经典控制理论的“老大哥”
传递函数,说白了就是系统输出与输入的拉普拉斯变换之比。你想想看,一个系统再复杂,只要你能写出它的微分方程,拉普拉斯变换一搞,就变成了一个有理分式。
一般形式长这样:
G(s) = Y(s) / U(s) = (b_m s^m + b_{m-1} s^{m-1} + ... + b_0) / (a_n s^n + a_{n-1} s^{n-1} + ... + a_0)
这里n≥m,系统才是物理可实现的。我刚开始做项目时,有次写了个n<m的传递函数,仿真跑起来直接发散,查了半天才发现是分母阶次搞反了。这种低级错误,大家千万别犯。
传递函数的优点:直观,频域分析特别方便。波特图、奈奎斯特图,都是基于传递函数画的。
缺点:只能描述单输入单输出(SISO)系统。多输入多输出(MIMO)?那就得请出状态空间方程了。
tf(num, den) 就能快速建立传递函数模型。num是分子系数向量,den是分母系数向量,按s的降幂排列。
3.2 状态空间方程——现代控制理论的“王牌”
状态空间方程,说白了就是把高阶微分方程拆成一堆一阶微分方程。为什么要这么干?因为一阶微分方程好处理啊,计算机算起来也快。
标准形式:
ẋ = Ax + Bu
y = Cx + Du
其中x是状态向量,u是输入,y是输出。A、B、C、D就是系统矩阵。
我个人习惯用状态空间方程做多变量系统。记得有次做无人机姿态控制,四个旋翼,六个自由度,用传递函数写?那得写多少个传递函数啊!用状态空间方程,一个矩阵就搞定了。
状态空间方程的优势:
- 能处理MIMO系统
- 能描述系统内部状态(不仅仅是输入输出关系)
- 时变系统、非线性系统也能扩展
3.3 零极点模型——系统特性的“透视镜”
零极点模型,就是把传递函数分解成零点和极点的形式:
G(s) = K * (s - z_1)(s - z_2)...(s - z_m) / (s - p_1)(s - p_2)...(s - p_n)
为什么零极点模型这么重要?因为系统的稳定性、响应速度、振荡特性,全看极点在复平面上的位置。
- 极点在左半平面 → 系统稳定
- 极点在右半平面 → 系统不稳定
- 极点离虚轴越远 → 响应越快
- 零点影响系统的动态响应形状
我做过一个电机控制项目,系统老是振荡。用波特图看半天没发现问题,后来画出零极点图,发现有一对共轭极点离虚轴特别近。嗯,阻尼比太小了。加了个超前校正,问题就解决了。
3.4 模型之间的转换方法——打通“任督二脉”
四种模型不是孤立的,它们可以互相转换。我经常说,搞控制的人,必须熟练掌握这些转换,就像厨师必须会切菜一样。
3.4.1 传递函数 → 状态空间方程
方法很多,最常用的是可控标准型和可观标准型。
以可控标准型为例,假设传递函数为:
G(s) = (b_2 s^2 + b_1 s + b_0) / (s^3 + a_2 s^2 + a_1 s + a_0)
则状态空间方程为:
A = [0 1 0; 0 0 1; -a_0 -a_1 -a_2]
B = [0; 0; 1]
C = [b_0 b_1 b_2]
D = 0
在MATLAB里,一行代码搞定:[A, B, C, D] = tf2ss(num, den)。但我建议你至少手动推导一次,理解背后的原理。
3.4.2 状态空间方程 → 传递函数
公式很简单:
G(s) = C(sI - A)^{-1}B + D
MATLAB里用 [num, den] = ss2tf(A, B, C, D)。注意,对于MIMO系统,你需要指定输出和输入的索引。
3.4.3 传递函数 ↔ 零极点模型
传递函数转零极点,就是求分子多项式的根(零点)和分母多项式的根(极点)。
MATLAB里:
[z, p, k] = tf2zp(num, den)传递函数转零极点[num, den] = zp2tf(z, p, k)零极点转传递函数
3.4.4 状态空间方程 ↔ 零极点模型
这个稍微复杂一点。状态空间方程转零极点,本质上是求矩阵A的特征值(极点)和系统的传输零点。
MATLAB里:
[z, p, k] = ss2zp(A, B, C, D)[A, B, C, D] = zp2ss(z, p, k)
ss2zp 转换一个高阶系统,结果发现极点数比状态数少。查了半天,原来是系统有不可观或不可控的模态。遇到这种情况,先做能控性能观性分析,别急着转换。
3.5 四种模型的对比与选择
| 模型类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 传递函数 | SISO系统、频域分析 | 直观、频域工具丰富 | 不能处理MIMO |
| 状态空间方程 | MIMO系统、现代控制 | 通用性强、可描述内部状态 | 矩阵运算复杂 |
| 零极点模型 | 稳定性分析、根轨迹 | 直接反映系统特性 | 高阶系统计算量大 |
我个人建议:做经典控制(PID、超前滞后校正)用传递函数;做现代控制(LQR、卡尔曼滤波)用状态空间方程;做系统分析(稳定性、响应特性)用零极点模型。三者灵活切换,才是高手风范。
3.6 实战小例子
咱们来个简单的二阶系统:
G(s) = 5 / (s^2 + 2s + 5)
这个系统的自然频率ω_n = √5 ≈ 2.236 rad/s,阻尼比ζ = 2/(2×2.236) ≈ 0.447。嗯,欠阻尼系统,阶跃响应会有超调。
转换成状态空间方程(可控标准型):
A = [0 1; -5 -2]
B = [0; 1]
C = [5 0]
D = 0
零极点模型:极点p = -1 ± 2j,没有零点。你看,极点实部为负,系统稳定;虚部不为零,会有振荡。
三种模型描述的是同一个系统,只是看问题的角度不同。就像一个人,你可以从正面看、侧面看、上面看,但人还是那个人。
好了,这一章就到这里。有问题随时问我,咱们下章见。