简介:线性系统理论试题是面向自动控制、现代控制理论学习者的一套典型试卷资料,适合高校本科生考研复习、课程备考及工程技术人员回顾控制理论基础时使用。试卷由江西理工大学《现代控制理论》课程考试真题组成,围绕状态空间表达式、状态转移矩阵求解、Lyapunov稳定性分析、能控性与能观性判断、串联系统建模、传递函数矩阵、状态反馈阵配置及全维观测器设计等核心考点展开,题目覆盖全面且带有明确分值,便于针对性练习与自测。整份资源为1个PDF文件,大小约54KB,内容紧凑,可直接打印或电子阅读。目前已有395人学习下载。通过学习这份试卷,读者既能检验对线性系统基本概念与方法的掌握程度,也能对照典型计算题训练状态转移矩阵推导、能控能观判别、Lyapunov方程求解和反馈观测器设计等关键技能,对构建完整的现代控制理论知识体系具有较好的参考价值。
1. 「线性系统理论试题.pdf」里到底藏着哪些必考能力
「线性系统理论试题.pdf」这套资料在控制科学与工程方向的研究生圈子里几乎人手一份,自动化、电气、机器人相关的工程师回炉现代控制理论时也常拿它当题库。它覆盖的考点高度集中:状态空间建模、状态转移矩阵、能控能观性、李雅普诺夫稳定性、状态反馈与观测器设计,每一类都要求先写对矩阵方程,再用判据下结论。对备考者来说,价值不在逐题刷完,而在把它整理成一份可检索、可标注、可验证的复习资产。下文按「考点拆解 → PDF 整理方法 → 答题模板 → 计算验证」四层推进,每步都给出可直接照做的命令和代码。
2. 围绕线性系统理论试题的高频考点:状态转移矩阵与能控能观性
2.1 试题为什么总从状态空间方程开始
不管是哪个学校出的线性系统理论试题,题干里几乎都先给出一个定常线性系统 ẋ=Ax+Bu、y=Cx,再围绕 A、B、C 三个矩阵展开。原因在于这门课的研究对象就是状态空间模型,传递函数只是它在频域的投影,两者共同构成解题的两条路径。备考时先分清两类题的差别:一类是「算」,求状态转移矩阵、求传递函数、求规范型;另一类是「判」,判断能控能观、判断稳定性、判断能否配置极点。考试丢分大多不是概念不会,而是把「判」的题目当「算」来做,或者在计算题里忘了用判据验证结论。矩阵分析课程里的特征值、秩、若尔当标准型,在这里会直接变成考题的计算对象,复习时如果秩的概念不扎实,能控能观判据很容易写成形式而算错。
2.2 状态转移矩阵:三种求法与适用边界
状态转移矩阵 Φ(t,t₀)=e^{A(t-t₀)} 是几乎所有计算题的公共起点。试题里 A 通常是二阶或三阶矩阵,特征值可能为单根也可能为重根,选对求法能省下大量草稿纸时间。
2.2.1 拉普拉斯反变换:计算路径最固定
公式是 e^{At}=L⁻¹[(sI-A)⁻¹],操作上分四步:写出 sI-A;求逆矩阵;对逆矩阵的每个元素做部分分式分解;逐项查表做反变换。这个方法的优点是不需要先求特征值,缺点是重根时部分分式会出现 (s-λ)² 项,展开系数要从一阶导数取极限得到,漏掉导数项是最典型的错误。三阶矩阵用伴随矩阵法求逆时,注意余子式前的 (-1)^(i+j) 符号,这是第二个高频失分点。
2.2.2 凯莱-哈密顿定理:重根场景的关键变体
凯莱-哈密顿定理说 f(A)=0,于是 e^{At} 可以用 α₀(t)I+α₁(t)A+…+α_{n-1}(t)A^{n-1} 表示。步骤是:先求特征多项式 det(λI-A);对每个特征值 λᵢ 列方程 e^{λᵢt}=Σαₖλᵢᵏ;解出 αₖ 后代入矩阵幂次求和。特征值互异时方程个数恰等于未知数,一路消元即可。出现重根时,必须对特征方程两端关于 λ 求导,补出 e^{λt} 与 Σαₖλᵏ 的一阶、二阶导相等关系,少补一条方程就解出错误的 α。这个方法适合特征值已经由题干给出、或第一问已经求完特征值的题目。
2.2.3 若尔当化求法:什么时候才值得用
e^{At}=Pe^{Jt}P⁻¹ 思路直观,但要先求特征向量构成的变换矩阵 P,再算两次矩阵乘法,三阶以上的计算量明显大于前两种。只有当题干直接给出若尔当标准型 J 与变换矩阵 P,或者在证明题里需要讨论不同若尔当块的结构时,才优先走这条路。日常做题建议固定用拉普拉斯或凯莱-哈密顿,这两个方法能覆盖绝大部分题目。
三种方法的对比和易错点可以直接对照这张表:
| 方法 | 适用场景 | 计算重心 | 易错点 |
|---|---|---|---|
| 拉普拉斯反变换 | 2~3 阶矩阵,特征值未知 | 矩阵求逆与部分分式 | 重根时漏掉 s 的高阶项系数 |
| 凯莱-哈密顿 | 特征值已知,含重根 | 解 α 的线性方程组 | 重根处忘记对特征方程求导 |
| 若尔当化 | 题干直接给 J 与 P | 矩阵乘法展开 | P 的列序与 J 的块序不对应 |
2.3 能控性与能观性的秩判据
能控性矩阵 Qc=[B AB A²B … A^{n-1}B],秩等于 n 则完全能控;能观性矩阵 Qo=[C; CA; …; CA^{n-1}],秩等于 n 则完全能观。这是试卷里出现频率最高的两个判据,计算量小,但细节容易出错。多输入系统里 Qc 是 n×(n·p) 的宽矩阵,秩判据的形式不变,但循环里必须算到 n-1 次幂,少一项可能恰好隐藏了不可控模态。能观性矩阵的拼接顺序是 C 在顶部,乘出来的每个子块保留原始行向量,任何时候都不要把转置符号写丢。证明题里 PBH 判据更常用:存在某个特征值 λ 使 rank[sI-A B] 小于 n,等价于存在不可控模态;这个等价关系在答题时写一句「由 PBH 判据可知」可以省去构造变换矩阵的过程。
2.4 用一段 Python 代码验证秩判据
手算写完判据后,用 numpy 验证是成本最低的检查手段。
import numpy as np A = np.array([[0, 1, 0], [0, 0, 1], [-6, -11, -6]]) B = np.array([[0], [0], [1]]) C = np.array([[1, 0, 0]]) n = A.shape[0] Qc = np.hstack([np.linalg.matrix_power(A, k) @ B for k in range(n)]) Qo = np.vstack([C @ np.linalg.matrix_power(A, k) for k in range(n)]) print("能控性矩阵 Qc:") print(Qc) print("rank(Qc) =", np.linalg.matrix_rank(Qc), "/", n) print("能观性矩阵 Qo:") print(Qo) print("rank(Qo) =", np.linalg.matrix_rank(Qo), "/", n)逻辑说明:matrix_power(A,k) 求 A 的 k 次幂,列表推导式按 k=0 到 n-1 拼出 Qc;能观性矩阵用 vstack 把 C、CA、CA² 按行堆叠,注意 C 是 1×n 行向量,乘法顺序是 C 在前。rank 输出等于 n 时该性质成立,小于 n 时说明存在不可控或不可观模态,答题还要继续写出能控/能观分解。这里给的 A 是特征多项式为 (s+1)(s+2)(s+3) 的能控规范型,理论上 Qc 满秩、C 取 [1,0,0] 时 Qo 也满秩,运行结果应与手算一致。
提示:不同教材对能控规范型变换矩阵 T 的构造约定不同,手算与代码对照时先确认用的是同一套定义。
3. 用 PDF 解析与拆分工具把「线性系统理论试题.pdf」整理成复习手册
3.1 先解析 PDF 结构:文本层、页数与扫描质量
拿到 PDF 的第一件事不是急着做题,而是做一次结构体检。很多老试卷是扫描图,没有文本层,直接复制粘贴只能得到空内容;这类文件之后所有文字检索手段都失效,只能靠视觉翻页。用 PyMuPDF 几行代码就能拿到页数和每页的文本层情况。
pip install pymupdfimport fitz doc = fitz.open("线性系统理论试题.pdf") print("总页数:", doc.page_count) for i, page in enumerate(doc): text = page.get_text().strip() has_layer = "有文本层" if text else "无文本层(扫描页)" print(f"第 {i+1} 页:{has_layer}") page = doc[2] print(page.get_text()[:200])逻辑说明:fitz 是 PyMuPDF 的导入名,page.get_text() 提取的是页面内嵌文本层,返回空字符串基本可以判定为扫描图片页。这一步决定了后续用「文本检索」还是「人工翻页」定位题目,也决定要不要启动 OCR 流程。对扫描歪斜的旧试卷,很多人会搜「pdf歪斜校正纠偏」,常见做法是交给带自动纠偏的 PDF 编辑器处理,或者在 PyMuPDF 里用 page.set_rotation(angle) 只修正 90 度倍数的方向偏差;更细的倾斜校正建议把坏页单独导出处理完再合并,整册跑一遍纠偏会拖慢速度。
对页面的体检结果可以整理成一张简单的判定表,贴在笔记第一页:
| 体检项目 | 判定手段 | 后续动作 |
|---|---|---|
| 文本层是否完整 | page.get_text() 长度 | 无文本层则计划 OCR |
| 页面方向是否统一 | set_rotation 后重新导出 | 偏差页单独纠偏 |
| 书签是否完整 | doc.get_toc() 输出 | 缺书签则手工补目录 |
| 每页题号是否连续 | 抽 3 页目测核对 | 乱序页用 insert_pdf 重排 |
3.2 按题型拆分:把一册试卷变成三份专项练习
常见做法是把整套题拆成「选择题填空题」和「计算证明题」两个文件,再按专题重组页码。pyMuPDF 的 insert_pdf 支持范围抽取,命令很短:
import fitz src = fitz.open("线性系统理论试题.pdf") part1 = fitz.open() part1.insert_pdf(src, from_page=0, to_page=7) part1.save("选择题与填空题.pdf") part2 = fitz.open() part2.insert_pdf(src, from_page=8, to_page=src.page_count - 1) part2.save("计算与证明题.pdf")参数说明:from_page 和 to_page 都是 0 开始的闭区间,拆分前先对照目录确认页码;如果 PDF 自带书签,优先用 doc.get_toc() 读目录,按标题边界切分,比手工数页可靠。拆分后的文件按「年份-题型-专题」命名,例如「2023-能控能观.pdf」,后期靠文件名就能完成检索,不必每次打开全文找题。
3.3 标注与公式索引:让错题能回溯
试题的价值在于错题。我一般用带标注功能的阅读器在错题旁边写三样东西:考察点、错误类型、对应解法编号。PDF 没有文本层的扫描卷,手写标注比键盘输入顺手,支持免费手写笔记的阅读器在工程圈里用得很多。如果确实需要把文字抽出来编辑,才考虑做 PDF 转 Word,但公式转换后大概率乱掉,不建议作为主路径,只用来复制题干文字。与标注配套的是单独维护一页公式索引:两列表格,左列题号,右列涉及的公式与定理,放在整个文件的第一页。这样每次打开文件先看索引,哪些题值得重做、哪些题已经闭环,一目了然。索引用文本层保存,后续可以用阅读器的全文搜索直接定位到具体题目。
3.4 输出打印:虚拟打印机与小册子排版
需要把批注导出或把某几页单独交出去时,「pdf虚拟打印」是标准路径。Windows 自带的 Microsoft Print to PDF 可以在任意阅读器里把当前批注版重新导出成一个新 PDF;福昕等编辑器的虚拟打印机则支持直接输出 PDF 或图片,适合把某道题发给别人讨论。注意打印时选「按 PDF 页面大小」而不是「适应纸张」,否则长矩阵公式会被裁掉边缘。从浏览器页面打印讲义时同样走虚拟打印机,调好边距再打印,避免公式换行被截断。纸质装订前把偶数页倒序排列能减少翻页成本,纯数字复习可以跳过这一步。
4. 从线性系统理论试题反推答题模板:四种题型的标准套路
4.1 求状态转移矩阵并按条件验证
这类题占基础分,标准步骤固定为四步:写出 sI-A;求逆矩阵;对每个元素做部分分式分解;逐项做拉普拉斯反变换。拿到结果后必须做两个验证:t=0 时 Φ(0)=I,求导后 Φ̇(t)=AΦ(t)。两个条件只要有一个不满足,前面的计算必然出错。三阶矩阵用伴随矩阵法求逆时,符号 (-1)^(i+j) 最容易错,建议先在草稿上写出伴随矩阵再转置,不要跳步。答题时把验证过程写在结果后面,阅卷能直接看到你的自查步骤,这部分通常能给满过程分。
4.2 判断能控能观并写出规范分解
对给定 (A,B,C),标准答案顺序是:写出 Qc 与 Qo;用行变换求秩;满秩则继续写能控规范型或能观规范型;不满秩则要求做能控性/能观性分解。规范型变换是最容易丢分的环节,关键在变换矩阵 T 的构造。最常见做法是以 Qc 的最后一列作为新坐标系的第一列(能控规范型约定),再用关系式逐列反推剩余列;不同教材的列序约定不同,答题时要在卷面写清楚自己的变换定义 T⁻¹AT,阅卷按过程给分。分解题里要求画出结构图时,注意把不可控模态标在框外,这是评卷的采分点。
4.3 李雅普诺夫稳定性判定
李雅普诺夫判据通常以两种面貌出现:一种给出 V(x) 让判断稳定性,直接求 V̇=∂V/∂x·f(x),看定号性;另一种给出线性系统问是否渐近稳定,解李雅普诺夫方程 AᵀP+PA=-Q,Q 一般取单位阵,检查 P 是否正定。解方程的五步是:设 Q=I;把 P 写成含未知数的对称矩阵;代入展开,对照等式两边元素,得到 n(n+1)/2 个方程;解线性方程组;检查 P 的顺序主子式或特征值是否全大于 0。手算时未知数数量随 n 增长很快,三阶以上建议用工具兜底:
import numpy as np from scipy.linalg import solve_lyapunov A = np.array([[0, 1], [-2, -3]]) Q = np.eye(2) P = solve_lyapunov(A.T, -Q) print("P =", P) print("P 的特征值:", np.linalg.eigvals(P))逻辑说明:scipy 的 solve_lyapunov(a,q) 解 aX+Xaᴴ=q,这里传 a=Aᵀ、q=-Q,等价于解 AᵀP+PA=-I。输出 P 后看特征值,全大于 0 则系统渐近稳定;特征值出现 0 说明只能判稳定不能判渐近稳定,这是区分「稳定」与「渐近稳定」的关键。示例中的 A 特征值为 -1 和 -2,稳定,P 应为正定对称阵。
4.4 参数设置对照表
把常见题型的判据、判定标准和易错点收在一张表里,做题时直接对照:
| 题型 | 关键公式与参数 | 判定标准 | 常见的坑 |
|---|---|---|---|
| 状态转移矩阵 | Φ=e^{At}=L⁻¹[(sI-A)⁻¹] | Φ(0)=I | 重根部分分式漏导数项 |
| 能控性 | Qc=[B AB … A^{n-1}B] | rank(Qc)=n | 多输入忘算到 n-1 次幂 |
| 能观性 | Qo=[C; CA; …; CA^{n-1}] | rank(Qo)=n | C 与 A 的乘法顺序写反 |
| 极点配置 | 反馈 u=-Kx,配 det(sI-A+BK) | 能控是充分条件 | 反馈增益 K 的符号搞反 |
| 李雅普诺夫 | AᵀP+PA=-Q,Q 取 I | P 正定 | Q 取半正定时判据失效 |
极点配置题补一句:Ackermann 公式 K=[0…0 1]·Qc⁻¹·φ(A) 可以直接算出状态反馈增益,答题时写清 φ(A) 是期望特征多项式代入 A 后的矩阵即可;前提是先判定能控,判据不过直接套公式会被扣掉逻辑分。
5. 给线性系统理论试题的答案做符号与数值双重校验
5.1 用 sympy 符号验证状态转移矩阵
符号层面最好验证的是状态转移矩阵与传递函数。用 sympy 做矩阵求逆和拉普拉斯反变换,直接与手算结果逐项对照:
import sympy as sp t, s = sp.symbols('t s') A = sp.Matrix([[0, 1], [-2, -3]]) Phi_s = (s * sp.eye(2) - A).inv() Phi_t = sp.inverse_laplace_transform(Phi_s, s, t) print("e^(At) =", Phi_t) print("Φ(0)=I:", sp.simplify(Phi_t.subs(t, 0)) == sp.eye(2)) print("dΦ/dt = AΦ:", sp.simplify(sp.diff(Phi_t, t) - A * Phi_t) == sp.zeros(2))逻辑说明:inverse_laplace_transform 对矩阵逐元素做反变换,返回的就是 e^{At}。subs(t,0) 代入初始时刻,化简后等于单位阵则第一个条件成立;diff 求导后减去 AΦ,化简为零矩阵则第二个条件成立。两个断言同时通过,符号层面的答案基本可信,可以直接拿来对拍手算结果。
5.2 用 numpy 数值校验秩与特征值
数值层面对秩、特征值的校验更快。除了前面算 rank,还要核对 det(sI-A) 的常数项等于 det(-A),以及闭环极点配置后 A-BK 的特征值是否等于期望极点。对李雅普诺夫方程,scipy 的 solve_lyapunov 一条命令就能出 P,再配合特征值检查正定性。数值结果与符号结果在 t=1 处的差距小于 1e-8,即视为一致:
import numpy as np from scipy.linalg import expm A = np.array([[0, 1], [-2, -3]]) print("特征值:", np.linalg.eigvals(A)) print("数值 e^A:", expm(A))5.3 一个可抄的验证清单
交卷前逐条核对下面五项,能拦下绝大多数计算错误:Φ(0)=I 与 Φ̇=AΦ 是否同时满足;Qc、Qo 的秩是否等于 n;特征多项式 det(sI-A) 的常数项是否等于 det(-A);极点配置后 A-BK 的特征值是否等于期望极点;李雅普诺夫方程解出的 P 是否对称且正定。容差统一取 1e-8,符号与数值结果一致即视为通过,不一致时优先回查状态转移矩阵部分分式展开里的重根项,那是最容易藏错的地方。
本文还有配套的精品资源,点击获取