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,'-')
将不返回错误消息。如果 p
为 0
,则 R1
是 A - x*x'
的乔列斯基因子。如果 p
大于 0
,则 R1
是原始 A
的乔列斯基因子。如果 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 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
将 chol
与 cholupdate
进行比较:
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.5
从 A
的最后一个元素中减去将生成一个正定矩阵,可以使用 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 之前推出