Obecnie próbuje tanio obliczyć szacunkową dobry rangi dla macierzy . Dlatego obliczam kolumnę obrotową dekompostację QR za pomocą
[Q,R,E]=qr(A)
w Matlabie. Oceniam rangę za pomocą
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
Działa to dobrze, a wykres wszystkich przekątnych wpisów R wygląda następująco:
W przypadku przeniesienia całego algorytmu do C / Fortran I zastępuję [Q, R, E] = qr (A) za pomocą DGEQP3 z LAPACK, który również oblicza kolumnę rozkładającą QR rozkład. Ale jeśli użyję tego samego oszacowania dla rangi, najczęściej coś źle zrozumiem. Wygląda ten sam wykres dla wyprodukowanego z DGEQP3
Matryca wejściowa jest dokładnie taka sama dla obu eksperymentów.
Moje pytanie brzmi teraz: na jakiej funkcji LAPACK opiera się kolumna rozkładająca kod QR z Matlaba?
Dzięki za wszelką pomoc, Grisu
Edycja: DGEQPF daje ten sam zły wynik.
Edycja2:
- Matryca wejściowa jest gęsta i budowana jakoE + s i g n ( E , F )
- jest dostępna tutaj: http://www-e.uni-magdeburg.de/makoehle/A.mtx.gz (Format MatrixMarket)
- Źle : http://www-e.uni-magdeburg.de/makoehle/R_wrong.mtx.gz
- Użyłem LAPACK 3.4.0 z OpenBlas / GotoBLAS (64-bit)
- Matlab 7, 2007b, 2010b Linux 32bit
Edit3: - Za pomocą GDB dowiedziałem się, że Matlab 2010b wywołuje DGEQP3: # 3 0xaa46ce2f w dgeqp3_ () z /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../. ./bin/glnx86/mllapack.so Dlaczego otrzymuję zły wynik za pomocą LAPACK (3.4.0 zawiera poprawki wymienione w uwadze roboczej 176)?