主要内容

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年

扩展功能

版本历史记录

在R2006a之前引入

也可以看看

|