· 线性代数

7 · 矩阵分解总览

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

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


一、五大分解速查表

分解形式适用矩阵主要用途
LU$\mathbf{A}=\mathbf{L}\mathbf{U}$方阵解线性方程组、求行列式
QR$\mathbf{A}=\mathbf{Q}\mathbf{R}$任意(列无关)最小二乘、正交化
Cholesky$\mathbf{A}=\mathbf{L}\mathbf{L}^\top$对称正定协方差、最优化(比 LU 快一倍)
特征分解$\mathbf{A}=\mathbf{P}\mathbf{\Lambda}\mathbf{P}^{-1}$可对角化方阵PCA、动力系统、幂运算
SVD$\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),二者都利用了对称正定结构。