对乔尔斯基分解的一级更新
R1 = cholupdate (R, x)
R1 = cholupdate (R, x,“+”)
R1 = cholupdate (R, x,“-”)
(R1, p) = cholupdate (R, x,“-”)
R1 = cholupdate (R, x)
在哪里R =胆固醇(A)
原来的乔尔斯基分解是什么一个
,则返回上三角的Cholesky因子+ x * x '
,在那里x
是一个长度合适的列向量。cholupdate
仅使用的对角线和上三角形R
.下面的三角形R
将被忽略。
R1 = cholupdate (R, x,“+”)
是一样的R1 = cholupdate (R, x)
.
R1 = cholupdate (R, x,“-”)
返回的Cholesky因子- x * x '
.当R不是一个有效的Cholesky因子,或者当downdate矩阵不是正定的,因此没有Cholesky分解时,会报告一个错误消息。
(R1, p) = cholupdate (R, x,“-”)
不会返回错误消息。如果p
是0
,R1
是choolesky因子吗- x * x '
.如果p
大于0
,R1
是原始的乔尔斯基因素吗一个
.如果p
是1
,cholupdate
失败,因为降期矩阵不是正定的。如果p
是2
,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 1 1 2 3 0 0 0 1 x = [0 0 0 1]';
这叫做一级更新一个
自排名(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
1.0000 1.0000 1.0000 1.0000 0 1.0000 2.0000 3.0000 00 1.0000 3.0000 00 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 downdate矩阵的错误必须是正定的。
然而,减去0.5
从最后一个元素一个
得到一个正定矩阵,我们可以用cholupdate
计算其乔尔斯基因子:
X =[0 0 0 1/根号(2)]';R1 = cholupdate(R,x,'-') R1 = 0,0,0,0,0,0,0.7071
cholupdate
仅适用于完整的矩阵。
cholupdate
使用LINPACK子例程中的算法ZCHUD
和ZCHDD
.cholupdate
是有用的,因为从头计算新的Cholesky因子是一个
算法,而简单地以这种方式更新现有的因子是一种
算法。
唐加拉,j.j., J.R.本奇,C.B. Moler和G.W. Stewart,LINPACK用户指南,费城SIAM, 1979年。