Eu atualmente tentando calcular de forma barata uma estimativa boa classificação para uma matriz . Portanto, eu calculo uma decomposição QR dinâmica de colunas usando
[Q,R,E]=qr(A)
no Matlab. Estimo a classificação de usando
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
Isso funciona bem e um gráfico sobre todas as entradas diagonais de R se parece com:
Se for portar todo o algoritmo para C / Fortran, substituo [Q, R, E] = qr (A) usando DGEQP3 do LAPACK, que também calcula uma coluna que gira a decomposição QR. Mas se eu usar a mesma estimativa para a classificação, geralmente entendo algo errado. O mesmo enredo para o produzido a partir do DGEQP3 parece
A matriz de entrada é exatamente a mesma para os dois experimentos.
Minha pergunta agora é em qual função LAPACK a coluna que gira a decomposição QR do Matlab se baseia?
Obrigado por qualquer ajuda, Grisu
Edit: DGEQPF fornece o mesmo resultado errado.
Edit2:
- A matriz de entrada é densa e é construída comoE + s i g n ( E , F )
- está disponível aqui: http://www-e.uni-magdeburg.de/makoehle/A.mtx.gz (formato MatrixMarket)
- O errado : http://www-e.uni-magdeburg.de/makoehle/R_wrong.mtx.gz
- Eu usei o LAPACK 3.4.0 com OpenBlas / GotoBLAS (64 bits)
- Matlab 7, 2007b, 2010b Linux 32 bits
Edit3: - Usando o GDB descobri, o Matlab 2010b chama DGEQP3: # 3 0xaa46ce2f em dgeqp3_ () em /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../. ./bin/glnx86/mllapack.so Por que obtenho o resultado errado usando o LAPACK (3.4.0 inclui as correções mencionadas na Nota de trabalho 176)?