矩阵的Cholesky分解

原文链接:矩阵的Cholesky分解
首先来复习线性代数中几个重要的概念。


1)如果一个复矩阵A = A*(共轭转置),则A称为Hermitian矩阵。(注意,矩阵A转置后仍为其本身,显然A一定是方阵。)
2)关于正定矩阵的定义:

  • Mn×n 是一个对称的实矩阵,对于任意的(由n个实数组成)的非零列向量z,都有 zTMz > 0,则称M是正定的(positive definite)的。
  • More generally,Mn×n 是一个Hermitian矩阵,对于任意的(由n个复数组成)的非零列向量z,都有 z*Mz > 0,则称M是正定的。
实对称矩阵为正定矩阵的充要条件是的各顺序主子式都大于零。实二次型矩阵(注意二次型矩阵必然也是对称矩阵)为正定二次型的充要条件是的矩阵的特征值全大于零。



矩阵的Cholesky分解



如果矩阵A是正定的,那么它可以被(唯一地)分解为一个下三角矩阵L和其共轭转置L*的乘积,这就是所谓的“矩阵的Cholesky分解”。对于实矩阵而言,即 A =LLT,其中L是一个下三角矩阵。下面是一个3×3的矩阵Cholesky分解的示意。

矩阵的Cholesky分解
文章图片


具体要如何来计算Cholesky分解的值呢?通过观察,结合矩阵乘法的规则,不难发现矩阵L对角线上的元素可以由如下规律算得:

矩阵的Cholesky分解
文章图片


推广后得到:
矩阵的Cholesky分解
文章图片


对于那些位于对角线以下的元素lik,其中i>k,则会有下面这样的计算规律:
矩阵的Cholesky分解
文章图片


仍然可以推广得到一个更加普适的公式:

矩阵的Cholesky分解
文章图片


在数学软件/工具中计算矩阵的Cholesky分解



当然了,在很多数学软件或工具中都已经内置了现成的函数,我们并不需要手动去执行那些繁琐的计算。下面来看一个具体的例子:

矩阵的Cholesky分解
文章图片


首先在R中来验证上面的Cholesky分解结果。注意函数chol返回的是一个上三角矩阵,如果要得到下三角矩阵只要对该结果做一下转置处理即可。


> m = matrix(c(4, 12, -16, 12, 37, -43, -16, -43, 98), nrow=3, ncol=3) > m [,1] [,2] [,3] [1,]412-16 [2,]1237-43 [3,]-16-4398 > chol(m) [,1] [,2] [,3] [1,]26-8 [2,]015 [3,]003

最后再来看看在MATLAB中对矩阵进行Cholesky分解的演示。我们选择得到下三角矩阵的结果,刚好是上面R中计算的上三角矩阵的转置。
>> A = [4 12 -16 12 37 -43 -16 -43 98]; >> [L] = chol(A,'lower')

L =
200 610 -853

而且,你还可以验证原对称矩阵是正定的。如下可见,矩阵的三个特征值都是大于零的。
> > [v,d]=eig(A)

v =
0.96340.2127-0.1630

-0.2648 0.8490 -0.4573
0.0411 0.4838 0.8742
d =
0.018800 015.50400 00123.4772

最后一个问题,Cholesky分解在实际中有什么用?其中一个非常重要的应用就是解方程组 Ax = B,其中A是一个正定矩阵。因为A是一个正定矩阵,所以有A =LLT,其中L是一个下三角矩阵。原方程组可以写成 LLTx = B。如果令 y = LTx ,则有Ly  = B。注意到其中L是一个下三角矩阵,所以从下向上求解y是非常非常容易的!求解出y之后,在按照类似的方法求解y = LTx 中的 x,而其中LT是一个上三角矩阵,所以最终求出 x 就也是非常非常容易的!



参考文献与其他推荐阅读材料


1)关于  Hermitian矩阵,可以参考《线性代数笔记(6):内积空间(下)》
2)关于二次型,可以参考《Hessian矩阵与多元函数极值》

3)http://rosettacode.org/wiki/Cholesky_decomposition



【矩阵的Cholesky分解】(本文完)

    推荐阅读