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

简介:
正定矩阵的定义 : 

一个n×n的实对称矩阵M正定的,当且仅当对于所有的非零实系数向量z,都有zTMz > 0。其中zT表示z转置

对于复数的情况,定义则为:一个n×n埃尔米特矩阵(或厄米矩阵)M是正定的当且仅当对于每个非零的複向量z,都有z*Mz > 0。其中z*表示z共轭转置。由于M埃尔米特矩阵,经计算可知,对于任意的複向量zz*Mz必然是实数,从而可以与0比较大小。因此这个定义是自洽的。

使用chol可以分解为上三角和下三角矩阵.
对于正定矩阵A,可对其进行Choleskey分解,即:A=P'P,其中P为上三角矩阵,在R中可以用函数chol()进行Choleskey分解.
例子 : 
> a <- diag(3)+1
> a
     [,1] [,2] [,3]
[1,]    2    1    1
[2,]    1    2    1
[3,]    1    1    2
> 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,]    2    1    1
[2,]    1    2    1
[3,]    1    1    2
> t(chol(a)) %*% chol(a)
     [,1] [,2] [,3]
[1,]    2    1    1
[2,]    1    2    1
[3,]    1    1    2

若矩阵为对称正定矩阵,可以利用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

[参考]
相关文章
|
5月前
对角矩阵(Diagonal Matrix)
对角矩阵(Diagonal Matrix)是一种特殊的矩阵,其元素仅位于主对角线上。对角矩阵通常用于线性代数和微积分等数学领域,它有以下几个特点:
217 7
|
10月前
|
算法 Python
线代矩阵问题
线代矩阵问题
78 0
|
10月前
|
机器学习/深度学习 Python
|
10月前
|
移动开发
半正定矩阵和正定矩阵的一些理解和补充
半正定矩阵和正定矩阵的一些理解和补充
1095 0
|
人工智能 开发者
矩阵的秩 | 学习笔记
快速学习矩阵的秩
180 0
矩阵的秩 | 学习笔记
|
Windows
详解扬氏矩阵
详解扬氏矩阵
130 0
详解扬氏矩阵
|
机器学习/深度学习
矩阵相关练习
矩阵相关练习
矩阵相关练习
20天刷题计划-542. 01 矩阵
给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。
|
索引 Python Java
Leetcode 542:01 矩阵 01 Matrix
题目: 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell.
754 0