背景
我正在尝试对“瘦” QR 分解进行更新(, 在哪里是,正交矩阵的前几列(直到矩阵秩)和是上三角形和正方形并且)。矩阵本身是一个全列秩“高”矩阵(),并且我会定期添加和删除列作为更大的旋转优化算法的一部分。
我正在内部进行就地分解使用 Householder 变换,Householder 向量存储在矩阵的下三角部分,存储在上三角部分. 我需要存储对角线在另一个额外的数组中。所以我只需要超出被分解的矩阵空间的更多内存。
要求
在旋转算法的每一步,我需要计算
这无需存储即可计算两个方程中的项直接通过将每个 Householder 转换应用于因为它们来自新添加的列。也就是说,在每一步对于一些户主转型. 不幸的是,我没有看到更新的方法以同样的方式,无需显式存储某处,所以我的猜测是我仍然需要坚持. (基本上是投影到的列空间)。
更新
删除列时,我发现的所有文献都建议对“下游”列使用一系列 Givens 旋转,以将它们从 Hessenberg 形式推回三角形形式。但是,我没有地方可以存储这些,所以我可以计算当我需要它的时候。对于要删除的列,我需要保留它以便将来重新添加,所以我不能将它用于暂存空间。理想情况下,我只想使用超出提供的空间的额外内存首先。
我的问题
是否有其他方法可以将下游列推回不使用更多内存的三角形格式?我试图想出一种方法来更新 Householder 转换,但我一直无法找到一种方法. 我希望更新本身是就像吉文斯轮换一样。
或者,有没有更新的方法在透视算法的每个阶段添加或删除列时没有明确存储?