第三章 数学模型基础:传递函数、状态空间方程、零极点模型与转换方法

各位同学,咱们今天聊聊控制算法的“根”——数学模型。说实话,我干了这么多年控制工程,最深的体会就是:模型建对了,仿真就成功了一半。模型建错了,后面再怎么调参数都是白费力气。

这一章,我会把四种最常用的数学模型讲透:传递函数、状态空间方程、零极点模型,还有它们之间的转换方法。嗯,都是硬核干货,咱们一个一个来。

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)?那就得请出状态空间方程了。

我的小技巧:在MATLAB里,用 tf(num, den) 就能快速建立传递函数模型。num是分子系数向量,den是分母系数向量,按s的降幂排列。

3.2 状态空间方程——现代控制理论的“王牌”

状态空间方程,说白了就是把高阶微分方程拆成一堆一阶微分方程。为什么要这么干?因为一阶微分方程好处理啊,计算机算起来也快。

标准形式:

ẋ = Ax + Bu
y = Cx + Du

其中x是状态向量,u是输入,y是输出。A、B、C、D就是系统矩阵。

我个人习惯用状态空间方程做多变量系统。记得有次做无人机姿态控制,四个旋翼,六个自由度,用传递函数写?那得写多少个传递函数啊!用状态空间方程,一个矩阵就搞定了。

状态空间方程的优势

  • 能处理MIMO系统
  • 能描述系统内部状态(不仅仅是输入输出关系)
  • 时变系统、非线性系统也能扩展
注意:状态变量的选择不是唯一的。同一个物理系统,你可以选不同的状态变量,得到不同的A、B、C、D矩阵。但输入输出关系是唯一的。我曾经在这个坑里栽过跟头——选了不恰当的状态变量,导致矩阵条件数很差,仿真结果全是噪声。

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,没有零点。你看,极点实部为负,系统稳定;虚部不为零,会有振荡。

三种模型描述的是同一个系统,只是看问题的角度不同。就像一个人,你可以从正面看、侧面看、上面看,但人还是那个人。

总结一下:数学模型是控制算法仿真的基石。传递函数、状态空间方程、零极点模型,各有各的用处。熟练掌握它们之间的转换,你就能在时域和频域之间自由穿梭。下一章,咱们会基于这些模型,开始做仿真验证。到时候你就知道,今天学的这些有多重要了。

好了,这一章就到这里。有问题随时问我,咱们下章见。