简介:线性代数期末复习习题(含答案解析)是一份面向本专科学生及考研基础复习者的期末冲刺练习资料,集中覆盖行列式计算、矩阵运算与逆矩阵、向量组极大线性无关组、实对称矩阵性质等核心要点。压缩包内仅含一个doc文档,大小约三点二九兆字节,按行列式、矩阵、向量组等专题编排,每道题都配有较完整的求解步骤和关键评注,方便逐题对照与查漏补缺。目前已有二百四十六人学习下载,适合考前系统强化。题目中既有行列式展开与分块求值、伴随矩阵求逆、矩阵秩与可逆性判定,也有实对称矩阵特征值非负性、反例构造与证明思路,能帮助读者在复习中夯实理论基础,提高计算熟练度和解题速度,为期末应试和后续学习打下坚实基础。
1. 线性代数期末复习:把解析从"剧透"变成"自检"
见过太多准备期末的同学,拿着《线性代数期末复习习题(含答案解析)》一页页翻:选择题对了打个勾,大题看了解析觉得"懂了",合上卷子再写还是卡在同一处。问题不在题量,在于把解析用成了剧透——只知道答案是某个选项,不知道它怎么被一步步逼出来,更不知道哪一步最容易写错。线性代数期末大题其实高度套路化:行列式消元、矩阵求逆、方程组通解、特征值与对角化,翻来覆去就这几类。真正拉开分数的是两个能力:不看答案把完整步骤推完,以及推完能利用性质快速回验。下面按题型拆解,每类给出可执行做法、关键参数和常见错因,草稿纸上能跑,Python 里也能验。
2. 行列式与矩阵习题:先算对,再谈理解
2.1 四阶以上行列式:消元到上三角,别硬用拉普拉斯展开
期末习题里三阶行列式用对角线法则即可;四阶及以上如果直接拆成 4 个三阶展开,乘法次数翻倍,符号还最容易错。标准做法是把行列式化为上三角:选主元,用主元把下方元素消成 0,再移到下一列继续。每类行变换对行列式的影响是固定的——交换两行变号,某行乘常数 k 则整个行列式乘 k,某行的 k 倍加到另一行则行列式不变。这个规则建议先抄在草稿纸边上,消元过程中每做一次交换就记一个负号。
import sympy as sp A = sp.Matrix([ [2, 1, 0, 3], [1, -1, 2, 1], [3, 0, 1, 2], [0, 2, -1, 4], ]) # 符号计算给出精确行列式,分数不会被转成浮点 print(A.det()) # 行最简形用于解方程组,不是上三角,不能直接乘对角线 B, pivots = A.rref() print(B, pivots)参数说明:A.det()走符号算法,适合拿来当练习的标准答案核对。rref()返回行最简形和主元列索引,行最简形要求每行首个非零元为 1 且该列其它元素为 0,而上三角只要求主对角线以下全为 0,两者形态不同——把行最简形的主对角线元素相乘当成行列式,是解析里最典型的误用。手算消元时,每轮主元若为 0,要先交换下方某行并变号;若消元出现分数,先检查第二步是否漏乘了分母。
四阶消元最常见的错误是消完第一列直接跳去处理第三列,忘掉第二列主元的位置。另一个隐蔽问题:行变换只允许整行操作,不能因为某行看着顺眼就单独改一个元素。任何一步只动一个数字的操作,基本都意味着这题要重算。
2.2 求逆矩阵:伴随矩阵与初等行变换怎么选
习题答案解析里求逆通常给两种写法:伴随矩阵法A⁻¹ = A* / |A|,以及初等行变换法(A | I) → (I | A⁻¹)。伴随矩阵法书写短、适合解析展示,但四阶以上要算 16 个代数余子式,考试时间上不划算。我一般建议:三阶及以下用伴随矩阵,顺手复习代数余子式的正负号规律;四阶及以上一律初等行变换。行变换过程中增广矩阵的左右两半必须同步操作,任何一步只变了左边没变右边,最后结果必错。
| 方法 | 适用阶数 | 主要风险 | 回验手段 |
|---|---|---|---|
| 伴随矩阵 A* / | A | 3 阶及以下 | |
| 初等行变换 (A | I) | 4 阶及以上 | 左右两半操作不同步 | 对求出的结果再乘回 A |
手算求逆时,每次行变换完成,先快速看一眼增广矩阵右边有没有跟着变。很多同学算到一半,左边已经消干净,右边还停在两步前的状态,这种错误在回验时会被放大——A 乘出来不是 I,而是某个中间矩阵。
2.3 手算完用 numpy 回验:残差矩阵一眼看出错在哪
import numpy as np A = np.array([[2., 1., 0., 3.], [1., -1., 2., 1.], [3., 0., 1., 2.], [0., 2., -1., 4.]]) inv = np.linalg.inv(A) residual = A @ inv - np.eye(4) print(np.round(residual, 10)) # 越接近零矩阵越好逻辑说明:residual里绝对值大于1e-8的元素就是错误位置。若只有个别元素在1e-16量级,属正常浮点误差;若整行都不对,通常是手算行变换的某一对应错了,不是 numpy 的问题。np.linalg.inv对病态矩阵会出现较大误差,此时改用np.linalg.solve(A, np.eye(4))或把数据升到np.float128,再不行就回 sympy 做符号求逆。
注意:手算求逆最常错在变换顺序。初等行变换只允许整行操作,不允许列变换;个别解析里出现列变换是为了化简特征向量,别混用。
3. 线性方程组与秩习题:先判解型再写通解
3.1 增广矩阵的秩决定一切
期末复习题里方程组大题的得分点分布通常是:解型判定占一部分,通解书写占大头。解型判定的依据只有一个——比较系数矩阵 A 的秩 r(A) 和增广矩阵 (A | b) 的秩 r(A|b)。未知数个数为 n 时:两者相等且等于 n,唯一解;两者相等但小于 n,无穷多解;不相等,无解。这个结论建议当成口诀背,考试时先在草稿纸上算两个秩,再决定往下走哪条路;直接闷头消元、消到一半才发现矛盾,既浪费时间又容易丢分。
import numpy as np A = np.array([[1., 2., -1.], [2., 4., -2.], [1., 1., 1.]]) b = np.array([1., 2., 3.]) Ab = np.hstack([A, b.reshape(-1, 1)]) # 增广矩阵:b 拼成最后一列 ra = np.linalg.matrix_rank(A) rb = np.linalg.matrix_rank(Ab) print(ra, rb, A.shape[1])参数说明:reshape(-1, 1)把一维向量变成列向量,np.hstack按列拼接成增广矩阵。matrix_rank默认用 SVD 判断数值秩,阈值取tol = S.max() * max(M.shape) * eps;整数数据结果可信,浮点稀疏矩阵建议显式传tol=1e-10,否则接近线性相关的行会被误判。上面这个例子里第 1 行和第 2 行成比例,手算看到成比例行就能直接判断 r(A) ≤ 2,不必把整个消元做完。
3.2 通解的骨架:一个特解加零空间
判完解型后,无穷多解时通解必须写成"特解 + 齐次解的组合"。具体做法:对增广矩阵做行最简形,把主元列对应的变量留下;自由变量依次赋 (1,0,...)、(0,1,...),回代得到齐次的基础解系;再把自由变量全赋 0,回代得到特解。解析里通解写得很短,但步骤拆分必须完整,少一个基础解系向量就是整题失分。
import sympy as sp A = sp.Matrix([[1, 2, -1, 1], [2, 4, -2, 2], [1, 1, 1, 3]]) print(A.rref()) # (行最简形, 主元列索引) print(A[:, :-1].nullspace()) # 系数矩阵零空间,即基础解系说明:rref()返回的主元列索引决定哪些变量是主元变量。nullspace()返回齐次方程 Ax=0 的基础解系——注意这里先用A[:, :-1]切掉最后一列,因为 nullspace 只对系数矩阵有意义;直接把整个增广矩阵丢进去,基础解系里会出现一个由右端项引入的假向量。通解的书写顺序:先写特解,再写基础解系每个向量乘以任意常数后相加,最后标注"c₁, c₂ 为任意常数"。
3.3 "线性表示"类证明题,本质还是秩
期末习题里常有"b 是否能由 A 的列向量组线性表示"或"两向量组是否等价"的证明。这类题解析写得长,核心只有一个:b 能由列向量组线性表示,当且仅当 r(A) = r(A|b)。向量组等价则要求互相能线性表出,等价于合并矩阵的秩等于两个矩阵各自的秩。做题时不要试图去解具体系数,先列两个秩,秩相等就是能表示,不等就举反例。
| 题目问法 | 等价条件 | 常见误写 |
|---|---|---|
| b 能否由列向量组表示 | r(A) = r(A | b) |
| 两向量组等价 | r(A) = r(A | B) = r(B) |
| Ax=0 有非零解 | r(A) < n | 把 r(A) ≤ n 当无解 |
这里最容易混的是"非零解"和"无穷多解":齐次方程组恒有零解,非零解存在当且仅当 r(A) < n;非齐次方程组才需要讨论无解的情况。解析里出现"显然无解"时,一定要能在旁边补出两个秩不等的具体数值,这一步才是拿分点。
4. 特征值与对角化习题:重头戏怎么稳拿分
4.1 特征多项式:用迹与行列式卡住结果
求特征值是期末中档大题的第一步。二阶矩阵det(λI - A) = 0展开后是λ² - tr(A)λ + det(A);三阶展开后是λ³ - tr(A)λ² + (主对角线二阶主子式之和)λ - det(A)。这两个关系要会用:写出特征多项式后,先用迹和行列式核对系数,能拦下一大半笔误。解析里如果直接给特征值,你也应该能反推出特征多项式,两条路互为检验。
import sympy as sp A = sp.Matrix([[4, 1, 0], [1, 3, 1], [0, 1, 2]]) lam = sp.symbols('lam') print(A.charpoly(lam).as_expr()) # 展开后的特征多项式 print(A.trace(), A.det()) # 与多项式系数交叉验证 print(A.eigenvects()) # (特征值, 代数重数, 特征向量列表)参数说明:charpoly(lam)返回多项式对象,as_expr()展开成常见形式;eigenvects()返回三元组,依次是特征值、代数重数、该特征值下的特征向量列表。手算时如果特征多项式常数项和det(A)对不上,优先检查(λI - A)里 λ 的对角线位置是否写反。很多人习惯写det(A - λI),根相同但多项式带负号,容易在常数项符号上栽跟头;建议统一用det(λI - A),每一步都对得上。
4.2 重根能不能对角化,看几何重数
特征值有重根时,可对角化的充要条件是每个特征值的几何重数等于代数重数,而几何重数 = n - rank(A - λI)。这是解析里最常被一笔带过的判定:很多复习题答案直接写"可对角化"不给理由,但考试时判定步骤是要占分的。计算几何重数时,把 λ 代入 A 后做秩的计算,别只看"感觉有几个自由变量"——自由变量个数就是几何重数,但必须先算出秩,不要靠猜。
import numpy as np A = np.array([[4., 1., 0.], [1., 3., 1.], [0., 1., 2.]]) vals, vecs = np.linalg.eig(A) for i in range(len(vals)): lam, v = vals[i], vecs[:, i] residual = A @ v - lam * v print(i, np.linalg.norm(residual)) # 残差范数说明:np.linalg.eig返回的特征值按列与特征向量对应,vecs[:, i]是第 i 个特征值对应的特征向量。残差范数||A v - λ v||应接近1e-10;若某一列明显偏大,先怀疑特征向量没归一化,再怀疑特征值顺序对应错了。手算重根时,如果某个特征值的几何重数小于代数重数,直接判定不可对角化,后续相似变换那一步就不用做了。
注意:几何重数只取决于 A - λI 的秩,与特征向量的具体选择无关。两个不同的特征向量若落在同一特征子空间,它们线性相关,不能同时进入 P 矩阵。
4.3 实对称矩阵:正交对角化时 Q 的组装顺序
期末大题里实对称矩阵的对角化,要求 Q 是正交矩阵且Qᵀ A Q = Λ。组装顺序是:每个特征值的基础解系先做施密特正交化,再单位化,然后按特征值顺序并排成 Q。特征向量列的顺序必须和 Λ 的对角元顺序严格对应,顺序错位整个等式就崩。解析里经常只给最后结果,不给中间重排过程,这一步恰恰是最容易失分的地方。
| 检查对象 | 方法 | 典型错误 |
|---|---|---|
| Q 是否正交 | Qᵀ Q 是否等于 I | 只单位化没正交化 |
| 顺序是否一致 | Qᵀ A Q 的对角元与特征值列序比对 | 特征值排序后忘掉对特征向量重排 |
| 特征向量是否正确 | 逐列算 A v - λ v | 把特征向量的非零倍数当成已单位化 |
常见做法是先用np.linalg.eigh直接拿对称矩阵的正交对角化结果,它保证特征值升序、特征向量正交;再用Q.T @ A @ Q回代检查。手算则建议先算出特征值并排序,再按同一顺序求特征向量,最后统一做施密特正交化——先正交化再排序,顺序容易记乱,回代时怎么都对不上。
5. 解析答案的快速回验:五个动作加一个技巧
5.1 五个不用重算的回验动作
拿到解析答案后,先别急着往下看,用下面五个动作验证,每个十秒内能完成:代入法(解代回原方程看等号是否成立)、秩判定(检查无解/无穷解的结论与秩是否一致)、特征值核对(特征值之和等于迹,之积等于行列式)、逆矩阵回乘(A A⁻¹ 是否等于 I)、正交性检查(Qᵀ Q 是否为 I)。
| 动作 | 适用对象 | 判定标准 |
|---|---|---|
| 代入原方程 | 线性方程组的特解 | 左右两边数值相等 |
| 迹、行列式核对 | 特征多项式 | Σλ = tr(A),Πλ = det(A) |
| 残差范数 | 特征对 (λ, v) | ||A v - λ v|| < 1e-8 |
| 回乘 | 逆矩阵 | A A⁻¹ - I 接近零矩阵 |
| 正交回代 | 正交对角化 | Qᵀ A Q - diag(λ) 接近零矩阵 |
这套动作的价值在于:解析只告诉你"结果是什么",而回验动作告诉你"这个结果为什么可信"。任何一步对不上,都说明你刚才手算的某个矩阵元素写错了,而不是答案印错了。
5.2 一个具体技巧:用残差向量的非零位置定位错行
如果特征对残差偏大,用一段短代码定位是哪一步错的:
import numpy as np A = np.array([[4., 1., 0.], [1., 3., 1.], [0., 1., 2.]]) vals, vecs = np.linalg.eig(A) for i, (lam, v) in enumerate(zip(vals, vecs.T)): r = A @ v - lam * v print(i, np.round(r, 10)) # 非零分量指示错误所在行逻辑说明:vecs.T把特征向量从列转成行,便于逐条取用。若r里只有第 j 个分量非零,说明错误集中在 A 的第 j 行——通常是手算时该行的矩阵元素代入写错,而不是特征向量本身错;若所有分量都是1e-8量级,是浮点误差,可以直接忽略。这个方法同样适用于方程组:把求得的特解代回Ax - b,非零分量指向出错的方程编号,顺着那一行检查消元过程即可。
最后补一遍易错对照:det(A)核对的是特征值之积,tr(A)核对的是特征值之和,这两条必须同时满足才能初步信任;只满足一条时,不要急着改答案,先重新展开特征多项式,检查三次项和常数项的符号。
本文还有配套的精品资源,点击获取