☰
从传递函数到根轨迹:掌握自动控制系统稳定性分析的底层逻辑
2026/10/23 18:04:32 网站建设 项目流程

简介:面向控制理论初学者、考研备考生或即将接触控制方向的研究生,这份Dr.CAN《自动控制原理》13期完整课程笔记,浓缩了B站硬核博主关于传递函数、开环与闭环系统、反馈控制、稳定性分析、根轨迹、终值定理与稳态误差、PID控制器等核心专题的讲解。笔记基于GoodNotes手写并辅以QQ截屏,附有推导过程与示意图,帮助理解极点位置如何决定系统稳定性、如何通过根轨迹与PID参数设计改善动态性能。适合不愿边看视频边截屏记录、想要直接对照整理内容复习的读者,也适用于期末速查与复试前知识拾遗。整个包为单份PDF,大小12.27MB,章节连贯,可按专题快速翻阅。目前已有847人学习下载,热度较高,也可为后续学习卡尔曼滤波、模型预测控制(MPC)与最优控制夯实基础。

1. 控制原理不是玄学:为什么系统稳不稳,跟输入长什么样无关

一个反直觉的结论要先放在最前面:一个自动控制系统稳不稳定,跟你给它多大的输入、输入是什么形状,几乎没有关系。单位阶跃按下去,系统是平缓收敛还是原地发散,在接通信号之前就已经被写死在它的传递函数分母里了。控制原理里最容易让新手跳过的一环,就是极点这个"内置性格"——它决定了扰动消失之后,系统能不能自己回到原来的位置。这套课程资源的十三期笔记里反复追问过一句:为什么稳定就等价于极点全在复平面左半边?想通这一句,后面所有开环闭环、反馈控制、PID、根轨迹的讨论,才有共同的锚点。这份笔记的推导顺序,正是从这条主线展开的。

2. 传递函数与极点:为什么输出的"性格"只由分母决定

2.1 拉普拉斯变换:把微分方程变成一张除法图

线性时不变系统的动态行为,通常写成一堆微分方程。微分方程难就难在"同时含位置、速度、加速度"。拉普拉斯变换干的第一件事,是把求导变成乘法:时域里的 dy/dt 对应 s 域的 s·Y(s),初始条件为零时,整条微分方程链就塌缩成一个纯代数公式。于是输入端和输出端的关系可以写成

Y(s) = G(s) · U(s)

这里的 G(s) 就是传递函数,它只描述系统自己;U(s) 描述外界想怎么提问。笔记里开环系统那一讲给出的信号流图,本质就是"输入过一个框,输出等于输入乘框里的代数式",而反馈只是把输出再接回去参与一次减法。这里值得深挖一层:为什么微分方程变代数方程就能成立?因为 e^{st} 是线性时不变系统的特征函数——系统对它的响应还是同一个 e^{st} 乘一个复数增益。这就是传递函数存在的数学根基,也是后面一切"用算子代替微积分"操作合法性的来源。

import sympy as sp s, t = sp.symbols('s t') G = 2 / ((s + 1) * (s + 3)) # 一个二阶惯性系统的传递函数 Y = G / s # 输入单位阶跃 1/s,求输出响应 sp.factor(sp.apart(Y, s)) # 部分分式展开

这行代码做的是部分分式展开。展开结果形如几项分母为一次式的分式之和,比如 2/(3s) - 1/(s+1) + 1/(3(s+3))。每一项反变换回时域,就是一个指数函数。注意关键:第一项的极点 0 是输入带来的(阶跃信号本身是 1/s),后两项的极点 -1、-3 全是 G(s) 分母的根。输入只在 s=0 处"放了一个极点",系统自己身上的极点一个没少地出现在输出里。这就是传递函数的性格:你把任何信号灌进去,系统都会按自己的腔调把它重唱一遍——腔调由分母定,唱多响由分子和输入一起定。

2.2 极点与模态:分母为零的地方,藏着系统自带的振动模式

为什么偏偏要看分母?因为部分分式展开后的每一项,时域形态都是 A_i · e^{p_i t},其中 p_i 是分母等于零的根,也就是极点;A_i 是由分子和输入共同决定的常数。e^{p_i t} 这个指数项就是系统的"模态"——它不依赖外界,是齐次方程的解,也就是"没人推它它也在演"的部分。系统有多少个极点,就至少有多少个这样的指数模态;虚部决定振荡频率,实部决定每个模态是越来越大还是越来越小。

二阶欠阻尼系统最好体会这一点:一对共轭极点写成 -σω_n ± jω_d,ω_d 就是振荡频率,σ 决定衰减快慢,二者组合成超调量和调节时间。极点往左挪,衰减变快、调节时间变短;极点带上虚部,响应就多出振荡成分。笔记里那句"最终输出里含有分母的极点"说的正是这件事:无论你输入什么,只要系统是线性的,输出里那些瞬态项必然由分母的根生成。分子在这里唯一能做的事,是调整每一项前面的系数 A_i——分子改的是音量,分母改的是音色。

