简介:《矩阵论期末考试参考答案1》是一份面向高校理工科学生、考研复习者及矩阵论授课教师的期末答案型资料,围绕矩阵特征值、特征向量、Jordan标准形与QR分解等核心考点给出完整解答。压缩包仅含1个PDF文件,大小约284KB,便于在电脑或移动端直接查阅与打印,适合考前对照题目梳理证明与计算过程。已有619人学习,说明其在矩阵论复习场景中具有一定参考价值。内容可帮助读者核对Smith标准形、正规化向量、正交投影、变换矩阵P及其逆矩阵、矩阵幂运算等步骤,也能辅助理解线性独立与基的选取、矩阵范数不等式证明和非齐次微分方程组的求解思路,适合用于查漏补缺、复盘课堂作业与整理答题框架。
1. 矩阵论期末参考答案:一份能把 Jordan 标准形和 QR 分解讲透的复盘材料
期末周翻矩阵论,最怕的不是题不会,而是算完不知道自己对不对。Jordan 标准形里特征向量链断了、QR 分解里 Gram-Schmidt 正交化少减了一项、广义逆算完发现 (I−AG)b 不为零——这些错误在卷面上只表现为一个数字差,但背后是对矩阵理论的理解缺口。这份参考答案覆盖了矩阵论期末五类核心题型:Jordan 标准形与相似变换、QR 分解(Gram-Schmidt 正交化)、矩阵范数不等式证明、非齐次微分方程组求解、Moore-Penrose 广义逆与线性方程组通解。它不是一份“抄了就能过”的答案,而是一份可以对照检查自己推导过程的技术样本——每一步的中间结果都摆在那里,你可以拿自己的草稿逐步比对,定位到底是概念没吃透还是计算翻了车。适合正在备考矩阵论的学生,也适合需要回顾矩阵分解与广义逆的从业者。
2. Jordan 标准形与相似变换矩阵:从 Smith 标准形到特征向量链的完整推演
Jordan 标准形是矩阵论里最容易“算到一半就迷路”的题型。给定矩阵 A,要求 Jordan 标准形 J 和相似变换矩阵 P 使 P⁻¹AP = J,难点不在最后写出 J,而在中间怎么确定 Jordan 块的阶数、以及怎么把特征向量链完整地解出来。下面按这份答案的推导顺序,把每一步的技术逻辑拆开。
2.1 用 λI − A 的 Smith 标准形定 Jordan 块结构
原题给定矩阵:
A = [ 5 -2 -2 ] [ -1 1 -1 ] [ -1 -1 2 ]答案的第一步不是直接求特征值,而是对特征矩阵 λI − A 做初等变换,化到 Smith 标准形。这一步很多人会跳过,直接去算 |λI − A| = 0 解特征值,结果只拿到特征值的代数重数,拿不到 Jordan 块的阶数分布。Smith 标准形给出的对角元是 1, 1, (λ−2)³,由此读出两个关键信息:不变因子为 1, 1, (λ−2)³,初等因子只有一个 (λ−2)³。初等因子 (λ−2)³ 直接对应一个 3 阶 Jordan 块,而不变因子的次数序列告诉你只有一个块,不是 1+2 或者 1+1+1 的拆分。
提示:Smith 标准形的对角元按整除关系排列,最后一个不变因子等于最小多项式。这里 (λ−2)³ 说明最小多项式等于特征多项式,矩阵是循环矩阵,只有一个 Jordan 块。
这一步的实操要点:对 λI − A 做初等行变换和列变换时,目标是让非对角元尽量清零,同时保证每个对角元整除下一个。常见翻车点是变换过程中引入了含 λ 的分母,导致后续提取不变因子时出现分式,正确的做法是只用形如“某行减去另一行的 λ 倍”这类多项式系数的变换,保持矩阵元素始终是 λ 的多项式。
2.2 Jordan 块的具体构造
确定只有一个 3 阶块后,答案给出:
J = [ 2 1 0 ] [ 0 2 1 ] [ 0 0 2 ]这个形式上三角、超对角元为 1 的结构,本质上是“一个特征值对应一个长度为 3 的特征向量链”。如果初等因子是 (λ−2)² 和 (λ−2),那就会是两个块,J 会变成 diag(J₂(2), J₁(2)) 的分块对角形式。所以判断 Jordan 块结构时,永远回到初等因子而不是特征多项式的重数——这是矩阵论考试里最高频的失分点之一。
2.3 解特征向量链:AP₁ = 2P₁, AP₂ = P₁ + 2P₂, AP₃ = P₂ + 2P₃
P = [P₁, P₂, P₃] 满足 AP = PJ,展开得到三组方程:
(A − 2I)P₁ = 0 (A − 2I)P₂ = P₁ (A − 2I)P₃ = P₂这里 A − 2I 的计算是:
A − 2I = [ 3 5 -2 ] [ -2 -3 1 ] [ -1 -1 0 ]关键技巧在于从最后一个方程开始往前解——先取 P₃ 使得 (A − 2I)²P₃ 落在零空间里。答案取了 P₃ = [1, 0, 0]ᵀ,然后依次回代得到 P₂ = [3, −2, −1]ᵀ,P₁ = [1, −1, −1]ᵀ。这个顺序不能反:P₁ 是 (A−2I) 的零空间向量,但它必须是 P₂ 在 (A−2I) 下的像,所以必须先定 P₃ 再回代。
以下是这一段推导对应的 Python 验证代码,用来确认 P⁻¹AP 确实等于 J:
import numpy as np A = np.array([[5, -2, -2], [-1, 1, -1], [-1, -1, 2]], dtype=float) # 按答案构造的特征向量链 P = np.array([[1, 3, 1], [-1, -2, 0], [-1, -1, 0]], dtype=float) # 验证 P 可逆 print("det(P) =", np.linalg.det(P)) # 计算 P^-1 A P,应与 J 一致 J_check = np.linalg.inv(P) @ A @ P print("P^-1 A P =\n", np.round(J_check, 6))这段代码的逻辑:先验证 P 的行列式非零(答案里 det 未显式给出,但特征向量链线性无关等价于 P 可逆),再用数值矩阵乘法确认相似变换结果。运行后应看到 J_check 是一个上三角矩阵,对角元全为 2,超对角元为 1。如果数值上出现 2 附近的小数(如 1.999999),那是浮点误差,不是推导错误。参数上唯一要改的是 A 和 P 的数值,如果你自己算的特征向量链不同(比如取了不同倍的 P₃),只要线性无关,P⁻¹AP 依然应该等于同一个 J——这正是相似变换矩阵不唯一但 Jordan 标准形唯一的体现。
注意:P 的列向量顺序必须和 J 中 Jordan 块的顺序一一对应。如果你的 P 把 P₃ 放在第一列,那 P⁻¹AP 会得到一个反向的 Jordan 块结构,数值上不再等于给定的 J,这不是算错,而是相似变换的基底顺序问题。
3. QR 分解与 Gram-Schmidt 正交化:四维列向量组的完整计算路径
QR 分解这道题给的是一个 4×4 矩阵,要求正交分解。Gram-Schmidt 正交化在这里的正确用法是“先正交化得到 β 序列,再单位化得到 γ 序列”,两步不能混着做——混着做会导致后续投影计算的分母变成 1,虽然理论上也成立,但中间结果的分数会变得极其复杂,容易在考场上算错。这份答案的做法是分开的两步,值得照着复现。
3.1 正交化:逐列减投影
原矩阵按列分块为 α₁, α₂, α₃, α₄。正交化的递推式是:
β₁ = α₁ β₂ = α₂ − (⟨α₂,β₁⟩ / ⟨β₁,β₁⟩) β₁ β₃ = α₃ − (⟨α₃,β₁⟩ / ⟨β₁,β₁⟩) β₁ − (⟨α₃,β₂⟩ / ⟨β₂,β₂⟩) β₂ β₄ = α₄ − (⟨α₄,β₁⟩ / ⟨β₁,β₁⟩) β₁ − (⟨α₄,β₂⟩ / ⟨β₂,β₂⟩) β₂ − (⟨α₄,β₃⟩ / ⟨β₃,β₃⟩) β₃答案给出的中间结果保留了分数形式,比如 β₂ = (1/4)[−11, −7, 1, 17]ᵀ,β₃ = (21/15)[82, −21, −112, 51]ᵀ。这些分数系数不是随便提的,提取公因子后向量内部的整数会小很多,后续算内积时的数值规模可控。考场上如果你把分数乘进去,数字会迅速膨胀到几千,手算出错概率直线上升。
以下是这段正交化的逐列验证代码:
import numpy as np A = np.array([[1, 1, 1, 1], [1, 2, 4, 8], [1, 3, 9, 27], [1, 4, 16, 64]], dtype=float) alpha = [A[:, i] for i in range(4)] beta = [] for i in range(4): v = alpha[i].copy() for j in range(i): # 减去在第 j 个正交向量上的投影 coeff = np.dot(alpha[i], beta[j]) / np.dot(beta[j], beta[j]) v -= coeff * beta[j] beta.append(v) for i, b in enumerate(beta): print(f"beta{i+1} =", np.round(b, 6))这段代码的核心是内层循环里的投影系数计算:分子是 αᵢ 与 βⱼ 的内积,分母是 βⱼ 与自身的内积。注意分子用的是原始向量 αᵢ 而不是已经减过的 v——这一点和递推式对应,每一列都是原始列减去所有已有正交方向上的投影,而不是逐步减。如果用 v 去算分子,理论上结果相同(因为 β 之间正交),但数值误差会累积,这也是不建议改的原因。参数上,如果输入矩阵不同,唯一需要改的是 A 的定义,循环结构不变。
3.2 单位化与 Q、R 矩阵的组装
单位化阶段:
γᵢ = βᵢ / |βᵢ|答案算出的模长依次是 |β₁| = 2,|β₂| = √460/4,|β₃| = (21/15)√(22310),|β₄| = (3/97)√194。这里最容易出错的是 β₃ 的模长——因为 β₃ 本身带了一个 21/15 的系数,模长计算时要先平方再开方,答案里的写法把系数提出来后得到 (21/15)√22310,如果漏掉这个系数,γ₃ 的长度就不是 1。
最后 Q = [γ₁, γ₂, γ₃, γ₄] 是正交矩阵,R 由两组信息拼出来:对角元是各 βᵢ 的模长,非对角元是 Gram-Schmidt 过程中的投影系数。答案末尾那个 4×4 上三角矩阵就是 R,其中 R[i][j](i < j)对应 αⱼ 在 γᵢ 方向上的投影。组装时注意 Q 的列顺序必须和 R 的行顺序严格对应,否则 A = QR 不成立。
提示:验证 QR 分解是否正确,最快的办法是算 ‖A − QR‖ 的 Frobenius 范数,应该在 10⁻¹⁰ 量级以下。如果你手算的 R 非对角元符号反了,这个范数会明显变大。
4. 矩阵范数不等式与非齐次线性微分方程组:两类证明题的落笔顺序
范数不等式证明和微分方程组求解看似是两类题,但它们的失分逻辑很像:都知道要用什么定理,但落笔顺序不对,中间步骤就推不下去。这一章把两类题的关键步骤拆出来,重点讲“为什么先做这一步”。
4.1 1-范数与 ∞-范数不等式:三步证明的结构
题目要求证明对 n 阶实方阵 A,有 (1/n)‖A‖₁ ≤ ‖A‖∞ ≤ n‖A‖₁。答案的证明分三步:先证 ‖A‖₁ ≤ n‖A‖∞,再证 ‖A‖∞ ≤ n‖A‖₁,最后用这两个不等式拼出双向界。关键在于第一步里用到的排序不等式思路:
‖A‖₁ = max_j Σᵢ |aᵢⱼ| ≤ Σⱼ Σᵢ |aᵢⱼ| ≤ n · max_j Σᵢ |aᵢⱼ| = n‖A‖₁这个不等式链中间一步“列和的最大值不超过所有元素绝对值之和”是显然而不需要额外证明的,但答案写了两遍——分别对 1-范数和 ∞-范数各推一遍,这是有必要的,因为两个范数的定义方向不同:1-范数是列绝对值求和取最大,∞-范数是行绝对值求和取最大。证明时每一步都必须回到定义,不能直接套用“矩阵范数等价”的一般结论,否则会丢步骤分。
实际写的时候,建议先写出定义式,再写不等式链,最后写结论。如果时间紧张,把 Σᵢ Σⱼ |aᵢⱼ| 这个“全元素和”作为中间桥梁,两边夹一下就能得到双向不等式,这个技巧在范数证明题里通用。
4.2 常数变易法解非齐次方程组:e^(−tA) 积分的正确写法
题目是 dx/dt = Ax + f(t),初值 x(0) = [1,1,1]ᵀ,其中 A 是下三角矩阵,f(t) = [0, 0, e^(2t)]ᵀ。答案的核心技巧是先算 e^(tA),再用常数变易法写成积分形式:
d/dt [e^(−tA) x(t)] = e^(−tA) f(t)这一步的根据是矩阵指数求导公式 d/dt e^(−tA) = −A e^(−tA),而 A 和 e^(−tA) 可交换,所以乘上去之后正好消掉齐次项。很多人在这里直接写 x(t) = e^(tA)x(0) + ∫e^((t−s)A)f(s)ds,公式没错但积分不好算;答案用了 e^(−tA) 的写法,把微分方程左边凑成一个全导数,然后两边从 0 到 t 积分,这样积分变量只剩一个,计算量小很多。
e^(tA) 的计算利用 Hamilton-Cayley 定理:(A−I)³ = 0,所以 e^(tA) 只需要展开到二次项:
e^(tA) = e^t [ I + t(A−I) + (t²/2)(A−I)² ]答案给出的结果是 e^t 乘以一个上三角矩阵,其中 (1,2) 元素是 t,(1,3) 元素是 t + t²/2,(2,3) 元素是 t。这个结果直接代回去做积分,被积函数全是 t 的多项式乘 e^t 或 e^(2t),分部积分两次就能出来。
以下是用于验证这个解是否满足原方程和初值的代码:
import numpy as np from scipy.integrate import solve_ivp A = np.array([[1, 1, 1], [0, 1, 1], [0, 0, 1]], dtype=float) def rhs(t, x): # 非齐次项只有第三个分量非零 f = np.array([0.0, 0.0, np.exp(2*t)]) return A @ x + f sol = solve_ivp(rhs, [0, 2], [1.0, 1.0, 1.0], dense_output=True, rtol=1e-10) print("x(1) ≈", np.round(sol.sol(1.0), 6)) # 与答案的解析解对比:x(t) = [2e^{2t} - e^t, e^{2t}, e^{2t}] t = 1.0 analytic = np.array([2*np.exp(2*t) - np.exp(t), np.exp(2*t), np.exp(2*t)]) print("analytic =", np.round(analytic, 6))这段代码用数值积分验证解析解:solve_ivp 的 rhs 函数把 Ax + f(t) 的直接计算写出来,初值设为 [1,1,1]ᵀ,积分到 t=1 后与答案的解析表达式 [2e² − e, e², e²]ᵀ 对比。如果两者在 6 位有效数字上一致,说明积分过程中的常数项处理正确。参数上 rtol 设到 1e-10 是为了让数值误差压到解析解的有效位数以下,如果调得太松,可能把推导错误掩盖成数值误差。这段代码本身不能替代手算,但可以在你怀疑某一步积分出错时,用它快速判断结果对不对。
注意:初值问题里 e^(−tA)x(0) 的积分下限是 0 而不是负无穷,写成不定积分再代初值会导致常数项漏掉,这是这类题最常见的翻车方式。
5. Moore-Penrose 广义逆与线性方程组通解:从满秩分解到通解表达式
广义逆这道题是五道题里计算链条最长的一道:要先做满秩分解,再分别算 BᵀB 和 CCᵀ 的逆,拼出 G = Cᵀ(CCᵀ)⁻¹(BᵀB)⁻¹Bᵀ,然后判断方程组有解的条件,最后写出通解。链条长意味着任何一步的逆矩阵算错,后面的结果全废。这一章按答案的步骤顺序,重点看每一步的校验方式。
5.1 行初等变换求满秩分解
原题 A 是一个 4×4 的矩阵:
A = [ 1 1 0 0 ] [ 0 1 1 0 ] [ 0 0 1 1 ] [ 1 0 0 1 ]答案通过行初等变换化到行阶梯形,得到 A 的秩为 3,前 3 列线性无关,第 4 列可由前 3 列表示。于是满秩分解 A = BC 中,B 取 A 的前 3 列构成 4×3 矩阵,C 取行阶梯形的前 3 行构成 3×4 矩阵。这里的操作顺序是:先做行变换到最简阶梯形,再从阶梯形里读出列之间的关系,最后回填到原矩阵取对应的列。
一个高频错误是直接从阶梯形里取 B——阶梯形是行变换的结果,列空间和原矩阵不同,B 必须回到原矩阵取列。答案的做法是明确的:B 从原矩阵取,C 从阶梯形取。
5.2 两个逆矩阵的计算与 G 的组装
满秩分解后,G 的计算需要 (BᵀB)⁻¹ 和 (CCᵀ)⁻¹。答案给出的结果是:
(BᵀB)⁻¹ = (1/4) [ 3 -2 1 ] [ -2 4 -2 ] [ 1 -2 3 ] (CCᵀ)⁻¹ = (1/4) [ 3 1 -1 ] [ 1 3 1 ] [ -1 1 3 ]这两个矩阵的校验方式很简单:乘回原矩阵应该得到单位矩阵。手算时建议先算 BᵀB 和 CCᵀ,确认对称性后再求逆——3×3 的对称矩阵求逆可以用伴随矩阵,也可以用分块消元,但答案里的结果分母都是 4,说明原矩阵的行列式是 64,求逆时约掉了 16。如果你的分母不是 4,大概率是 B 或 C 取错了。
最后 G 的组装:
G = Cᵀ (CCᵀ)⁻¹ (BᵀB)⁻¹ Bᵀ答案算出的 G 是一个 4×4 矩阵,每个元素都是 1/8 的倍数,形式是:
G = (1/8) [ 3 -1 -1 3 ] [ 3 3 -1 -1 ] [ -1 3 3 -1 ] [ -1 -1 3 3 ]这个矩阵有两个结构性质可以用来自检:一是 G 对称(Moore-Penrose 广义逆对实矩阵一定对称),二是 AGA = A 和 GAG = G。手算完 G 之后,用这两条性质验一遍,比重新算一遍快得多。
5.3 有解条件与通解的写法
方程组 Ax = b 有解的充要条件是 AGb = b,等价于 (I − AG)b = 0。答案算出 I − AG 是一个秩 1 矩阵:
I − AG = (1/4) [ 1 -1 1 -1 ] [ 1 -1 1 -1 ] [ 1 -1 1 -1 ] [ 1 -1 1 -1 ]所以条件化简为 a − b + c − d = 0。这个结果和直接对增广矩阵做消元得到的条件一致,但用 AG 的秩来判更规范,因为它同时给出了“为什么有解条件是这一个”。
通解写成:
x = Gb + (I − GA) z其中 z 是任意 4 维向量,Gb 是极小范数解。答案把 Gb 展开成 b 的分量的线性组合,这就是最小二乘意义下的最小范数解;后面 (I − GA)z 的那部分,答案写成了 (1/4)[1, −1, 1, −1]ᵀ 乘以一个标量形式,因为 I − GA 也是秩 1 的,所以零空间只有一维,通解的参数可以只用一个自由变量。
提示:写通解时不要漏掉 (I − GA)z 里的 z 是任意向量,但实际零空间只有一维,所以把 z 参数化成标量乘以零空间基向量即可。答案最后那一步就是把 4 维的 z 压缩成一个标量参数,这一步能省不少书写量。
6. 用 NumPy 验证五道题:我每次复习矩阵论都强制走一遍的核对流程
手算矩阵题的痛苦在于:五道大题里只要有一道算错一个符号,后面的结果全错,而且错了之后很难定位是哪一步出的问题。我的习惯是每道题手算完之后,用 NumPy 写一小段验证代码,把中间结果逐个打印出来对。这份参考答案的好处是每个中间结果都给了具体数值,拿来当对拍的基准正好。下面是我自己用的核对流程,按题目类型分成三种验证策略。
Jordan 标准形题,验证顺序是:先确认 |λI − A| 的根和答案的特征值一致,再确认 P 的行列式非零,最后算 P⁻¹AP 看是否等于 J。三步里任何一步不对,就回到对应的手算步骤查。QR 分解题,最快的验证是 ‖A − QR‖_F,如果这个值在 1e-10 以下,说明整个分解正确;如果偏大,再分别检查 QᵀQ 是否接近单位阵、R 的对角元是否为正。广义逆题,验证三条性质:AGA = A、GAG = G、(AG)ᵀ = AG,三条都过就基本没问题。
| 题型 | 验证公式 | 容差建议 | 常见失败原因 |
|---|---|---|---|
| Jordan 标准形 | ‖P⁻¹AP − J‖_F | 1e-8 | P 的列顺序与 J 的块顺序不匹配 |
| QR 分解 | ‖A − QR‖_F | 1e-10 | R 的非对角元符号取反 |
| 广义逆 | ‖AGA − A‖_F、‖GAG − G‖_F | 1e-8 | 满秩分解时 B 取自行阶梯形 |
| 微分方程组 | 数值解与解析解逐点对比 | 1e-6 | 积分常数项漏掉 |
微分方程组题比较特殊,没有“矩阵等式”可以验,只能用数值积分跑一遍和解析解对比。我一般会在 t = 0.5、1、2 三个点上对比,因为 t 大的时候指数项会放大误差,如果 t = 2 的结果还能对上 6 位有效数字,基本可以确认解析解没写错。
还有一种情况值得单独说:当你手算的特征向量链和答案不一样时,不要急着判自己错。Jordan 标准形的相似变换矩阵本来就不唯一,只要你的 P 线性无关且 P⁻¹AP 等于同一个 J,就是对的。验证的时候算 P⁻¹AP,而不是去逐项比对 P 的每个元素。QR 分解也有类似的不唯一性——Q 的列可以同时变号,R 的对应行也变号,乘积不变。所以验证永远验乘积,不验中间结果。
从那以后我每次复习矩阵论,手算完不等答案对,先跑一遍验证脚本,把中间结果和参考值逐项比对,确认哪一步开始出现偏差再去查推导。这个习惯让我少走了很多“整道题重算”的弯路。希望帮到你。
本文还有配套的精品资源,点击获取