使用chol()分解正定矩阵(positive|使用chol()分解正定矩阵(positive definite matrix), Choleskey

正定矩阵的定义 :【使用chol()分解正定矩阵(positive|使用chol()分解正定矩阵(positive definite matrix), Choleskey】一个n×n的实对称矩阵使用chol()分解正定矩阵(positive|使用chol()分解正定矩阵(positive definite matrix), Choleskey
文章图片
正定的,当且仅当对于所有的非零实系数向量z,都有zT使用chol()分解正定矩阵(positive|使用chol()分解正定矩阵(positive definite matrix), Choleskey
文章图片
z > 0。其中zT表示z的转置。
对于复数的情况,定义则为:一个n×n的埃尔米特矩阵(或厄米矩阵)使用chol()分解正定矩阵(positive|使用chol()分解正定矩阵(positive definite matrix), Choleskey
文章图片
是正定的当且仅当对于每个非零的複向量z,都有z*使用chol()分解正定矩阵(positive|使用chol()分解正定矩阵(positive definite matrix), Choleskey
文章图片
z > 0。其中z*表示z的共轭转置。由于使用chol()分解正定矩阵(positive|使用chol()分解正定矩阵(positive definite matrix), Choleskey
文章图片
是埃尔米特矩阵,经计算可知,对于任意的複向量zz*使用chol()分解正定矩阵(positive|使用chol()分解正定矩阵(positive definite matrix), Choleskey
文章图片
z
必然是实数,从而可以与0比较大小。因此这个定义是自洽的。
使用chol可以分解为上三角和下三角矩阵. 对于正定矩阵A,可对其进行Choleskey分解,即:A=P'P,其中P为上三角矩阵,在R中可以用函数chol()进行Choleskey分解. 例子 :

> a <- diag(3)+1 > a [,1] [,2] [,3] [1,]211 [2,]121 [3,]112 > chol(a) [,1][,2][,3] [1,] 1.414214 0.7071068 0.7071068 [2,] 0.000000 1.2247449 0.4082483 [3,] 0.000000 0.0000000 1.1547005 > t(chol(a)) [,1][,2][,3] [1,] 1.4142136 0.0000000 0.000000 [2,] 0.7071068 1.2247449 0.000000 [3,] 0.7071068 0.4082483 1.154701


验证 : A=P'P
> crossprod(chol(a)) [,1] [,2] [,3] [1,]211 [2,]121 [3,]112 > t(chol(a)) %*% chol(a) [,1] [,2] [,3] [1,]211 [2,]121 [3,]112


若矩阵为对称正定矩阵,可以利用Choleskey分解求行列式的值,如:
> prod(diag(chol(A))^2) [1] 5 > det(A) [1] 5


若矩阵为对称正定矩阵,可以利用Choleskey分解求矩阵的逆,这时用函数chol2inv(),这种用法更有效。如:
> chol2inv(chol(A)) [,1] [,2] [,3] [,4] [1,] 0.8 -0.2 -0.2 -0.2 [2,] -0.2 0.8 -0.2 -0.2 [3,] -0.2 -0.2 0.8 -0.2 [4,] -0.2 -0.2 -0.2 0.8 > solve(A) [,1] [,2] [,3] [,4] [1,] 0.8 -0.2 -0.2 -0.2 [2,] -0.2 0.8 -0.2 -0.2 [3,] -0.2 -0.2 0.8 -0.2 [4,] -0.2 -0.2 -0.2 0.8


[参考] 1.http://zh.wikipedia.org/zh/%E6%AD%A3%E5%AE%9A%E7%9F%A9%E9%98%B5

    推荐阅读