Io attualmente cercando di calcolare una stima a buon mercato buon grado per una matrice . Pertanto computo un columnt che ruota la decomposizione QR usando
[Q,R,E]=qr(A)
in Matlab. Stimo il rango di usando
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
Funziona bene e una trama su tutte le voci diagonali di R appare come:
Se porto l'intero algoritmo su C / Fortran, sostituisco [Q, R, E] = qr (A) usando DGEQP3 da LAPACK, che calcola anche una colonna che ruota la decomposizione QR. Ma se uso la stessa stima per il grado, ottengo principalmente qualcosa di sbagliato. La stessa trama per la prodotta da DGEQP3 sembra
La matrice di input è esattamente la stessa per entrambi gli esperimenti.
La mia domanda ora è su quale funzione LAPACK fa affidamento sulla colonna che ruota la decomposizione QR da Matlab?
Grazie per l'aiuto, Grisu
Modifica: DGEQPF dà lo stesso risultato sbagliato.
Edit2:
- La matrice di input è densa e costruita come
- è disponibile qui: http://www-e.uni-magdeburg.de/makoehle/A.mtx.gz (formato MatrixMarket)
- La sbagliata : http://www-e.uni-magdeburg.de/makoehle/R_wrong.mtx.gz
- Ho usato LAPACK 3.4.0 con OpenBlas / GotoBLAS (64 bit)
- Matlab 7, 2007b, 2010b Linux 32 bit
Edit3: - Usando GDB ho scoperto che Matlab 2010b chiama DGEQP3: # 3 0xaa46ce2f in dgeqp3_ () da /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../. ./bin/glnx86/mllapack.so Perché ottengo un risultato errato usando LAPACK (3.4.0 includono le correzioni menzionate nella Nota di lavoro 176)?