一、前言在数值线性代数中矩阵分解是解决大规模计算问题的核心工具。前面我们已经学习了 QR 分解——它将任意矩阵拆分为正规正交矩阵QQQ和上三角矩阵RRR的乘积。今天我们来学习矩阵分解家族中另一个重要成员Cholesky 分解。与 QR 分解不同Cholesky 分解只针对一类特殊矩阵但它分解出的结果更加优雅计算效率也更高。二、什么是 Cholesky 分解Cholesky 分解将一个矩阵A分解为一个下三角矩阵 L及其共轭转置 LH的乘积AL⋅LH\boxed{A L \cdot L^H}AL⋅LH其中L是下三角矩阵对角线上方元素全为 0LH是 L 的共轭转置Hermitian Transpose⚠️ 适用条件A 必须是埃尔米特矩阵或实对称矩阵否则 Cholesky 分解不适用。矩阵类型条件举例实对称矩阵AATA A^TAAT[1225]\begin{bmatrix}1 2\\2 5\end{bmatrix}[1225]埃尔米特矩阵AAHA A^HAAH[1−2j2j5]\begin{bmatrix}1 -2j\\2j 5\end{bmatrix}[12j−2j5]简单来说矩阵必须关于对角线对称——实数矩阵看转置相等复数矩阵看共轭转置相等。三、NumPy 中的 Cholesky 分解NumPy 提供了np.linalg.cholesky()函数来执行 Cholesky 分解项目说明函数np.linalg.cholesky(A)参数 A实对称矩阵或埃尔米特矩阵二维数组返回值下三角矩阵 L满足AL⋅LHA L \cdot L^HAL⋅LH验证方法np.dot(L, L.T.conj())应等于原矩阵 A执行步骤Step 1 → 定义矩阵 A埃尔米特/实对称 Step 2 → 调用 np.linalg.cholesky(A) Step 3 → 查看下三角矩阵 L 的值 Step 4 → 验证 L × L^H A四、实战两个完整示例示例一复埃尔米特矩阵矩阵A[1−2j2j5]A \begin{bmatrix}1 -2j\\2j 5\end{bmatrix}A[12j−2j5]满足AAHA A^HAAH是一个典型的埃尔米特矩阵。importnumpyasnp# A 必须是埃尔米特矩阵或实对称矩阵Anp.array([[1,-2j],[2j,5]])# 执行 Cholesky 分解Lnp.linalg.cholesky(A)分解结果请自行查看原始矩阵 A 和下三角矩阵 L 的值L array([[1.0.j, 0.0.j], [0.2.j, 1.0.j]])可以看到 L 是一个下三角矩阵——对角线上方全为 0完全符合预期。接下来进行验证# 验证L * L.H 应该等于 Anp.dot(L,L.T.conj())输出array([[1.0.j, 0.-2.j], [0.2.j, 5.0.j]])结果与原矩阵 A 完全一致Cholesky 分解验证通过示例二实对称矩阵矩阵A[1225]A \begin{bmatrix}1 2\\2 5\end{bmatrix}A[1225]满足AATA A^TAAT是一个实对称矩阵或二维数组。# 实对称矩阵或二维数组Anp.array([[1,2],[2,5]])# 执行 Cholesky 分解Lnp.linalg.cholesky(A)分解结果L array([[1., 0.], [2., 1.]])继续验证# 验证L * L.H 应该等于 Anp.dot(L,L.T.conj())输出array([[1., 2.], [2., 5.]])结果再次与原矩阵 A 完全一致验证通过五、与 QR 分解的对比对比项QR 分解Cholesky 分解公式xQ⋅Rx Q \cdot RxQ⋅RAL⋅LHA L \cdot L^HAL⋅LH适用范围任意矩阵埃尔米特/实对称矩阵Q正规正交矩阵—R上三角矩阵—L—下三角矩阵LH—共轭转置NumPy 函数np.linalg.qr(x)np.linalg.cholesky(A)验证q * r xL * L.H A两者各有优势QR 分解适用范围广任何矩阵都能分解Cholesky 分解仅适用于对称矩阵但计算更高效、结果更紧凑六、小结通过以上两个示例我们分别用复埃尔米特矩阵和实对称矩阵完成了 Cholesky 分解并通过L×LHL \times L^HL×LH的乘积验证了分解的正确性。核心要点速记✅ 公式A L · Lᴴ ✅ 条件A 必须是埃尔米特矩阵或实对称矩阵 ✅ 函数np.linalg.cholesky(A) ✅ 返回下三角矩阵 L ✅ 验证np.dot(L, L.T.conj()) A七、课后思考思考题如果矩阵不满足对称条件强行调用np.linalg.cholesky()会怎样请自行验证。提示NumPy 会抛出LinAlgError异常提示矩阵不是正定矩阵。参考内容本文代码、注释与输出结果均引自 NumPy 线性代数教程 1.2.17 节Cholesky 分解。如果这篇文章对你有帮助欢迎点赞 收藏 ⭐ 关注 后续会持续更新 NumPy 线性代数系列