LAPACK中的DGESVD实现了哪些算法?

问题描述 投票:0回答:2

我对 MATLAB 中用于计算 SVD 的 DGESVD 函数感到好奇。据我从 Gene H. Golub 和 Charles F. Van Loan 的“矩阵计算”中得知,有两种可能使用的双对角化方案 - Householder 双对角化和 R-双对角化。但是,我无法从 LAPACK 文档中确定正在使用哪个。大家有什么想法吗?

lapack svd
2个回答
3
投票

根据 LAPACK 用户指南,双对角形式的简化是通过例程 DGEBRD 完成的,它使用 Householder 反射。

2.4.6“奇异值分解”:

例程 xGEBRD 将 U1 和 V1 以因子形式表示为基本反射器的乘积,如第 5.4 节所述。

5.4“正交或酉矩阵的表示”:

实正交或复酉矩阵(通常表示为 Q)在 LAPACK 中通常表示为基本反射器的乘积 - 也称为基本 Householder 矩阵


0
投票

我对LAPACK代码做了一些调试,看看它是如何调用其他函数的。有被遮挡的住户反射器一 (dgebrd) 和未被遮挡的户主反射器 (dgebd2)。 dgebd2 算法类似于 golub,vanloan 算法,除非您直接遵循该算法(算法 5.1.1),您将得到具有不同符号的奇异向量。 golub 使用 Parlet 的理论来决定反射向量的符号,但 LAPACK 与像

BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA )
这样的对角元素进行比较。我还没有完成阻塞矩阵,这将是一个非常大的矩阵。您可以找到期刊或在线链接来了解该过程。代码库大约有 5000 多行,并且缩进非常糟糕,go to 语句需要很长时间才能找出我的程序要去哪个分支。

© www.soinside.com 2019 - 2024. All rights reserved.