3. 连续系统建模:微分方程建模、传递函数模块、状态空间模块
各位好,咱们今天聊聊连续系统建模。说实话,这是整个控制仿真里最基础、也最核心的一块。你想想看,现实世界里的物理系统——电机、弹簧、热力系统——哪个不是连续的?所以这块搞明白了,后面那些离散系统、非线性系统,理解起来就顺了。
我个人习惯把连续系统建模分成三种方式:微分方程、传递函数、状态空间。这三种方式其实描述的是同一个系统,只是看问题的角度不同。嗯,咱们一个一个说。
3.1 微分方程建模
微分方程是描述系统最原始的方式。说白了,就是用数学语言把物理规律写下来。比如一个简单的RC电路,电容两端的电压和电流的关系,就是一个一阶微分方程。
在Simulink里怎么搭?我一般用Integrator模块和Gain模块组合。举个例子,假设系统是:
dy/dt = -2y + 3u
你只需要一个积分器,输入是-2y + 3u,输出就是y。就这么简单。但要注意,初始条件一定要设对。我在项目中遇到过好几次,仿真结果跟实际对不上,查了半天发现是积分器的初始值没设成零。
3.2 传递函数模块
传递函数是频域视角。我个人觉得,传递函数最大的好处是直观——你一眼就能看出系统的极点和零点在哪,稳定性怎么样。
Simulink里用Transfer Fcn模块。比如一个二阶系统:
G(s) = 5 / (s² + 2s + 5)
在模块参数里填:
- Numerator: [5]
- Denominator: [1 2 5]
搞定。但这里有个坑——分子分母的维数必须匹配。我曾经有个学生,把分子写成[0 5],结果仿真出来一条直线,急得满头汗。其实分母比分子高一阶,系统才是因果的。
step命令在MATLAB命令行里跑一下,看看阶跃响应是不是你预期的样子。确认无误再放到Simulink里。
3.3 状态空间模块
状态空间是现代控制理论的基础。它用一组一阶微分方程来描述系统,适合多输入多输出的情况。
Simulink里用State-Space模块。你需要填四个矩阵:A、B、C、D。比如一个简单的质量-弹簧-阻尼系统:
A = [0 1; -k/m -c/m]
B = [0; 1/m]
C = [1 0]
D = 0
这里m是质量,k是弹簧刚度,c是阻尼系数。我建议你先把这些矩阵在MATLAB工作区里定义好,然后在模块里直接填变量名。这样改参数方便,不用每次都打开模块参数对话框。
为什么要用状态空间?因为它能把高阶系统拆成一阶方程组,数值求解更稳定。我在做飞行器仿真时,系统阶数高达十几阶,用传递函数根本没法处理,状态空间就轻松多了。
3.4 三种方式的对比
我整理了一个表格,方便你对比:
| 建模方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 微分方程 | 简单系统、教学演示 | 物理意义清晰 | 高阶系统复杂 |
| 传递函数 | SISO系统、频域分析 | 直观、易分析稳定性 | MIMO系统处理困难 |
| 状态空间 | MIMO系统、现代控制 | 适合计算机求解 | 矩阵维度高时易出错 |
3.5 知识体系结构图
下面这张图,是我用SVG画的,展示了本章的知识脉络。你可以把它当作一个导航图,随时回来对照。
嗯,这张图把三种建模方式的关系和关键点都串起来了。你保存好,以后做项目时拿出来对照,思路会清晰很多。
好了,连续系统建模就聊到这儿。三种方式各有千秋,关键是根据你的系统特点选对工具。下一章咱们会讲离散系统,到时候你会发现,很多思路是相通的。