已知逆的对称正定矩阵加对角矩阵后的逆矩阵高效算法问询
嘿,这个问题在数值线性代数里属于典型的正定矩阵对角修正求逆场景,咱们结合你提到的Cholesky思路问题,来聊聊更高效且稳定的解法:
核心思路:基于Sherman-Morrison公式的逐次秩1修正
你之前尝试用多次秩1修改更新Cholesky分解,问题大概率出在数值误差积累或者未针对对角修改做优化上。其实咱们可以直接利用已知的$A^{-1}$,结合Sherman-Morrison公式(Woodbury公式的秩1特例)来高效计算,完全绕开Cholesky分解的多次更新问题。
公式推导
因为$R$是对角矩阵,我们可以把它拆成$n$个秩1矩阵的和:
$$R = \sum_{i=1}^n r_i e_i e_i^T$$
其中$e_i$是第$i$个标准单位向量,$r_i$是$R$的第$i$个对角元(正定保证$r_i>0$)。
对于每次单个对角元的修正$(B_{k-1}^{-1} + r_k e_k e_kT){-1}$,应用Sherman-Morrison公式可得:
$$B_k = B_{k-1} - \frac{r_k \cdot B_{k-1} e_k \cdot e_k^T B_{k-1}}{1 + r_k \cdot e_k^T B_{k-1} e_k}$$
具体实现步骤(高效且数值稳定)
- 初始化:令$B = A^{-1}$(已知输入)
- 逐次修正:遍历$R$的每个对角元$r_i$(顺序不影响结果,建议按自然顺序):
- 取出$B$的第$i$列,记为向量$v = B e_i$
- 计算标量$\alpha = \frac{r_i}{1 + r_i \cdot v_i}$($v_i$是$v$的第$i$个元素,也就是$B$的$(i,i)$对角元)
- 更新矩阵$B$:$B = B - \alpha \cdot v v^T$
- 结果:最终的$B$就是$(A+R)^{-1}$
优势分析
- 时间复杂度:每次迭代仅需O(n)操作,总复杂度为O(n²),远低于直接对$A+R$做Cholesky/LU分解的O(n³),尤其适合大维度矩阵场景。
- 数值稳定性:因为$A$和$A+R$都是正定矩阵,每次计算的分母$1 + r_i \cdot v_i$必然为正($v_i$是正定矩阵$B_{k-1}$的对角元,恒正),不会出现除以接近0的数值问题,误差积累可控。
关于你之前的Cholesky分解思路的问题
如果一定要用Cholesky路径,其实需要先从$A{-1}$反推$A$的Cholesky因子($A{-1}$的Cholesky因子是$L^{-T}$,需要对其求逆得到$L$),再对$A+R$做Cholesky更新。但这个过程额外增加了矩阵求逆的开销,反而不如上面的逐次修正法高效,而且多次秩1更新Cholesky确实容易积累数值误差,不推荐。
内容的提问来源于stack exchange,提问作者a06e