2.3 分子只发入场券:零点改变权重,不改变生死

有一个常见误用必须点破:有人看到仿真输出爆炸,第一反应是"输入给得太大了"。其实输入只决定振幅,决定爆不爆的是极点的实部符号。分子上的零点确实有用:零点靠近某个极点时,那个模态的权重 A_i 会变得极小,输出里几乎看不见它,这就是"零极点抵消"现象的原理。但零点改变的是"哪些模态被激得响",不改变"系统到底有哪些模态"。所以任何稳定性分析的第一步永远是看分母根的位置,分子先放一边,等做性能分析时再回来讨论零点怎么影响超调。

注意:零极点抵消可以在数学上约分,但物理上那个模态照样存在。实际系统的参数一漂移,零点挪开,被约掉的模态立刻原形毕露。课堂上允许约分,工程上要留个心眼。

3. 稳定性分析:左半平面、劳斯判据与终值定理原来是同一件事

3.1 s = σ + jω:极点的横坐标是生死线

把极点写成 s = σ + jω,e^{st} 就变成 e^{σt}·e^{jωt}。e^{jωt} 是等幅旋转,真正决定振幅走向的是 σ。于是极点位置与时域行为有了严格的一一对应:σ 小于 0,指数衰减,振荡也会被压住;σ 等于 0,系统落在虚轴上,进入等幅振荡或不收敛的临界状态;σ 大于 0,指数发散,哪怕一开始数值很小,迟早穿破屏幕。

极点位置实部 σ时域形态
左半平面σ < 0指数衰减,或衰减振荡收敛
虚轴上σ = 0等幅振荡,或保持恒值回不去
右半平面σ > 0指数发散,或发散振荡

笔记里用单摆讲这事:单摆放在最低点,拿手一拨,摆着摆着停回原位,对应一对左半平面共轭极点;把单摆倒过来立在顶点,稍微偏一点就直接倒下去,对应右半平面极点。两个平衡位置都"存在",但只有左半平面那个是稳定平衡。系统通常有一堆极点,只要其中任何一枚落在右半平面,整体就宣告不稳定——这是木桶效应,不需要等仿真炸穿屏幕。反馈控制干的第一件正事,就是想办法把可能出现在右半平面的极点拽回左半。

3.2 劳斯判据:不解特征方程也能判断横坐标符号

判断一堆极点是否全在左半,最笨的办法是解特征方程。三阶以上没有通用求根公式,每次解都不现实,于是有了劳斯判据:把特征方程系数排成一张三角表,表的第一列如果符号全部相同,所有极点就都在左半平面;第一列符号变化几次,右半平面就有几个极点。它绕开了"求出具体的根"这个费力问题,只数"横坐标符号翻了几次车"。

以特征方程 s³ + s² + 2s + 8 为例,劳斯表第一列依次是 1、1、−6、8:出现 1→−6 和 −6→8 两次变号,说明该系统有两个右半平面极点。不用真的解三次方程,结论已经出来。和"所有系数必须为正"这种必要条件不同,劳斯表第一列不变号是充要条件,这也是为什么教材敢把它当稳定性判据而不是经验法则。工程里我一般这么用它:先花十秒排劳斯表,确认没有右半极点,再放心去画根轨迹、调参数;如果劳斯表这关都不过,后面所有时域分析都是白做。

3.3 终值定理与稳态误差:误差是系统的结构税

终值定理说的是,如果极限存在,稳态值等于 lim_{s→0} s·Y(s)。"极限存在"四个字最容易丢:无阻尼振荡系统永远在摆,谈不上稳态,此时硬套公式会算出个假值。笔记里专门举了这个矛盾——系统在无限振动,理论上回不到某个固定数,可终值公式却能给出一位数,二者冲突。问题就出在 s·Y(s) 有一对虚轴极点,前提不成立。

稳态误差是同一个框架的延伸。设误差 E(s) = R(s) / (1 + G(s)H(s)),套终值定理会发现:开环传递函数里含几个积分器(s=0 的极点),决定了系统对阶跃、斜坡这类典型输入的误差等级。0 型系统对阶跃有固定比例误差,怎么调比例增益都消不掉;1 型系统开环含一个积分器,对阶跃输入误差归零,但对斜坡输入还有常数误差。读到这里你应该明白:误差不是控制器"不够努力",而是系统结构里没有 s=0 的极点来"承接"那一类输入。要消除某类输入的稳态误差,唯一的路是往回路里注入对应的积分环节——这正是接下来 PID 控制中积分项的动机。

