就地 QR 更新:删除列

计算科学 线性代数
2021-11-29 15:49:42

背景

我正在尝试对“瘦” QR 分解进行更新(A=QR, 在哪里QRm,n,正交矩阵的前几列(直到矩阵秩)和R是上三角形和正方形并且Rn,n)。矩阵本身是一个全列秩“高”矩阵(mn),并且我会定期添加和删除列A作为更大的旋转优化算法的一部分。

我正在内部进行就地分解A使用 Householder 变换,Householder 向量存储在矩阵的下三角部分,R存储在上三角部分A. 我需要存储对角线R在另一个额外的数组中。所以我只需要O(n)超出被分解的矩阵空间的更多内存。

要求

在旋转算法的每一步,我需要计算

RT(RxQTf)
QQTf

QTf无需存储即可计算两个方程中的项Q直接通过将每个 Householder 转换应用于f因为它们来自新添加的列。也就是说,在每一步fn:=Hnfn1对于一些户主转型Hn. 不幸的是,我没有看到更新的方法QQTf以同样的方式,无需显式存储Q某处,所以我的猜测是我仍然需要坚持Q. (QQTf基本上是投影f到的列空间A)。

更新

删除列时,我发现的所有文献都建议对“下游”列使用一系列 Givens 旋转,以将它们从 Hessenberg 形式推回三角形形式。但是,我没有地方可以存储这些,所以我可以计算QQTf当我需要它的时候。对于要删除的列,我需要保留它以便将来重新添加,所以我不能将它用于暂存空间。理想情况下,我只想使用O(n)超出提供的空间的额外内存A首先。

我的问题

是否有其他方法可以将下游列推回不使用更多内存的三角形格式?我试图想出一种方法来更新 Householder 转换,但我一直无法找到一种方法O(n3). 我希望更新本身是O(n2)就像吉文斯轮换一样。

或者,有没有更新的方法QQTf在透视算法的每个阶段添加或删除列时A没有明确存储Q?

0个回答
没有发现任何回复~