LAPACK使用的原因是什么


9

LAPACK的QR例程将Q存储为Householder反射器。它缩放反射向量与,所以结果的第一个元素变成,所以它不具有被存储。并且它存储一个单独的向量,其中包含所需的比例因子。所以反射矩阵是这样的:v1/v11τ

H=一世-τvvŤ

其中未标准化。而在教科书中,反射矩阵是v

H=一世-2vvŤ

其中,是标准化。v

为什么LAPACK 用缩放,而不是对其进行归一化?v1个/v1个

所需的存储空间是相同的(而不是,必须存储),之后,应用可以更快地完成,因为不需要与进行乘法(可以优化教科书版本中与乘法,如果不是简单归一化,则将缩放为)。τv1个Hτ2v2/v

(我的问题的原因是我正在编写QR和SVD例程,并且我想知道此决定的原因,无论是否需要遵循它)

Answers:


7

推动此设计的是Householder-QR的受阻变形。如果您查看Golub和Van Loan的书(Ch 5.2左右),他们将讨论如何通过将各个反射器累积为形式的k级反射器来将算法的k个迭代一起阻止,其中和均为大小为 “高瘦”矩阵。该算法执行的工作更多,但实际操作更快,因为它包含许多gemm()调用。不幸的是,由于需要单独表示和因此在存储上很浪费。一世+w ^ÿŤw ^ÿñ×ķw ^ÿ

Van Loan在随后的论文中(下文引用)描述了一种更有效的“对称”数据结构,即形式的块反射器。这里仍然是,但是通过引入(一个小的上三角矩阵),消除了形成的翻转/存储要求。尽管需要乘以带来少量额外的工作,但由于,因此通常是净收益。一世+ÿŤÿŤÿñ×ķw ^Ťķ×ķŤķ<<ñ

在LAPACK中,非阻塞算法实际上只是块算法的一个限制情况,一直到符号选择(这导致我们,版本)三角形)。ķ1个τ1个×1个Ť

引用:Schreiber,Robert和Charles Van Loan。“针对Householderer变换的产品的存储有效的WY表示形式。” SIAM科学与统计计算杂志10.1(1989):53-57。


感谢您的回答!我不明白,那只是一个尺度的。在引用的论文中,在算法5中,为,为-2。因此,它最终以教科书版本而不是LAPACK版本出现。我想念什么吗?τ1个×1个ŤÿvŤ
geza

2

您不必存储,可以从向量的其余部分重新计算它。(您也可以在规范化版本中从其他条目重新计算,但是由于这些减法,显然这是不稳定的计算。)τv1个

实际上,您可以重用的下三角部分来存储,以便完全就地计算因式分解。Lapack非常关心这些就地版本的算法。[Rv2vñ


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.