Main Content

cholupdate

Cholesky 分解的秩 1 更新

语法

R1 = cholupdate(R,x)
R1 = cholupdate(R,x,'+')
R1 = cholupdate(R,x,'-')
[R1,p] = cholupdate(R,x,'-')

说明

R1 = cholupdate(R,x)(其中 R = chol(A)A 的原始乔列斯基分解)返回 A + x*x' 的上三角乔列斯基因子,其中 x 是具有合适长度的一个列向量。cholupdate 仅使用 R 的对角线和上三角。R 的下三角将被忽略。

R1 = cholupdate(R,x,'+')R1 = cholupdate(R,x) 相同。

R1 = cholupdate(R,x,'-') 返回 A - x*x' 的乔列斯基因子。当 R 不是有效的乔列斯基因子或旧矩阵不是正定矩阵时,将会报告一条错误消息,这样将没有乔列斯基分解。

[R1,p] = cholupdate(R,x,'-') 将不返回错误消息。如果 p0,则 R1A - x*x' 的乔列斯基因子。如果 p 大于 0,则 R1 是原始 A 的乔列斯基因子。如果 p1,则 cholupdate 将失败,因为旧矩阵不是正定矩阵。如果 p2,则 cholupdate 将失败,因为 R 的上三角不是有效的乔列斯基因子。

示例

A = pascal(4)
A =

     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    20

R = chol(A)
R =

     1     1     1     1
     0     1     2     3
     0     0     1     3
     0     0     0     1
x = [0 0 0 1]';

这称为对 A 的秩为一的更新,因为 rank(x*x')1

A + x*x' 
ans =
     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    21

不使用 R1 = chol(A + x*x') 计算乔列斯基因子,可以使用 cholupdate

R1 = cholupdate(R,x)
R1 =
    1.0000    1.0000    1.0000    1.0000
         0    1.0000    2.0000    3.0000
         0         0    1.0000    3.0000
         0         0         0    1.4142

接下来,通过从 A 的最后一个元素中减去 1 来破坏正定性(并且实际上将矩阵设置为奇异矩阵)。旧矩阵为:

A - x*x'
ans =
 
     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    19

cholcholupdate 进行比较:

R1 = chol(A-x*x')
Error using chol
Matrix must be positive definite.
R1 = cholupdate(R,x,'-')
Error using cholupdate
Downdated matrix must be positive definite.

但是,将 0.5A 的最后一个元素中减去将生成一个正定矩阵,可以使用 cholupdate 计算其乔列斯基因子:

x = [0 0 0 1/sqrt(2)]';
R1 = cholupdate(R,x,'-') 
R1 =
    1.0000    1.0000    1.0000    1.0000
         0    1.0000    2.0000    3.0000
         0         0    1.0000    3.0000
         0         0         0    0.7071

提示

cholupdate 仅适用于满矩阵。

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅

|