c ++中的薄QR分解

时间:2011-11-01 19:47:07

标签: c++ eigen qr-decomposition

是否有一个易于使用的c ++库用于矩形矩阵的“细”QR分解? Eigen似乎只支持完整的Q矩阵。我可以拿一个完整的Q并丢弃一些列,但是开始计算它们会更有效吗?

2 个答案:

答案 0 :(得分:3)

Newmat完全符合您的要求。

要将A分解为QR,您可以执行以下操作:

Matrix Q = A;
UpperTriangularMatrix R;
QRZ(Q, R)

如果A是3x5矩阵,则R将为3x3,Q也将为3x5。

答案 1 :(得分:1)

即使这个问题有点陈旧,但是记录:Eigen没有明确地计算Q矩阵,而是一系列Householder向量,它可以直接乘以任何矩阵(具有正确的行数)。 / p>

如果您实际上明确需要精简Q矩阵,只需乘以所需大小的单位矩阵:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

x = np.random.randn(60)

ax = sns.distplot(x, label="BsrDI", bins=np.linspace(-3,3,10), kde=False, 
                  hist_kws={"lw":3, "edgecolor": (1,0,0,0.75), 
                                    "color":(1,0,0,0.25),"alpha":None})

plt.show()