Ich versuche derzeit, eine gute Rangschätzung für eine Matrix billig zu berechnen . Daher berechne ich eine columnt schwenkbare QR-Zerlegung mit
[Q,R,E]=qr(A)
in Matlab. Ich schätze den Rang von mit
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
Dies funktioniert gut und ein Plot über alle diagonalen Einträge von R sieht aus wie:
Wenn der gesamte Algorithmus auf C / Fortran I portiert wird, ersetze ich [Q, R, E] = qr (A) mit DGEQP3 von LAPACK, das auch eine Spalte berechnet, die die QR-Zerlegung schwenkt. Aber wenn ich die gleiche Schätzung für den Rang verwende, verstehe ich meistens etwas falsch. Das gleiche Grundstück für die aus DGEQP3 produziert aussieht
Die Eingabematrix ist für beide Experimente genau gleich.
Meine Frage ist nun, auf welche LAPACK-Funktion sich die spaltenschwenkende QR-Zerlegung von Matlab stützt.
Danke für jede Hilfe, Grisu
Bearbeiten: DGEQPF liefert das gleiche falsche Ergebnis.
Edit2:
- Die Eingabematrix ist dicht und wird als E + s i g n ( E , F ) aufgebaut.
- Ich habe LAPACK 3.4.0 mit OpenBlas / GotoBLAS (64 Bit) verwendet.
- Matlab 7, 2007b, 2010b Linux 32bit
Edit3: - Mit GDB habe ich herausgefunden, dass Matlab 2010b DGEQP3: # 3 0xaa46ce2f in dgeqp3_ () von /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../ aufruft. ./bin/glnx86/mllapack.so Warum erhalte ich mit LAPACK das falsche Ergebnis (3.4.0 einschließlich der in Working Note 176 genannten Korrekturen)?