Cholesky 分解模拟器 返回
数值分析

Cholesky 分解模拟器

用于将对称的 3×3 矩阵分解为 A=LLᵀ(下三角矩阵的乘积)的工具。改变对角元素和非对角元素时,通过 Sylvester 判定法的正定性检查、下三角矩阵 L 的各分量、行列式,以及恰好为 LU 分解一半的操作数都会实时计算。

参数设置
设置对称矩阵 A 的 3 个对角元素和 3 个非对角元素。对称性会自动保持,A[i][j]=A[j][i]。
对角元素 a₁₁
对角元素 a₂₂
对角元素 a₃₃
非对角元素 a₁₂ = a₂₁
非对角元素 a₁₃ = a₃₁
非对角元素 a₂₃ = a₃₂
增加非对角元素会使正定性更容易被破坏。
计算结果
正定性
L₁₁
L₂₁
L₂₂
L₃₃
行列式 det(A)
矩阵 A 和下三角因子 L — 分解动画

左侧为输入矩阵 A,右侧为下三角因子 L。每个单元格根据值的大小改变颜色,L 的分量按 L₁₁→L₂₁→L₃₁→L₂₂→L₃₂→L₃₃ 的计算顺序高亮显示。如果矩阵不是正定的,则显示无法分解的提示。

主子式(Sylvester 判定法)
操作数比较(Cholesky、LU、逆矩阵)
理论与主要公式

$$A=LL^{\mathsf T},\qquad L_{jj}=\sqrt{A_{jj}-\sum_{k\lt j}L_{jk}^2}$$

对称正定矩阵 A 可以分解为下三角矩阵 L 与其转置 Lᵀ 的乘积。对角元素 L_jj 的计算方法是从对应的 A 的对角元素中减去已求出的行的平方和,再取平方根。

$$L_{ij}=\frac{1}{L_{jj}}\Big(A_{ij}-\sum_{k\lt j}L_{ik}L_{jk}\Big)\quad(i\gt j)$$

非对角元素 L_ij(i>j)的计算方法是从 A_ij 中减去已求出分量的乘积和,再除以对角元素 L_jj。如果平方根的参数变为 0 或更小,则该矩阵不是正定的。

$$\det(A)=(L_{11}L_{22}L_{33})^2,\qquad \text{操作数}\approx \tfrac{n^3}{3}$$

行列式等于 L 的对角元素乘积的平方。Cholesky 分解的操作数约为 n³/3,恰好是 LU 分解(约 2n³/3)的一半。

什么是 Cholesky 分解

🙋
我听说过"Cholesky 分解"这个名字,但最终做的是什么计算呢?
🎓
简单地说,就是将某个矩阵 A"改写为下三角矩阵 L 与其转置 Lᵀ 的乘积"的计算。也就是 A=LLᵀ。这有点像用平方根分解数字的方式,可以看作矩阵的平方根版本。比如 4 分解为 2×2 一样,矩阵 A 分解为 L×Lᵀ。这样做的好处是,线性方程组 Ax=b 可以分成两个阶段(下三角和上三角)快速求解。
🙋
任何矩阵都可以分解吗?当我把左边的非对角元素 a₂₃ 增大时,突然变成"非正定"红色了。
🎓
你注意到了一个很关键的点。Cholesky 分解只能用于"对称"且"正定"的矩阵。对称的意思是 A[i][j]=A[j][i],正定的意思是无论什么向量 x,xᵀAx 总是正的。当非对角元素太大时,矩阵就不再是正定的了。这样的话,在分解过程中就会遇到"负数的平方根",计算就会崩溃。所以左边的图变红,就是进入了"无法分解"的区域的信号。
🙋
怎样才能判断矩阵是否正定呢?每次都试遍所有向量是不可能的吧。
🎓
这就要用到"Sylvester 判定法"了。从左上角开始逐渐扩大的小正方形矩阵的行列式——称为主子式 M1, M2, M3——只要全部为正,矩阵就是正定的。下面的条形图就是那三个 M1、M2、M3。更有意思的是,Cholesky 分解本身就是最便宜的测试方法。实际上试试看能否分解,如果过程中平方根的参数变为 0 或更小,就立刻明白"这个矩阵不是正定的"。不需要另外做特殊的判定。
🙋
我也学过 LU 分解。Cholesky 分解和 LU 分解怎样区分使用呢?
🎓
LU 分解是适用于任何正方矩阵的万能选手。而 Cholesky 分解是"对称正定"专用的特化版。因为专用,所以计算更快。LU 的操作数是约 2n³/3,但 Cholesky 利用对称性,操作数约为 n³/3——恰好是一半。所需的存储空间也只是下三角部分。另外,Cholesky 分解不需要进行列选主元,数值稳定性更好,所以对于"已知是对称正定的系统",按惯例应该选 Cholesky。下面"操作数比较"的图表中,和整个逆矩阵计算的 n³ 相比,Cholesky 是最小的。
🙋
速度这么快,稳定性也好,那在实际的分析软件中也经常用吗?
🎓
完全同意。有限元法(FEM)的刚度矩阵通常是对称正定的,求解其线性方程组 Ku=f 的直接法求解器的核心就是 Cholesky 分解。除此之外还有最小二乘法的正规方程、Kalman 滤波器和高斯过程中出现的协方差矩阵处理、相关随机数的采样等,凡是出现对称正定矩阵的地方都会用到它。虽然不太起眼,但却是支撑数值计算大厦的基础工具。

常见问题

