R有一个qr()
函数,它使用LINPACK或LAPACK执行QR分解(根据我的经验,后者快5% )。返回的主要对象是一个包含在上三角矩阵R中的矩阵"qr“(即R=qr[upper.tri(qr)]
)。到目前一切尚好。qr的下三角部分包含“紧凑形式”的Q。可以使用qr.Q()
从qr分解中提取Q。我想找出qr.Q()
的倒数。换句话说,我确实有Q和R,并想把它们放在一个"qr“对象中。R是微不足道的,但Q不是。我们的目标是应用qr.solve()
,这比大型系统上的solve()
快得多。
发布于 2012-03-27 22:06:09
我已经根据OP的要求研究了同样的问题,但我认为这是不可能的。基本上,OP问题是具有显式计算的Q,是否可以恢复H1 H2 ...太好了。我认为如果不从头开始计算QR,这是不可能的,但我也非常有兴趣知道是否有这样的解决方案。
我有一个与OP类似的问题,但在不同的上下文中,我的迭代算法需要通过添加列和/或行来改变矩阵A。第一次,使用DGEQRF计算QR,因此使用紧凑的LAPACK格式。在矩阵A发生变化后,例如,使用新的行,我可以快速构建一组新的反射器或旋转器,这些反射器或旋转器将消除现有R的最低对角线的非零元素,并构建新的R,但现在我有一组H1_old H2_old ...Hn_old和H1_new H2_new ...Hn_new (和类似的tau),不能混合到单个QR紧凑表示中。我有两种可能性,可能OP也有同样的两种可能性:
David的长答案基本上解释了什么是紧凑的QR格式,但没有解释如何获得这种紧凑的QR格式,并将显式计算的Q和R作为输入。
https://stackoverflow.com/questions/3031215
复制相似问题