Je tente actuellement de calculer à peu de frais une bonne estimation de rang pour une matrice . Par conséquent, je calcule une décompostion QR pivotante en utilisant
[Q,R,E]=qr(A)
dans Matlab. J'évalue le rang de utilisant
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
Cela fonctionne bien et un tracé sur toutes les entrées diagonales de R ressemble à:
Si vous portez l'algorithme entier sur C / Fortran, je remplace [Q, R, E] = qr (A) en utilisant DGEQP3 de LAPACK, qui calcule également une décomposition QR pivotante de colonne. Mais si j'utilise la même estimation pour le rang, je me trompe surtout. Le même tracé pour le produit à partir de DGEQP3 ressemble
La matrice d'entrée est exactement la même pour les deux expériences.
Ma question est maintenant sur quelle fonction LAPACK la décomposition QR pivotante de colonne de Matlab s'appuie-t-elle?
Merci pour toute aide, Grisu
Edit: DGEQPF donne le même mauvais résultat.
Edit2:
- La matrice d'entrée est dense et construite commeE + s i g n ( E , F )
- est disponible ici: http://www-e.uni-magdeburg.de/makoehle/A.mtx.gz (Format MatrixMarket)
- Le mauvais : http://www-e.uni-magdeburg.de/makoehle/R_wrong.mtx.gz
- J'ai utilisé LAPACK 3.4.0 avec OpenBlas / GotoBLAS (64 bits)
- Matlab 7, 2007b, 2010b Linux 32 bits
Edit3: - En utilisant GDB, j'ai découvert que Matlab 2010b appelle DGEQP3: # 3 0xaa46ce2f dans dgeqp3_ () à partir de /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../. ./bin/glnx86/mllapack.so Pourquoi est-ce que j'obtiens le mauvais résultat en utilisant LAPACK (3.4.0 inclut les correctifs mentionnés dans la note de travail 176)?