
简介《线性代数导论》第5版中文版由Gilbert Strang撰写、高等教育出版社出版是MIT 18.06公开课配套教材面向具备一定数学基础的本科生、研究生及工程、计算机、数据科学领域从业者帮助读者系统建立线性代数知识体系并理解其几何本质。资源为1个PDF文件压缩包约46.25MB完整呈现原书内容涵盖向量与线性组合、矩阵四个基本子空间、行列式、特征值与特征向量、奇异值分解、最小二乘法、线性变换、复数矩阵与快速傅里叶变换等核心章节新版还加入概率统计与数据理解内容。书中每节开头附概要便于快速回顾与记忆并配有视频课程、习题解答与MATLAB/Python代码等教学资源适合作为高校课程主教材或自学参考也可用于机器学习、信号处理、图像识别等方向的数学基础夯实。目前已有3303人学习。1. 为什么我劝你先别急着翻到特征值那一章如果你正在搜「线性代数导论 GilbertStrang」大概率不是想听人复述行列式怎么展开。你可能是被网课里那句“矩阵就是线性变换”点了一下回头翻自己手头的教材发现满篇定义堆砌根本串不起来也可能是做图像处理、机器学习或者控制方向发现自己卡在特征分解、奇异值分解这些概念上代码能跑但心里没底。这份《线性代数导论》原书第五版中文版就是 Gilbert Strang 那本被无数课程当作底教材的经典。它的价值不在于题多而在于把矩阵、向量空间、正交性、特征值、SVD 这条线用几何直觉串成一条能走通的路。适合谁适合已经学过一遍线代但没学透、想重新建立框架的人也适合需要把线代当工具用的工程师。但我要先泼一盆冷水这本书不是速查手册直接翻到特征值章节你会更晕得按它的节奏来。2. 先看清这本书的骨架从消元到 SVD 的四段式结构2.1 为什么它把消元法放在第一章而不是行列式很多国内教材习惯先讲行列式再讲矩阵再讲线性方程组。Strang 这本第五版反过来开篇就是高斯消元用矩阵乘法去描述消元过程。这个顺序不是随意排的它背后有一个很实际的理由消元是唯一一个你手算就能完成、且能直接对应到计算机求解的步骤。你写一个LU分解本质上就是把消元过程记录下来后面解方程、求逆、算行列式全都能复用这个分解结果。我一般会建议读者在第一章就动手把下面这个消元过程用代码复现一遍而不是只用眼睛看import numpy as np # 构造一个 3x3 矩阵模拟教材里常见的消元例子 A np.array([[2.0, 1.0, 1.0], [4.0, -6.0, 0.0], [-2.0, 7.0, 2.0]]) # 手动做一次 LU 分解观察消元乘数 from scipy.linalg import lu P, L, U lu(A) print(置换矩阵 P:\n, P) print(下三角 L:\n, L) print(上三角 U:\n, U) # 验证 PA LU print(PA - LU 的误差范数:, np.linalg.norm(P A - L U))这段代码的逻辑说明scipy.linalg.lu返回的是带部分主元选取的分解P是置换矩阵L是单位下三角U是上三角。参数上你不需要改什么但要注意A必须是浮点数组整数数组在某些版本会报类型错误。跑完之后你会看到L里的元素就是消元乘数U就是消元后的上三角。这个对应关系一旦建立后面讲矩阵乘法、逆矩阵、甚至行列式符号变化你都能用同一套语言去理解。2.2 四个核心模块的依赖关系这本书的章节不是并列的而是有明确的依赖链。我把它的骨架拆成四段模块对应章节核心概念后续依赖消元与矩阵运算第 1-2 章高斯消元、LU 分解、矩阵乘法所有后续章节向量空间与正交性第 3-4 章四个基本子空间、投影、最小二乘特征值、SVD特征值与对角化第 5-6 章特征方程、相似对角化、对称矩阵SVD、微分方程SVD 与应用第 7 章及后续奇异值分解、伪逆、图像压缩数据压缩、降维这个表不是让你背的是让你在卡住的时候定位自己缺了哪一块。比如你看不懂 SVD 的几何意义大概率不是 SVD 本身难而是第 4 章的投影和正交基没吃透。常见做法是回头把第 4 章的重心放在“为什么投影矩阵是 (P A(A^T A)^{-1}A^T)”这个推导上而不是急着往后翻。2.3 中文版第五版的章节调整与阅读顺序建议第五版相比第四版在章节顺序上做了一些调整最明显的是把 SVD 提前到了第 7 章而不是放在最后。这个改动对自学者其实更友好因为 SVD 是连接线代和实际应用最直接的一座桥。但我不建议你从第 7 章开始读因为 SVD 的推导依赖特征值和对称矩阵的性质。我一般会建议两条阅读路线如果你是为了考试或补基础按 1 → 2 → 3 → 4 → 5 → 6 → 7 的顺序走每章做完前两节就停下来把例题手算一遍。如果你是为了用工具按 1 → 2 → 4 → 7 → 5 → 6 的顺序走先建立消元、正交、SVD 这条应用线再回头补特征值的理论细节。两条路线的共同点是第 1 章和第 2 章不能跳。消元不熟后面所有分解你都只能看个热闹。3. 把书里的矩阵运算落到 NumPy四个必须亲手敲一遍的片段3.1 四个基本子空间的数值验证Strang 在书里反复强调四个基本子空间列空间、零空间、行空间、左零空间。这四个空间的关系用一句话概括就是行空间和零空间正交列空间和左零空间正交且行空间和列空间的维数都等于秩。光看这句话很容易滑过去但如果你用代码验证一遍印象会完全不一样。import numpy as np from scipy.linalg import null_space, orth # 构造一个秩为 2 的 3x4 矩阵 A np.array([[1.0, 2.0, 3.0, 4.0], [2.0, 4.0, 6.0, 8.0], [1.0, 1.0, 1.0, 1.0]]) # 计算秩 rank np.linalg.matrix_rank(A) print(矩阵的秩:, rank) # 列空间的一组正交基 col_basis orth(A) print(列空间基的形状:, col_basis.shape) # 零空间的一组正交基 null_basis null_space(A) print(零空间基的形状:, null_basis.shape) # 验证零空间向量与行空间正交 row_space orth(A.T) for v in null_basis.T: for u in row_space.T: dot np.dot(u, v) print(f行空间基与零空间基的内积: {dot:.2e})逻辑说明orth返回的是列空间的一组标准正交基null_space返回的是零空间的标准正交基。参数上没有什么需要调的但你要注意A的秩如果是浮点误差导致的matrix_rank可能会给出比你预期大一点的数。这时候可以手动设一个容差比如np.linalg.matrix_rank(A, tol1e-10)。跑完这段代码你会看到行空间基和零空间基的内积都在 (10^{-16}) 量级这就是数值上的正交。这个验证比看十遍定义都管用。3.2 特征分解与对称矩阵的对角化书里讲对称矩阵一定可以对角化而且特征向量可以选成标准正交的。这个性质在数值计算里非常关键因为对称矩阵的特征分解比一般矩阵稳定得多。我一般会让学生用下面这段代码去对比一个对称矩阵和一个非对称矩阵的特征分解差异import numpy as np # 对称矩阵 S np.array([[4.0, 1.0, 0.0], [1.0, 3.0, 1.0], [0.0, 1.0, 2.0]]) # 非对称矩阵 N np.array([[4.0, 1.0, 0.0], [0.0, 3.0, 1.0], [0.0, 0.0, 2.0]]) # 对称矩阵的特征分解 eigvals_s, eigvecs_s np.linalg.eigh(S) print(对称矩阵特征值:, eigvals_s) print(对称矩阵特征向量正交性检查:) print(np.dot(eigvecs_s.T, eigvecs_s)) # 非对称矩阵的特征分解 eigvals_n, eigvecs_n np.linalg.eig(N) print(非对称矩阵特征值:, eigvals_n) print(非对称矩阵特征向量正交性检查:) print(np.dot(eigvecs_n.T, eigvecs_n))逻辑说明np.linalg.eigh专门用于对称矩阵返回的特征值默认升序排列特征向量矩阵是正交矩阵。np.linalg.eig用于一般矩阵返回的特征向量不一定正交甚至可能是复数。参数上eigh有一个UPLO参数可以指定用上三角还是下三角默认是L一般不用改。跑完你会看到对称矩阵的特征向量内积矩阵接近单位阵而非对称矩阵的不是。这个差异在书里是用定理形式给出的但代码跑一遍你就知道为什么数值计算里大家偏爱对称矩阵了。3.3 SVD 的几何意义与图像压缩小实验SVD 是这本书里最值得动手的一个知识点。书里用旋转、拉伸、再旋转来解释 (A U\Sigma V^T)这个几何解释比公式本身更重要。我一般会用一个简单的图像压缩实验来收尾import numpy as np from PIL import Image # 读取一张灰度图转成矩阵 img Image.open(sample_gray.jpg).convert(L) A np.array(img, dtypefloat) # 做 SVD U, sigma, Vt np.linalg.svd(A, full_matricesFalse) # 只保留前 k 个奇异值 k 50 sigma_k np.zeros_like(sigma) sigma_k[:k] sigma[:k] A_compressed U np.diag(sigma_k) Vt # 保存压缩后的图像 Image.fromarray(A_compressed).convert(L).save(compressed_k50.jpg) print(原始矩阵形状:, A.shape) print(前 10 个奇异值:, sigma[:10]) print(保留能量占比:, np.sum(sigma[:k]**2) / np.sum(sigma**2))逻辑说明np.linalg.svd返回的sigma是奇异值向量按降序排列。full_matricesFalse表示返回经济型 SVD对于图像矩阵来说可以节省内存。参数k是你保留的奇异值个数k 越大压缩越少但保留细节越多。跑完这段代码你会看到前 10 个奇异值下降得非常快保留 50 个奇异值就能抓住大部分能量。这个实验的意义在于它把书里抽象的“低秩逼近”变成了一个你能看到结果的压缩过程。3.4 用最小二乘拟合一条直线最小二乘是第 4 章的核心应用也是连接线代和统计的桥梁。书里用投影矩阵推导了最小二乘解我一般会用一个带噪声的线性拟合来验证import numpy as np import matplotlib.pyplot as plt # 生成带噪声的数据 np.random.seed(42) x np.linspace(0, 10, 50) y 2.5 * x 1.0 np.random.normal(0, 2.0, sizex.shape) # 构造设计矩阵 A np.vstack([x, np.ones_like(x)]).T # 最小二乘解 coeffs, residuals, rank, sv np.linalg.lstsq(A, y, rcondNone) print(拟合斜率与截距:, coeffs) # 画图 plt.scatter(x, y, label带噪声数据) plt.plot(x, A coeffs, colorred, label最小二乘拟合) plt.legend() plt.savefig(least_squares_fit.png)逻辑说明np.linalg.lstsq直接返回最小二乘解rcondNone表示使用默认的奇异值截断阈值。参数上你不需要改什么但要注意A的列数不能超过行数否则方程欠定。跑完你会看到拟合出的斜率和截距接近真实值。这个实验的价值在于它让你看到投影矩阵和最小二乘解是同一件事的两种说法。4. 避坑与排查自学者最容易翻车的五个地方4.1 跳过消元直接看特征值结果符号全乱现象翻到第 5 章看到特征多项式展开符号一会儿正一会儿负算出来的特征值跟答案对不上。原因消元过程中主元交换会改变行列式符号而特征多项式本质上是一个行列式。如果你在第 1 章没有把置换矩阵和行列式符号的关系搞清楚到第 5 章就会在符号上反复翻车。解决回头把第 1 章关于置换矩阵的部分重看一遍亲手算几个带主元交换的 LU 分解确认每次交换带来的符号变化。常见做法是写一个 3x3 矩阵手动做两次行交换然后对比np.linalg.det的结果。4.2 把np.linalg.eig和np.linalg.eigh混用现象对一个对称矩阵用eig分解得到的特征向量矩阵不正交后面做投影时结果不对。原因eig是通用特征分解不保证对称矩阵的特征向量正交eigh专门针对对称矩阵利用了对称性返回正交特征向量。解决只要你的矩阵是对称的一律用eigh。判断对称性可以用np.allclose(A, A.T)。这个习惯能帮你省掉很多调试时间。4.3 SVD 的full_matrices参数导致内存爆炸现象对一张大图像做 SVD程序直接卡死或者报内存不足。原因np.linalg.svd默认full_matricesTrue会返回完整的 (U) 和 (V^T)对于 (m \times n) 矩阵(U) 是 (m \times m)(V^T) 是 (n \times n)。图像矩阵动辄几千乘几千内存直接吃满。解决做图像压缩或降维时一律设full_matricesFalse返回经济型 SVD。这样 (U) 是 (m \times k)(V^T) 是 (k \times n)其中 (k \min(m, n))。4.4 最小二乘的rcond参数不设导致警告现象调用np.linalg.lstsq时出现FutureWarning提示rcond参数将来会改变默认行为。原因NumPy 在新版本里对rcond的默认值做了调整不显式设置会触发警告。解决显式传入rcondNone表示使用机器精度的倍数作为截断阈值。如果你的设计矩阵条件数很大可以手动设一个更小的值比如rcond1e-10。4.5 只看中文版不看英文术语查资料时对不上号现象想搜某个概念的更多解释用中文关键词搜出来的结果质量参差不齐用英文搜又不知道对应哪个词。原因这本书的中文版翻译整体质量不错但一些术语和通用译法有差异比如“零空间”对应 null space“左零空间”对应 left null space。解决在书旁边放一张术语对照表遇到卡住的概念先查英文原词再用英文关键词去搜。常见做法是在书的第一页空白处手写几个核心术语的英文翻的时候顺手看一眼。5. 把这本书用成工具书我的三个进阶习惯第一个习惯是每学完一个分解就去找一个实际数据跑一遍。比如学完 LU 分解我会拿一个电路网络或者结构力学里的稀疏矩阵去试看看消元后的稀疏性变化。学完 SVD我会拿一张自己的照片做不同 k 值的压缩对比观察什么时候开始出现明显块状伪影。这个习惯的好处是你不再把分解当成数学题而是当成一个可以调参的工具。第二个习惯是建立自己的“反例库”。书里的定理大多有前提条件比如“对称矩阵一定可以对角化”但“可对角化矩阵不一定对称”。我会刻意去找一些边界情况比如特征值重复但特征向量不够的矩阵用代码验证它不能对角化。这个反例库在你后面看论文或者调库的时候非常有用因为很多数值算法的稳定性讨论都建立在“最坏情况”上。第三个习惯是定期回头翻第 2 章和第 4 章。这两章是整本书的枢纽第 2 章的矩阵乘法视角和第 4 章的正交投影视角几乎贯穿了后面所有章节。我自己的经验是每次卡住的时候回到这两章重新看一遍相关小节往往比硬啃当前章节更有效。最后说一个具体的技巧如果你打算把这本书当长期参考建议在扉页贴一张手写的“分解关系图”把 LU、QR、特征分解、SVD 之间的依赖和适用条件画成一张网。这张图不用很漂亮但一定要自己画。画的过程本身就是一次梳理。从那以后我每次遇到一个新的矩阵分解都会先问自己三个问题它依赖什么前提它和已有分解是什么关系它在数值上稳定不稳定。希望帮到你。本文还有配套的精品资源点击获取