写一篇关于Cholesky分解的文章,作为学习笔记,尽量一文看懂矩阵Cholesky分解,以及用Cholesky分解来求解对称正定线性方程组,以及求对称正定矩阵的逆的应用。

文章目录

  • 直接Cholesky分解
  • 分块Cholesky分解
  • Cholesky分解应用于求解线性方程组,以及矩阵求逆
  • 参考资料

先简单理解下正定矩阵和半正定矩阵的定义[1][2][3]:

  • 给定一个 n×nn\times nn×n 的实对称矩阵 AAA ,若对于任意长度为 n 的非零向量 X,有 XTAX>0X^TAX \gt 0XTAX>0 恒成立,则矩阵 AAA 是一个正定矩阵。
  • 给定一个 n×nn\times nn×n 的实对称矩阵 AAA ,若对于任意长度为 n 的非零向量 X,有 XTAX≥0X^TAX \geq 0XTAX≥0 恒成立,则矩阵 AAA 是一个半正定矩阵。

直接Cholesky分解

定理——若A∈Rn×nA \in R^{n\times n}A∈Rn×n是对称正定矩阵,则存在一个对角元全为正数的下三角矩阵L∈Rn×nL \in R^{n\times n}L∈Rn×n,使得A=LLTA=LL^TA=LLT成立。

LLL是一个下三角形,形式是这样的:

推导A=LLTA=LL^TA=LLT:我们先令

A=[a11A21TA21A22],L=[l110L21L22],LT=[l11L21T0L22T]A = \left[ \begin{matrix} a_{11}&A_{21}^{T}\\ A_{21}&A_{22}\\ \end{matrix} \right], \quad L = \left[ \begin{matrix} l_{11}&0\\ L_{21}&L_{22}\\ \end{matrix} \right], \quad L^{T} = \left[ \begin{matrix} l_{11}&L_{21}^{T}\\ 0&L_{22}^{T}\\ \end{matrix} \right]A=[a11​A21​​A21T​A22​​],L=[l11​L21​​0L22​​],LT=[l11​0​L21T​L22T​​]

其中a11a_{11}a11​和l11l_{11}l11​是一个标量,A21A_{21}A21​和L21L_{21}L21​是一个列向量,A22A_{22}A22​是一个n-1阶的方阵,而L22L_{22}L22​是一个n-1阶的下三角形。那么:
[a11A21TA21A22]=[l110L21L22][l11L21T0L22T]=[l112l11L21Tl11L21L21L21T+L22L22T]\left[ \begin{matrix} a_{11}&A_{21}^{T}\\ A_{21}&A_{22}\\ \end{matrix} \right] = \left[ \begin{matrix} l_{11}&0\\ L_{21}&L_{22}\\ \end{matrix} \right] \left[ \begin{matrix} l_{11}&L_{21}^{T}\\ 0&L_{22}^{T}\\ \end{matrix} \right]= \left[ \begin{matrix} l_{11}^{2}&l_{11}L_{21}^{T}\\ l_{11}L_{21}&L_{21}L_{21}^{T}+L_{22}L_{22}^{T}\\ \end{matrix} \right][a11​A21​​A21T​A22​​]=[l11​L21​​0L22​​][l11​0​L21T​L22T​​]=[l112​l11​L21​​l11​L21T​L21​L21T​+L22​L22T​​]

未知量只有标量l11l_{11}l11​,列向量L21L_{21}L21​,和下三角形L22L_{22}L22​,也是我们要求的。很容易得到:
l11=a11l_{11} = \sqrt {a_{11}}l11​=a11​​

L21=1l11A21L_{21} = \frac {1}{l_{11}}A_{21}L21​=l11​1​A21​

L22L22T=A22−L21L21TL_{22}L_{22}^{T} = A_{22} - L_{21}L_{21}^{T} L22​L22T​=A22​−L21​L21T​

其中l11l_{11}l11​,L21L_{21}L21​我们直接可以求出来了,并且可以求出A22′=A22−L21L21TA_{22}' = A_{22} - L_{21}L_{21}^{T}A22′​=A22​−L21​L21T​。

