Saat ini saya mencoba untuk murah menghitung perkiraan yang baik peringkat untuk matriks . Oleh karena itu saya menghitung penggunaan QR decompostion columnt pivoting
[Q,R,E]=qr(A)
di Matlab. Saya memperkirakan peringkat menggunakan
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
Ini berfungsi dengan baik dan plot pada semua entri diagonal R terlihat seperti:
Jika port keseluruhan algoritma ke C / Fortran saya ganti [Q, R, E] = qr (A) menggunakan DGEQP3 dari LAPACK, yang juga menghitung kolom yang memutar dekomposisi QR. Tetapi jika saya menggunakan estimasi yang sama untuk peringkat saya kebanyakan mendapatkan kesalahan. Sepertinya plot yang sama untuk dihasilkan dari DGEQP3
Matriks input sama persis untuk kedua percobaan.
Pertanyaan saya sekarang adalah fungsi LAPACK mana yang diandalkan kolom dekomposisi QR dari Matlab?
Terima kasih atas bantuannya, Grisu
Sunting: DGEQPF memberikan hasil yang salah sama.
Sunting2:
- Matriks input padat dan dibangun sebagai E + s i g n ( E , F )
- Saya menggunakan LAPACK 3.4.0 dengan OpenBlas / GotoBLAS (64 bit)
- Matlab 7, 2007b, 2010b Linux 32bit
Sunting3: - Menggunakan GDB yang saya temukan, bahwa Matlab 2010b memanggil DGEQP3: # 3 0xaa46ce2f di dgeqp3_ () dari /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../. ./bin/glnx86/mllapack.so Mengapa saya mendapatkan hasil yang salah dengan menggunakan LAPACK (3.4.0 termasuk perbaikan yang disebutkan dalam Catatan Kerja 176)?