Я в настоящее время пытаюсь дешево вычислить оценку хорошего ранга для матрицы . Поэтому я вычисляю разложение QR-кода с помощью Columnt, используя
[Q,R,E]=qr(A)
в Matlab. Я оцениваю ранг используя
tol = size(A,n)*eps*norm(A,'fro');
r = sum(abs(diag(R))>tol)
Это прекрасно работает, и график по всем диагональным элементам R выглядит следующим образом:
Если перенести весь алгоритм на C / Fortran, то я заменяю [Q, R, E] = qr (A), используя DGEQP3 из LAPACK, который также вычисляет столбец, развертывающий декомпозицию QR. Но если я использую ту же оценку для ранга, я в основном получаю что-то не так. Тот же график для созданного из DGEQP3, выглядит так
Матрица ввода одинакова для обоих экспериментов.
Теперь у меня вопрос, на какую функцию LAPACK опирается колонка, поворачивающая QR-разложение от Matlab?
Спасибо за любую помощь, Грису
Изменить: DGEQPF дает тот же неправильный результат.
Edit2:
- Входная матрица плотная и построена какE + s i g n ( E , F )
- доступно здесь: http://www-e.uni-magdeburg.de/makoehle/A.mtx.gz (формат MatrixMarket)
- Неправильно : http://www-e.uni-magdeburg.de/makoehle/R_wrong.mtx.gz
- Я использовал LAPACK 3.4.0 с OpenBlas / GotoBLAS (64 бит)
- Matlab 7, 2007b, 2010b Linux 32bit
Edit3: - Используя GDB, я обнаружил, что Matlab 2010b вызывает DGEQP3: # 3 0xaa46ce2f в dgeqp3_ () из /usr/ubuntu10.04/matlabr2010b/bin/glnx86/../../bin/glnx86/../. ./bin/glnx86/mllapack.so Почему я получаю неправильный результат, используя LAPACK (3.4.0 включает исправления, упомянутые в Рабочей записке 176)?