而A22′=L22L22TA_{22}' = L_{22}L_{22}^{T}A22′​=L22​L22T​又是一个Cholesky分解!被分解的矩阵是一个n-1阶方阵A22′A_{22}'A22′​。因此,Cholesky分解算法具有递归性质,每一轮可以求出LLL的一列,依次往下求,就可以把整个L求出来。

一个例子[4]:

另外,上述的方法需要进行开方,这有可能损失精度和增加运算量,为了避免开方,Cholesky分解有个改进的版本。将对称正定矩阵通过分解成A=LDLTA=LDL^TA=LDLT,其中L是单位下三角矩阵(单位下三角矩阵的对角线右上方的系数全部为零,左下方的系数全为一),D是对角均为正数的对角矩阵。把这一分解叫做LDL分解,是Cholesky分解的变形。具体先不展开了,可以参考[5],以及其中的参考代码。

分块Cholesky分解

这一部分其实原理和上面是一样的,只是l11l_{11}l11​也是一个矩阵块来做,这样算法就是在一个矩阵块粒度递归往下做,效率上快很多,可以比较容易利用到GPU计算加速。我主要参考了文献[6]的内容,只做一个笔记用。
首先,把AAA矩阵分块,其中A11A_{11}A11​是一个r×rr\times rr×r方阵,rrr是我们设定的可以采用直接cholesky分解算法求解的块大小。


类似的,位面可以得到:

其中公式(8)其实我们一般计算的是线性方程组:

S⋅L11T=BS\cdot L_{11}^T = BS⋅L11T​=B

其中L11TL_{11}^TL11T​是一个上三角形,因此,我们可以比较容易求出S(先直接可以求出S的第一列,然后是第二列,以此类推)。可以直接调用各种BLAS库的trsm函数求解[7]。

公式(9)又是一个Cholesky分解,一直递归下去采用分块Cholesky分解,直到A^−S⋅ST\hat{A}-S\cdot S^TA^−S⋅ST的size小于等于r×rr\times rr×r就不在分解了,最后采用一次直接Cholesky分解。

示意图以及流程总结如下:

到这里就把Cholesky分解的计算方法讲清楚了。

Cholesky分解应用于求解线性方程组,以及矩阵求逆

如果AAA为对称正定矩阵,现在要求解线性方程组AX=BAX=BAX=B:
步骤:

  1. 求AAA的Cholesky分解,得到A=LLTA=LL^TA=LLT
  2. 把AXAXAX看成L(LTX)=LYL(L^T X)=LYL(LTX)=LY,求LY=BLY = BLY=B,得到YYY
  3. 求LTX=YL^T X = YLTX=Y,得到XXX

这样就求出了线性方程组AX=BAX=BAX=B的解XXX。

类似的,如果AAA为对称正定矩阵,我们要求A−1A^{-1}A−1,我们实际上只要求解线性方程组AX=IAX=IAX=I:
步骤:

  1. 求AAA的Cholesky分解,得到A=LLTA=LL^TA=LLT
  2. 把AXAXAX看成L(LTX)=LYL(L^T X)=LYL(LTX)=LY,求LY=ILY = ILY=I,得到YYY
  3. 求LTX=YL^T X = YLTX=Y,得到XXX

这样就求出了逆矩阵X=A−1X= A^{-1}X=A−1。

参考资料

[1] https://www.jiqizhixin.com/articles/2019-03-05-8
[2] https://www.cnblogs.com/marsggbo/p/11461155.html
[3] https://baike.baidu.com/item/%E6%AD%A3%E5%AE%9A%E7%9F%A9%E9%98%B5/11030459?fr=aladdin
[4] https://www.qiujiawei.com/linear-algebra-11/
[5] https://blog.csdn.net/ACdreamers/article/details/44656847
[6] 使用GPU加速计算矩阵的Cholesky分解,沈 聪,高火涛
[7] https://blog.csdn.net/zb1165048017/article/details/70207812