4. PID 控制器的底层分工:比例、积分、微分各自在补什么洞

4.1 比例控制 P:能加速,但调不到目标

拿一阶惯性对象 G(s) = K/(Ts+1) 试比例控制 C(s) = Kp。闭环传递函数变成 KpK/(Ts + 1 + KpK),极点从 −1/T 挪到 −(1+KpK)/T。Kp 越大,极点越靠左,响应越快——比例控制的全部本事就是这一点:把极点往左推。但看稳态,阶跃输入下的终值是 KpK/(1+KpK),永远小于 1,误差 1/(1+KpK) 只在 Kp 无穷大时才归零。所以比例控制改的是"快慢",不是"准不准";系统类型没变,结构性误差就还在。这也是为什么单靠 P 旋钮调不出好性能:它把响应调快了,但目标值永远差一截,追求零误差只能把 Kp 调大,调大又带来噪声和超调。

4.2 积分控制 I:用"升阶"换稳态精度

PI 控制 C(s) = Kp + Ki/s 引入了一个位于 s=0 的开环极点。这一步的本质,是把系统类型从 0 型抬成 1 型:阶跃输入在 s=0 的极点,被误差传递函数分母里的积分环节"顶掉",稳态误差归零。代价立刻显现——对象本来一阶,回路里多一个积分器,闭环至少变二阶。二阶系统可能欠阻尼,超调、振荡随之而来;Ki 越大振荡越凶,甚至可能把闭环极点推回右半平面。笔记里的说法很直白:纯比例反应快但稳不到理想值,加积分能稳到理想值但反应变慢。一阶系统加纯积分变二阶,这是教科书反复强调的"积分会让系统升阶",理解了这个,就不会奇怪为什么积分增益不是越大越好。

4.3 微分控制 D:给系统提前量,代价是怕噪声

微分项 Kd·de/dt 干的事,是对误差的变化趋势做预测:误差还在增大时提前反向施力,等效于给系统注入一个左半平面零点,起到相位超前、增加阻尼的作用,能压住 P 和 I 带出来的超调。但理想微分没法物理实现,实际都是带惯性的一阶微分;更麻烦的是微分对高频噪声极其敏感——噪声是高频信号,s 在高频处幅值暴涨,一个 Kd 稍大,噪声就攻城略地。

环节改什么副作用
P把极点往左推,加快响应稳态误差消不掉
I开环加 s=0 极点,抬系统类型升阶导致振荡、响应变慢
D加零点增阻尼,压低超调噪声放大,需加滤波

所以调 PID 从来不是三个旋钮各管一摊。P 动快慢,I 动精度,D 动阻尼,但它们共享同一组闭环极点,牵一发动全身。这也是为什么课堂宁可花大篇幅讲极点位置,也不愿意给一套"万能参数表"——参数表是黑匣子,极点位置才是地图。你理解了 P 是推极点、I 是加极点、D 是加零点,再去读任何一篇文章里的调参口诀,都能立刻反推出它背后的极点逻辑。

5. 根轨迹与排查:增益扫过去之前,先看清分离点和实轴规则

5.1 根轨迹的本质:让闭环极点跟着增益 K 走路

闭环特征方程 1 + KG(s) = 0。把 G(s) 写成零极点形式,这个方程在复平面上等价于两个条件:相角条件 ∠G(s) = 180°,幅值条件 |G(s)| = 1/K。相角条件只跟零极点位置有关,跟 K 无关;K 只改变幅值。所以根轨迹的本质是:满足相角条件的所有点连成的曲线,就是闭环极点可能待的地方,K 只是在这条曲线上"选座"。K→0 时闭环极点趋近开环极点,K→∞ 时趋向开环零点或无穷远——起点终点就这样定死了。理解这一点,就会明白为什么根轨迹"画出来就赢了":它把参数空间里所有可能发生的事压缩成一张图,不用逐个试 K。

5.2 五条几何规则:从开环零极点画出闭环轨迹

不需要计算机,手画根轨迹靠五条规则:支路数等于开环极点个数;整张图关于实轴对称;实轴上的轨迹段,其右侧开环零极点总数必须是奇数;n > m 时无穷远处的渐近线与实轴夹角是 (2k+1)π/(n−m);分离点与汇合点由 dK/ds = 0 的根确定,等价形式是所有极点与该点的倒数之和等于所有零点与该点的倒数之和。分离点那一张图信息量最大:轨迹从几个极点出发,中途在实轴上某点"撞在一起"再分开飞向复平面,那个撞点就是分离点。它直接决定了增益大到什么程度时,系统会从单调响应变成振荡响应——分离点越靠左,临界增益的余量就越大。

