lapack dorgqr qr 分解矩阵米× ñm×n和m < nm<n

计算科学 拉帕克 矩阵
2021-12-09 20:09:19

我想做一个A=QR矩阵分解A, 和m×n. 我使用dgeqrf_(或dgeqp3_)进行分解的第一部分。然后,我可以轻松计算矩阵R通过取输出矩阵的上对角线部分。

如果A是这样的m>n, Lapack 子程序dorgqr_创建正确的Q矩阵。

但如果A是这样的m<n,同样的子程序给了我一个错误:

** On entry to DORGQR parameter number  2 had an illegal value

我想是因为m<n...对于这种情况,我应该使用另一个例程吗?

2个回答

您似乎混淆了dorgqr的输入参数。第二个参数是正交/酉矩阵的宽度,您希望将其生成为dgeqrfdgeqp3生成的 Householder 反射器的乘积。虽然这两个例程都支持mn情况下,你应该认识到,当mn, QR 分解意味着Q这是m×mR这是m×n, 和Q被隐式定义为m第一个中的每一个都隐含的住户转换mdgeqrf / dgeqp3的输出列

因此,您应该让dorgqr的第一个、第二个和第三个参数分别等于m. 我的猜测是你使用的宽度A,n, 对于第二个参数,这将是非法的。

正如 Jan 指出的那样,通常人们将 QR 分解用于高/瘦矩阵。对于短/胖矩阵,LQ 分解更合适。它基本上是矩阵转置上的 QR,并且您使用 routine dgelqf

如果您说明您打算对分解做什么,我们也许能够指出更好和更具体的解决方案。