三十分钟理解:矩阵Cholesky分解,及其在求解线性方程组、矩阵逆的应用相关推荐

  1. 我的Blog文章索引::机器学习方法系列,深度学习方法系列,三十分钟理解系列等

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入.纯技术交流. 以下是我利用业余 ...

  2. 大饼博士X Blog文章索引:机器学习方法系列,深度学习方法系列,三十分钟理解系列等

    (我怕忘了这好资源) 欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入. 以下是 ...

  3. (矩阵分析基础(第二版)第三章 矩阵的分解 3.3埃尔米特(hermite)矩阵及其分解)

    (矩阵分析基础(第二版)第三章 矩阵的分解 3.3埃尔米特(hermite)矩阵及其分解) 文章目录 (矩阵分析基础(第二版)第三章 矩阵的分解 3.3埃尔米特(hermite)矩阵及其分解) 1.埃 ...

  4. 三十分钟理解:双调排序Bitonic Sort,适合并行计算的排序算法

    双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU.fpga来计算. 1.双调序列 在了解双调排序算法之前,我们先来看看什么是双调序 ...

  5. r语言中矩阵QR分解_R语言常用的矩阵操作

    R语言是一门非常方便的数据分析语言,它内置了许多处理矩阵的方法.下面列出一些常用的矩阵操作方法示例. 矩阵的生成 > mat <- matrix(1:16, ncol = 4, nrow ...

  6. 矩阵的Cholesky分解

    原文链接:矩阵的Cholesky分解 首先来复习线性代数中几个重要的概念. 1)如果一个复矩阵A = A*(共轭转置),则A称为Hermitian矩阵.(注意,矩阵A转置后仍为其本身,显然A一定是方阵 ...

  7. cholesky分解_Time Series Analysis-1.2 LDL分解

    最近考完两个小quiz,停了一段时间,今晚抽空继续来分享这门课的笔记. 1.前言 上一期分享了Cholesky分解的基本步骤和伪代码,本期介绍另外一种矩阵分解的方法--LDL分解. 首先补充一下,近几 ...

  8. [矩阵论] Unit 3. 矩阵的分解 - 知识点整理

    注: 以下内容均由个人整理, 不保证完全准确, 如有纰漏, 欢迎交流讨论 参考: 杨明, 刘先忠. 矩阵论(第二版)[M]. 武汉: 华中科技大学出版社, 2005 3 矩阵的分解 3.1 常见的矩阵 ...

  9. 对矩阵分解的粗浅理解之LU分解

    ** 欢迎大家到Matlab与线性代数专栏中查看相关图文. ** 本图文从行列式计算出发引出了对矩阵LU分解的粗浅理解,希望对正在学习线性代数的同学有所帮助.

最新文章

  1. 网络框架 - 收藏集 - 掘金
  2. html动态生成榜单信息,排行榜.html
  3. 变态跳台阶,很难很难,终于想出来了,附推导过程,为自己鼓掌
  4. 从pymongo 提取最近100条数据
  5. 代码 控制unity 暂停 编辑器_Unity3D 报错解决方案及常用功能收集
  6. java中异常与return
  7. SQL Server 2005中的分区表(四):删除(合并)一个分区
  8. 情人节,找个程序员当男朋友,一般都不会太差
  9. CondenseNet总结
  10. 宝塔 ftp 不能连接 列出时出错
  11. 前端盒模型的概念和文本溢出解决办法
  12. [2018.07.24 T1] 真板题
  13. 使用Python+TensorFlow2构建基于卷积神经网络(CNN)的ECG心电信号识别分类(二)
  14. r语言中形成的c函数,R语言_par()函数用法
  15. 苹果手机用计算机打不开,苹果手机更新ios11后,照片在电脑上打不开怎么办?...
  16. 不同证券的资产收益率统计(2012-2020年)
  17. QQ微信等分享链接时系统提取的标题和图片代码
  18. 【GIS教程】在谷歌地图中快速导出区域地形图
  19. JVM能够开启多少线程
  20. mysql如果有值返回true_关于mysql的tinyint字段调用返回true/false的问题

热门文章

  1. Linux学习思维导图
  2. 计算机组成:真正理解“乘法器”和“除法器”
  3. poj计算几何题推荐
  4. 用D3.js绘制完整的流程图demo
  5. CHCR让iOS布局更婀娜
  6. 2016第1篇--Python查看微信被删好友
  7. chmod 777 什么意思:鸟哥的linux私房菜第六章学习笔记
  8. 面向过程与面向对象有什么区别
  9. 稀里糊涂学-MySQL常用函数汇总(持续更新)
  10. Uniapp|image无法显示图片