import numpy as np Ks = np.linspace(0, 20, 201) roots = [np.roots([1, 5, 6, K]) for K in Ks] # 特征多项式 s^3 + 5s^2 + 6s + K,即 s(s+2)(s+3) + K = 0 # 对每个 K 求一次根,把所有根的实部虚部收集起来,就是根轨迹

这是最常见的验证手段:对每个 K 直接求特征方程根,把根的位置画出来,就是计算机眼中的根轨迹。注意这里的陷阱——代码得到的是"某个 K 下的闭环极点",教材里的根轨迹是"所有 K 的集合"。两者信息等价,代价完全反过来:手画快但不精确,扫 K 精确但看不到趋势结构。我一般建议先手画定趋势,再用代码验证拐点,两个方法互相兜底。

5.3 排查:五个手画根轨迹的翻车现场

现象一:实轴上的轨迹段画反。明明该画线的段是空的,不该画的段反而画上了。原因:右侧零极点总数数成偶数,忘了复数极点也要数进去。解决:数实轴某点右侧的零极点总数时,把共轭复极点、复零点统统算上,只关心右侧总数是奇是偶,永远奇数是轨迹段。

现象二:分离点求出来两个解,不知道取哪个。原因:dK/ds = 0 是必要条件,不是充分条件,可能是分离点,可能是汇合点,也可能是根本不在轨迹上的假根。解决:把两个解代回幅值条件算 K,K 必须为正,且该点必须落在实轴轨迹段上;不满足的直接划掉。

现象三:用软件画根轨迹,结果跟手画差很远。原因:工具默认的特征方程约定不同,有的用 1+KG(s)=0,有的增益定义方向相反;还有的绘图工具做了增益归一化。解决:轨迹形状其实一样,差异全在 K 的刻度和正负号。第一次用某个工具前,先拿一个已知系统比如 s(s+2)(s+3) 验一下方向,再投入实际设计。

现象四:画完轨迹就定增益,完全不管零点。根轨迹只画闭环极点,但超调量是零点、极点共同决定的;主极点位置选得漂亮,零点一捣乱,阶跃照样冲过头。解决:定完 K 必须回到时域看 step 响应,看着超调超了就回来调 K。

现象五:高阶系统用"主导极点"近似,结果翻车。原因:主导极点近似的前提是其余极点离虚轴足够远,且附近没有强零点;系统存在靠近虚轴的共轭副极点时,近似的误差极大。解决:先用劳斯判据确认全体极点都在左半平面,再比较最近两对极点的实部比值,别默认高阶都是二阶。

5.4 验证:根轨迹是地图,不是目的地

选增益的标准做法是沿轨迹找一个阻尼比合适的点,比如 ξ≈0.707,读出对应的 K,然后立刻回到时域验证。这一步经常暴露出根轨迹说不出口的短板:它只告诉你在某 K 下极点在哪,不告诉你零点在哪、输入幅值多大、非线性环节什么时候触发。所以"根轨迹上看着是 0.707 阻尼"只代表线性小信号下的期望,真正落实验收,得跑一步阶跃响应,再扫几组输入幅值看看线性假设还成不成立。笔记把这一步叫"从根轨迹和频域回到时域看终值",本质上是一个闭环:设计工具负责猜,时域仿真负责验收。

6. 最后一公里的取舍:极点位置不是全部,回到时域才算数

这套笔记停在奈奎斯特图第一部分,再往后走一步,就是状态空间、卡尔曼滤波和模型预测控制。值得停下来想清楚的是:为什么 MPC 和最优控制里几乎不再提"极点"?因为根轨迹和劳斯判据解决的是"单个标量增益下闭环怎么变",而现代控制把设计对象换成了状态空间模型,把目标换成了代价函数最小化。极点还在,但不再以"分母的根"的形式出现,而是变成状态矩阵的特征值,并且整个框架一次性处理多输入多输出。换句话说,传递函数是单入单出时代的优秀抽象,它的表达力有边界;这份笔记的定位,恰恰是把边界内最硬核的部分讲透。

我的看法是,学完根轨迹最该形成的习惯不是"会画图",而是"画完图必须回到时域验收"。极点位置决定收敛不发散,零点决定起步方向,输入幅值决定非线性是否被触发——这三个因素只有凑齐了才能解释一个真实的阶跃响应。从那以后,我每次用根轨迹或者 PID 设计完参数,都强制走一遍同样的流程:先劳斯判据排除右半极点,再画闭环阶跃看超调和调节时间,最后扫三组输入幅值看非线性有没有偷偷上线。这套检查比任何一张轨迹图都值钱。这套十三期笔记的价值,也正在于把每一步推导都还原成"先问机制、再动笔算"的顺序,适合对照着亲手推一遍,把自动控制原理的骨架搭起来。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询