矩阵分析课后题解答整理版:子空间、核与像、酉空间标准正交基

📅 发布时间:2026/9/20 4:08:46
矩阵分析课后题解答整理版:子空间、核与像、酉空间标准正交基
简介这份《矩阵分析课后习题解答整理版》以单个 doc 文档形式提供面向修读矩阵分析、高等代数后续课程的高校学生与自学者用于对照课后题目检验证明思路、补齐课堂未展开的推导细节。压缩包内共 1 个 doc 文件约 8.9MB正文按章节组织第一章围绕线性空间与线性变换涵盖子空间封闭性验证、解空间维数、核与像、基变换与坐标变换等题目第二章聚焦酉空间与酉变换涉及内积与共轭对称性、标准正交基的求法、矩阵对角化与三角化等内容。整理者还在关键处标注了核空间与矩阵核空间的区别、实空间与复空间性质差异等易混点并给出多种证明路径与提示部分答案注明为个人整理、仅供参考。目前已有 115 人学习适合在复习阶段快速定位题型、理解证明框架并借助矩阵运算与变换练习提升解题熟练度。1. 从一份标着“仅供参考”的整理版解答说起矩阵分析的课后题里真正卡人的往往不是行列式计算而是第一行该从哪个定义切入。同一道题用基变换矩阵能算出来用线性变换的语言能证出来套内积也能绕出来选错入口就是写满两页草稿纸还落不到结论。这份《矩阵分析课后习题解答(整理版)》按线性空间与线性变换、酉空间与酉变换两条主线铺开覆盖子空间封闭性验证、核与像、标准正交基构造这些高频题型适合正在跟课想逐题对照的人也适合工作几年后回头补基础的人。整理者在开头明确写了“答案不一定正确仅供参考”这不是免责套话而是使用说明——把它当靶子而不是标准答案先自己写再对照它最后用符号计算验一遍。2. 线性空间封闭性验证从八条公理到两条判据2.1 子空间判定为什么能砍掉六条公理线性空间的定义里有八条运算公理加法交换律、加法结合律、零元存在、负元存在、数乘结合律、数乘单位元、以及两条分配律。但判定一个非空子集是不是子空间时标准做法只验证三条非空、对加法封闭、对数乘封闭。这不是偷工减料公理是继承的——子集里的元素本来就是母空间 V 的元素那八条在 V 上已经成立落到子集上自然还成立。真正需要额外补的只有一件事运算结果会不会跑出子集。课后第 1.9、1.10 两题考的就是这条路径原文写的“验证对满足加法和数乘的封闭性”指的就是这个。一个省时间的习惯是先看零元在不在集合里。如果集合由某个齐次线性条件定义零元必然满足如果条件里带常数项比如 x₁ x₂ 1那零元直接不满足可以立刻判定不是子空间后面所有工作都不用做。这种“先找零元”的判断在考场上能省下大量时间也是很多人做完一整页推导才发现白写的原因。2.2 用符号计算验证封闭性而不是代入具体向量封闭性验证最常见的错误是取两个具体向量代入。比如取 (1, −1, 1) 和 (0, 1, 2)算出来发现和还在集合里就下结论“封闭性成立”。这只证明了这两个特定元素封闭对集合里其他元素一无所知。封闭性要求对任意元素成立所以必须用带符号参数的通用形式。import sympy as sp a, b, c, d, k sp.symbols(a b c d k, realTrue) # 候选集合 S {(x1, x2, x3) | x1 2*x2 - x3 0} def in_S(v): x1, x2, x3 v return sp.simplify(x1 2 * x2 - x3) 0 # 写成含自由参数的通用元素而不是取具体数值 u sp.Matrix([a, b, 2 * a b]) v sp.Matrix([c, d, 2 * c d]) print(sp.simplify(in_S(u v))) # True加法封闭 print(sp.simplify(in_S(k * u))) # True数乘封闭逻辑说明u和v用自由参数 a、b、c、d 展开覆盖了 S 中的任意元素所以验证结论对整个集合成立。in_S把约束 x₁ 2x₂ − x₃ 0 写成判定函数若化简结果恒为零则返回 True。参数说明realTrue让 SymPy 在化简时按实数域处理如果题目要求的是复线性空间这里必须改成complexTrue否则符号引擎可能给出在实数域成立、在复数域不成立的结论。2.3 数域选择数乘封闭性最隐蔽的失效点封闭性验证里最容易翻车的是数乘这一条。题目说“数域 F 上的线性空间”乘子 k 就必须取自 F。取错数域一个反例就能把结论推翻实数域上 S {(x₁, x₂) | x₁, x₂ ∈ ℝ} 看起来是标准的二维子空间但允许复数作乘子时i · (1, 0) (i, 0) 立刻跑出集合S 在 ℂ 上不封闭。反过来有些集合在 ℝ 上不封闭却在 ℂ 上封闭的情况不存在——数域扩大会让约束变紧封闭性只会更难满足不会更容易。所以做题时先确认数域再看约束条件里有没有出现共轭、模长这类只在复数域有意义的结构。凡出现“共轭”的集合基本可以锁定数域为 ℂ这时候 k 的取值范围必须跟着改。2.4 常见判据与反例对照集合形式是否子空间判据常见误判x₁ 2x₂ − x₃ 0是齐次零元在两条封闭成立无x₁ x₂ 1否零元不在代入两个解发现加法成立就判“是”x₁x₂ 0否加法不封闭(1,0)(0,1)(1,1)只验数乘忘了加法对称矩阵全体是转置不变AB、kA 仍对称无行列式为 1 的 n 阶矩阵否AB 行列式一般不为 1把 det 当线性函数实数域上取复乘子否数乘跑出数域忘记确认数域注意行列式、范数、模长这类量都不满足线性性凡约束条件里出现它们先怀疑不是子空间然后去构造加法反例通常十秒内就能找到。3. 线性变换的核空间与矩阵零空间同一件事的两套语言3.1 核空间的定义为什么不等于零空间整理版解答里有一句加粗提醒“注意线性变换的核空间与矩阵核空间的区别”。这句话值一顿饭钱。线性变换 T: V → W 的核定义为 ker(T) {v ∈ V | T(v) 0}这里的 v 是抽象向量空间里的元素可能是多项式、矩阵、函数也可能是某个线性空间里的向量跟“坐标”没关系。而矩阵 A 的零空间 N(A) {x ∈ Fⁿ | Ax 0} 是定义在坐标空间 Fⁿ 上的。两者通过基建立联系一旦给 V 和 W 各取一组基T 就有了表示矩阵 A此时 v 的坐标向量 x 满足 Ax 0 当且仅当 v ∈ ker(T)。换句话说ker(T) 是同构意义下的抽象对象N(A) 是它在某组基下的坐标表示。维数一样元素不一样。写证明时把 ker(T) 直接写成“满足 Ax 0 的 x 的集合”在抽象空间题里就是概念性错误。3.2 维数定理怎么用来反推维数维数定理写成 dim ker(T) dim im(T) dim V也常写成 rank(A) nullity(A) n。这条定理在习题解答里出现频率极高用法有两种一种是已知变换的秩求核的维数另一种是已知核的维数反推像的维数再判断满射/单射的可能性。一个典型用法是判断线性变换能否单射。T: V → W 单射的充要条件是 ker(T) {0}也就是 nullity 0代入维数定理就得到 rank dim V于是 dim W ≥ dim V 成为必要条件。这个不等式能直接排除掉一批“看起来可能单射”的题目比硬构造反证快得多。3.3 用 NumPy 求核基与像基抽象定义容易记混落到代码上反而清晰。下面这段用 SVD 求核空间和列空间的标准正交基并顺手验证维数定理。import numpy as np from scipy.linalg import null_space, orth A np.array([[1., 2., -1.], [2., 4., -2.], [0., 1., 1.]]) n A.shape[1] # 定义域维数 dim V ker null_space(A) # ker(A) 的一组标准正交基按列排列 im orth(A) # im(A)列空间的一组标准正交基 print(dim ker , ker.shape[1]) print(dim im , im.shape[1]) assert ker.shape[1] im.shape[1] n # 维数定理自检 print(A ker ≈ 0 ?, np.allclose(A ker, 0, atol1e-10))逻辑说明null_space内部走 SVD把奇异值小于阈值的右奇异向量取出来组成核的基orth类似取非零奇异值对应的左奇异向量。最后一行A ker是直接把定义 ker(A) {x | Ax 0} 拿来做数值验证比人眼检查舒尔补更可靠。参数说明null_space的阈值参数rcond默认为max(M, N) * eps对接近秩亏的矩阵比如某一行是另两行的近似线性组合要显式调大否则会把本应属于核的方向误判为非零奇异方向。矩阵用float而不是int是为了避免 SciPy 走整数分支后 dtype 被截断。提示核基向量按列还是按行取决于你的教材约定。NumPy 和 SciPy 统一按列写论文或作业时如果约定是行向量记得转置别在最后一步前功尽弃。3.4 核与像在题目里的四个高频结论第一T 单射等价于 ker(T) {0}这一条在证明“线性变换可逆”时几乎必用。第二im(T) 是由基像张成的子空间T(α₁), …, T(αₙ) 的极大线性无关组就是 im(T) 的基所以只要求出像的秩基就确定了。第三ker(T) 是 V 的子空间这点常被当作显然但证明时必须回到子空间判据验证零元、加法、数乘三条。第四有限维下 dim V dim ker(T) dim im(T) 对任意线性变换成立不需要 T 可逆这是它比“秩等于非零行数”更强的形式。4. 酉空间与标准正交基复数域上的内积与正交化4.1 实内积空间与酉空间差在哪两条实内积空间里内积是对称的(x, y) (y, x)正定性要求 (x, x) ≥ 0 且等号只在 x 0 时成立。酉空间把对称改成共轭对称(x, y) conj((y, x))。这一改直接导致两个后果一是 (x, x) 必为实数否则正定性没法谈二是内积对第二个变量线性对第一个变量共轭线性也就是 (kx, y) conj(k)(x, y)而 (x, ky) k(x, y)。第二条差异是正交化的公式形式。实空间里正交化写 w v − Σ(qᵢ, v)qᵢ系数 (qᵢ, v) 是实数顺序无所谓。酉空间里同一个式子仍然成立但 (qᵢ, v) 的定义必须是 qᵢᴴv也就是对第一个变量取共轭。很多人在复数域上直接套实空间公式把系数写成 qᵢᵀv结果做完“正交化”回代发现残差非零问题就出在这一个共轭上。性质实内积空间酉空间对称性(x, y) (y, x)(x, y) conj((y, x))第一变量线性共轭线性正定性(x, x) ≥ 0(x, x) ≥ 0且必为实数正交化系数(qᵢ, v)qᵢᴴ v许瓦茨不等式|(x,y)| ≤ ‖x‖‖y‖同形式模长取复数模标准正交基判定QᵀQ IQᴴQ I4.2 复数域上的 Schmidt 正交化施密特正交化的思路没变逐个取向量减掉它在已有正交基上的投影再单位化。变的是投影系数的写法。下面给出一个带线性相关判定的实现。import numpy as np def gram_schmidt_complex(vectors, tol1e-10): basis [] for v in vectors: w np.array(v, dtypecomplex) for q in basis: # np.vdot(q, w) 等价于 q^H w对第一个参数取共轭 w w - np.vdot(q, w) * q n np.linalg.norm(w) if n tol: # 与已有基线性相关跳过 continue basis.append(w / n) return np.array(basis) V np.array([[1, 0, 1j], [0, 1, 1], [1j, 1, 1]], dtypecomplex) Q gram_schmidt_complex(V) print(Q^H Q \n, np.round(Q.conj().T Q, 12)) # 应为单位阵逻辑说明内层循环依次减去 w 在每个已有正交基向量 q 上的分量np.vdot(q, w)计算的是 q 的共轭转置乘 w正好对应酉空间内积 (q, w)。减去之后剩下的部分与所有 q 正交。n tol是线性相关判定如果当前向量落在已张成子空间内投影后范数趋近零直接丢弃避免除以接近零的数导致数值爆炸。参数说明tol默认 1e-10针对双精度输入如果输入矩阵本身条件数很差比如来自病态问题建议放宽到 1e-8 并配合np.linalg.matrix_rank交叉验证秩。返回的Q每行是一个基向量若你的约定是列向量输出前转置。4.3 正交化后怎么用标准正交基的价值在于把矩阵运算简化成投影运算。求向量在子空间上的投影从解正规方程 AᴴAx Aᴴb 变成直接做内积 p Σ(qᵢ, b)qᵢ一行代码搞定。求最小二乘解、判断子空间包含关系、把一般矩阵对角化都可以建立在标准正交基之上。整理版解答里 2.8 题用两个带位置参数的向量验证标准正交基考的正是“内积为零、范数为 1”这两个条件写答案时把 (αᵢ, αⱼ) δᵢⱼ 亮出来就够了不用逐个展开坐标。5. 用符号计算反向校验整理版答案5.1 先找反例再谈证明整理版里明确写了“此方法不一定正确”那最有效的用法是把它当待证伪的命题。给定一条解答声称“对所有满足条件的 x 成立”先想一件事如果它错了最小的反例会出现在哪个维度。矩阵分析里多数反例出现在二维和三维因为二维能暴露共轭、对称性的问题三维能暴露维数定理和核像关系的问题。构造反例的写法很直接把解答里的通用结论代入随机整数矩阵跑一遍数值验证不为零就是反例。import numpy as np rng np.random.default_rng(42) fail [] for _ in range(2000): A rng.integers(-3, 4, size(3, 3)).astype(float) B rng.integers(-3, 4, size(3, 3)).astype(float) if np.linalg.matrix_rank(A) 2 or np.linalg.matrix_rank(B) 2: continue # 跳过退化的随机样本 lhs np.linalg.det(A B) rhs np.linalg.det(A) * np.linalg.det(B) if not np.isclose(lhs, rhs, atol1e-8): fail.append((A, B)) print(反例数量, len(fail))逻辑说明固定随机种子保证结果可复现循环里先过滤掉秩亏的样本避免退化情形干扰判定。np.isclose而不是因为浮点乘法的误差会累积。参数说明size(3,3)决定矩阵阶数改成(2,2)能更快跑完但反例覆盖度低atol取 1e-8 对三阶行列式足够若升到六阶以上建议放宽到 1e-6。5.2 一份可以复用的校验脚本骨架把校验做成固定流程比每次临时写脚本划算。常见做法是准备一个check.py输入是题目编号和候选答案表达式输出是三类结果符号化简恒零、数值随机验证通过、发现反例。符号化简用 SymPy 的simplify(expr) 0数值验证用 NumPy 随机矩阵两者结论冲突时以符号结果为准因为数值上恒零的表达式可能只是在采样点上凑巧成立。对于核空间、像空间、维数定理这类结构性问题优先用 SVD 和matrix_rank做数值验证对于等式恒等这类代数问题优先用符号计算。两条路并行跑能挡掉绝大多数“整理版里抄错一个共轭或一个转置”的坑。本文还有配套的精品资源点击获取