Tôi hiện đang cố gắng với giá rẻ tính toán một ước lượng tốt thứ hạng cho một ma trận . Do đó, tôi tính toán phân tách QR xoay vòng bằng cách sử dụng
[Q,R,E]=qr(A)
trong Matlab. Tôi ước tính thứ hạng của bằng cách sử dụng
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
Điều này hoạt động tốt và một âm mưu trên tất cả các mục chéo của R trông giống như:
Nếu chuyển toàn bộ thuật toán sang C / Fortran, tôi thay thế [Q, R, E] = qr (A) bằng DGEQP3 từ LAPACK, cũng tính toán phân tách QR xoay vòng cột. Nhưng nếu tôi sử dụng cùng một ước tính cho thứ hạng, tôi hầu như nhận được một cái gì đó sai. Cốt truyện tương tự cho được sản xuất từ DGEQP3 trông giống như
Ma trận đầu vào hoàn toàn giống nhau cho cả hai thí nghiệm.
Câu hỏi của tôi bây giờ là chức năng LAPACK nào mà cột xoay vòng phân tách QR từ Matlab dựa vào?
Cảm ơn vì sự giúp đỡ, Grisu
Chỉnh sửa: DGEQPF cho kết quả sai tương tự.
Chỉnh sửa2:
- Ma trận đầu vào dày đặc và được xây dựng dưới dạngE + s i g n ( E , F )
- có sẵn ở đây: http://www-e.uni-magdeburg.de/makoehle/A.mtx.gz (Định dạng MatrixMarket)
- Các sai : http://www-e.uni-magdeburg.de/makoehle/R_wrong.mtx.gz
- Tôi đã sử dụng LAPACK 3.4.0 với OpenBlas / GotoBLAS (64 bit)
- Matlab 7, 2007b, 2010b Linux 32 bit
Chỉnh sửa: ./bin/glnx86/mllapack.so Tại sao tôi nhận được kết quả sai khi sử dụng LAPACK (3.4.0 bao gồm các bản sửa lỗi được đề cập trong Lưu ý làm việc 176)?