qrupdate
等级1更新QR分解
句法
[q1,r1] = qrupdate(q,r,u,v)
描述
[q1,r1] = qrupdate(q,r,u,v)
什么时候[q,r] = qr(a)
是原始的QR分解一个
,返回QR分解a + u*v'
, 在哪里你
和v
是适当长度的列向量。
例子
矩阵
Mu = SQRT(EPS)MU = 1.4901E-08 a = [hons(1,4);Mu*眼(4)];
在最小二乘中是一个众所周知的例子,表明形成的危险a'*a
。取而代之的是,我们处理QR分解 - 正交Q和上三角。
[q,r] = qr(a);
正如我们所期望的r
是上三角。
r = -1.0000 -1.0000 -1.0000 -1.0000 0 0.0000 0.0000 0.0000 0 0 0 0.0000 0.0000 0 0 0 0 0 0 0 0.0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
在这种情况下,上三角条目r
,不包括第一行SQRT(EPS)
。
考虑更新向量
u = [-1 0 0 0 0]';v =一个(4,1);
而不是计算此等级的相当微不足道的QR分解,一个更新一个
从头开始
[qt,rt] = qr(a + u*v')qt = 0 0 0 0 0 1 -1 0 0 0 0 0 0 0-1 0 0 0 0 0 0 0 0-1 0 0 0 0 0 0 0 0 0-1 0 rt = 1.0e-007 * -0.1490 0 0 0 0 0 -0.1490 0 0 0 0 0 0-0.1490 0 0 0 0 0 0 0-0.1490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我们可以使用qrupdate
。
[Q1,R1] = qrupdate(Q,R,u,v) Q1 = -0.0000 -0.0000 -0.0000 -0.0000 1.0000 1.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 1.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 1.0000 -0.0000 0.0000 -0.0000-0.0000 -0.0000 1.0000 0.0000 R1 = 1.0E -007 * 0.1490 0.0000 0.0000 0.0000 0.0000 0 0.1490 0.1490 0.0000 0.0000 0 0 0 0.1490 0.0000 0 0 0 0 0.1490 0 0.1490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00士点
请注意,即使它们不同,这两个因素化都是正确的。
提示
qrupdate
仅适用于完整的矩阵。
算法
qrupdate
在第三版的第12.5.1节中使用算法矩阵计算由Golub and Van Loan。qrupdate
很有用,因为如果我们接受n = max(m,n)
,然后从头开始计算新的QR分解大致是o((n3)算法,同时简单地以这种方式更新现有因素是一个o((n2) 算法。
参考
[1] Glub,Gene H.和Charles Van Loan,矩阵计算,第三版,约翰·霍普金斯大学出版社,巴尔的摩,1996年