文档

cholupdate

Rank 1更新到Cholesky分解

语法

R1 = cholupdate (R, x)
R1 = cholupdate (R, x,“+”)
R1 = cholupdate (R, x,“-”)
(R1, p) = cholupdate (R, x,“-”)

描述

R1 = cholupdate (R, x)在哪里R =胆固醇(A)原来的Cholesky因子分解一个的上三角Cholesky因子+ x * x ',在那里x是一个适当长度的列向量。cholupdate只使用对角线和上三角形R。下三角形R将被忽略。

R1 = cholupdate (R, x,“+”)就等于R1 = cholupdate (R, x)

R1 = cholupdate (R, x,“-”)的Cholesky因子- x * x '。当R不是一个有效的Cholesky因子,或者当过时的矩阵不是正定的,因此没有Cholesky因子分解时,错误消息报告。

(R1, p) = cholupdate (R, x,“-”)不会返回错误消息。如果p0R1Cholesky因子是多少- x * x '。如果p大于0R1是原版的Cholesky因子吗一个。如果p1cholupdate失败是因为过时的矩阵不是正定的。如果p2cholupdate失败,因为上面的三角形R不是有效的Cholesky因子

例子

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 1 10 1 2 3 0 0 1 3 0 0 0 1 x = [0 0 0 1];

这被称为第一级更新一个排名(x * x ')1

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

而不是计算Cholesky因子R1 = chol(A + x*x'),我们可以使用cholupdate

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

然后通过减法消除正的确定性(实际上使矩阵变得奇异)1的最后一个元素一个。过时的矩阵是:

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

比较胆固醇cholupdate

R1 = chol(A-x*x')使用chol矩阵的错误必须是正定的。R1 = cholupdate(R,x,'-')使用cholupdate矩阵的错误必须是正定的。

然而,减去0.5的最后一个元素一个得到一个正定矩阵,我们可以用cholupdate计算其Cholesky因子:

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

提示

cholupdate只适用于完整的矩阵。

算法

cholupdate使用来自LINPACK子例程的算法ZCHUDZCHDDcholupdate是有用的,因为从头计算新的Cholesky因子是一个 O N 3. 算法,而简单地以这种方式更新现有因子是一个 O N 2 算法。

参考文献

[1] Dongarra, j.j., J.R. Bunch, C.B. Moler和G.W. Stewart,《LINPACK用户指南》,SIAM,费城,1979年。

扩展功能

另请参阅

|

之前介绍过的R2006a

这个话题有用吗?