Cholesky 分解 A = L·Lᵀ 仅对对称且正定(SPD)的矩阵存在。对称意味着 A[i][j]=A[j][i],正定意味着对于任意非零向量 x,xᵀAx>0 成立。在实践中,如果所有主子式都为正(Sylvester 判定法),则矩阵为正定。Cholesky 分解无法应用于非对称或非正定矩阵;对于这些情况,应使用 LU 分解或 LDLᵀ 分解。
对称矩阵的正定性可通过 Sylvester 判定法(所有主子式都为正)来确认。对于 3×3 矩阵,计算 M1=a11、M2=a11·a22−a12²、M3=det(A) 这三个值,如果都为正,则矩阵为正定。本工具将这三个 M1、M2、M3 用条形图显示。实际上,尝试执行 Cholesky 分解本身是最便宜的正定性测试。如果在计算过程中平方根的参数变为 0 或更小,则该矩阵不是正定的。
LU 分解将一般的正方矩阵分解为 A=LU,而 Cholesky 分解专门针对对称正定矩阵,将其分解为 A=LLᵀ。通过利用对称性,所需的操作次数约为 n³/3,恰好是 LU 分解 2n³/3 的一半。存储空间也只需下三角部分。此外,Cholesky 分解无需进行列选主元,在数值上更加稳定,因此对于对称正定系统,它优于 LU 分解。
有限元法(FEM)的刚度矩阵通常是对称正定的,求解其线性方程组 Ku=f 的标准直接法求解器就是 Cholesky 分解。其他应用还包括:最小二乘法的正规方程 AᵀA x = Aᵀb、Kalman 滤波器和高斯过程中的协方差矩阵处理、生成相关随机数的采样等。凡是涉及对称正定矩阵的场景都会用到它。

实际应用

有限元法(FEM)的结构分析:线性静力分析中组合而成的总体刚度矩阵 K,只要加上适当的约束条件,就是对称正定的。使用直接法求解线性方程组 Ku=f 的求解器的核心就是 Cholesky 分解(以及面向稀疏矩阵的变种——稀疏 Cholesky)。对同一个 K,当只改变荷载向量 f 进行多个荷载工况计算时,可以复用一次分解得到的 L,只进行前进和后退代入,就能快速求解。

最小二乘法和回归分析:在用观测数据进行拟合时出现的正规方程 AᵀA x = Aᵀb,其系数矩阵 AᵀA 是对称半正定的。当矩阵满秩时为正定,可用 Cholesky 分解稳定高效地求解。多项式拟合、传感器标定、测量网平均等,处理超定系统的各种场景都使用这种方法。

Kalman 滤波器和高斯过程:状态估计和机器学习中处理的协方差矩阵是对称正定的。在数值稳定的 Kalman 滤波器实现(平方根滤波器)中,直接更新 Cholesky 因子。在高斯过程回归中,核矩阵的 Cholesky 分解既用于预测分布的计算,也用于对数似然的评估。

相关随机数的采样:从多元正态分布 N(μ, Σ) 生成样本时,将协方差矩阵 Σ=LLᵀ 进行 Cholesky 分解,对独立的标准正态随机数 z,计算 x=μ+Lz,就能得到具有所需相关性的随机数。这是 Monte Carlo 模拟和金融风险评估中的基本技术。

常见误区和注意事项

最常见的误区是"只要矩阵是对称的,就可以做 Cholesky 分解"。Cholesky 分解除了要求对称性外,还必须是正定的。对称但含有负特征值的矩阵(不定值、负定值)在分解过程中会遇到负数的平方根,计算就会崩溃。本工具中,当非对角元素增大时,判定会从"正定"变为"非正定",原因就在于此。要处理对称但非正定的矩阵,应选择不使用平方根的 LDLᵀ 分解或带列选主元的分解。

另一个常见错误是"用正规方程 AᵀA 加 Cholesky 分解总是安全的"。理论上 AᵀA 应该是对称正定的,但若 A 的条件数很大,AᵀA 的条件数就会变成其平方,数值误差会被放大。对于病态的最小二乘问题,直接对 A 进行 QR 分解比用正规方程加 Cholesky 更数值稳定。盲目选择快速的 Cholesky 而不检查条件数,存在风险。

最后,"操作数少一半就意味着计算时间快一半"这个想法过于简单。理论上的浮点运算次数虽然 Cholesky 是 LU 的一半,但实际计算时间受内存访问模式、缓存效率、稀疏矩阵的填充(分解过程中新增非零元素)影响很大。对大规模稀疏矩阵,节点重新排序(reordering)减少填充的效果往往比降低操作数的系数更显著。"n³/3"应理解为密矩阵的粗略估计。

使用指南

  1. 使用滑块或输入框设置对称矩阵 A 的成分 a11、a22、a33(对角元素)。范围由各参数的 Range 属性指定
  2. 设置非对角元素 a12 时,会自动同步到 a21=a12。模拟器保证对称性
  3. 点击"计算执行"按钮后,会执行 Cholesky 分解 A=LLᵀ,下三角矩阵 L 的成分 L₁₁、L₂₁、L₂₂、L₃₃,正定性判定和行列式 det(A) 会实时显示

具体计算示例

对 3×3 对称矩阵 A=[4, 2, 0; 2, 3, 1; 0, 1, 2](假设为刚度矩阵,单位为 N/mm²)进行计算时,设 a11=4、a22=3、a33=2、a12=2。Cholesky 分解得到 L=[2, 0, 0; 1, 1.414, 0; 0, 0.707, 1.225],其中 L₁₁=2、L₂₁=1、L₂₂≈1.414、L₃₃≈1.225。行列式为 det(A)=4×1.414²×1.225²≈4.765,所有对角元素都为正,因此判定为正定矩阵。

实务中的注意事项