我目前正在尝试廉价地计算矩阵的良好秩估计. 因此,我使用计算柱旋转 QR 分解
[Q,R,E]=qr(A)
在 Matlab 中。我估计排名使用
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
这工作正常,并且 R 的所有对角线条目的图如下所示:
如果将整个算法移植到 C/Fortran,我会使用 LAPACK 中的 DGEQP3 替换 [Q,R,E]=qr(A),它还计算旋转 QR 分解的列。但是,如果我对排名使用相同的估计,我大多会出错。相同的情节从 DGEQP3 产生的看起来像
两个实验的输入矩阵完全相同。
我现在的问题是 Matlab 中旋转 QR 分解的列依赖于哪个 LAPACK 函数?
感谢您的帮助,格里苏
编辑: DGEQPF 给出了同样的错误结果。
编辑2:
- 输入矩阵是密集的并且构建为
- 可在此处获得:http ://www-e.uni-magdeburg.de/makoehle/A.mtx.gz(MatrixMarket 格式)
- 错误的 : http://www-e.uni-magdeburg.de/makoehle/R_wrong.mtx.gz
- 我将 LAPACK 3.4.0 与 OpenBlas/GotoBLAS(64 位)一起使用
- Matlab 7、2007b、2010b Linux 32 位
Edit3: - 使用 GDB 我发现,Matlab 2010b 调用 DGEQP3: #3 0xaa46ce2f in dgeqp3_ () from /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../。 ./bin/glnx86/mllapack.so 为什么我使用 LAPACK(3.4.0 包含工作说明 176 中提到的修复)得到错误的结果?