· 线性代数 · 第 7 / 10 讲

7 · 矩阵分解总览

把 LU、QR、Cholesky、特征分解、SVD 放在一起对比,遇到问题时能选对工具。

前面各节出现了多种分解(LU、QR、特征、SVD)。本节把它们放在一起对比,让你遇到问题时能「选对工具」。一句话:分解就是把一个复杂矩阵拆成几个结构简单、易于计算的矩阵乘积


一、五大分解速查表

分解形式适用矩阵主要用途
LUA=LU\mathbf{A}=\mathbf{L}\mathbf{U}方阵解线性方程组、求行列式
QRA=QR\mathbf{A}=\mathbf{Q}\mathbf{R}任意(列无关)最小二乘、正交化
CholeskyA=LL\mathbf{A}=\mathbf{L}\mathbf{L}^\top对称正定协方差、最优化(比 LU 快一倍)
特征分解A=PΛP1\mathbf{A}=\mathbf{P}\mathbf{\Lambda}\mathbf{P}^{-1}可对角化方阵PCA、动力系统、幂运算
SVDA=UΣV\mathbf{A}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^\top任意矩阵降维、压缩、伪逆、推荐

二、怎么选

三、一个统一视角

这些分解都在回答同一个问题的不同侧面:怎么把一个变换拆成「旋转·缩放·旋转」或「简单×简单」这种易算的组合。 SVD 是最普适的那个,其他可看作特殊情形下的高效版本。

四、NumPy / SciPy 代码

import numpy as np
from scipy.linalg import lu, cholesky, qr

A = np.array([[4.0, 2.0], [2.0, 3.0]])    # 对称正定

P, L, U = lu(A)                            # LU
Q, R = qr(A)                               # QR
Lc = cholesky(A, lower=True)               # Cholesky
vals, vecs = np.linalg.eig(A)              # 特征分解
Uu, S, Vt = np.linalg.svd(A)               # SVD

print("Cholesky 还原:\n", Lc @ Lc.T)         # ≈ A
print("奇异值:", S, " 特征值:", vals)

五、动手想一想

  1. 你要做一个推荐系统,评分矩阵是 10万×2万且极稀疏,选哪种分解?
  2. 协方差矩阵总是对称半正定,这提示你用哪两种分解都合适?

答案:(1) 截断 SVD / 矩阵分解(隐因子模型),只保留少数奇异值即可补全稀疏评分。(2) Cholesky(解线性系统更快)与特征分解(PCA),二者都利用了对称正定结构。