Я работаю над библиотекой матриц только для заголовков, чтобы обеспечить некоторую разумную степень возможностей линейной алгебры в максимально простом пакете, и я пытаюсь рассмотреть, каково текущее состояние техники: вычисление SVD сложная матрица.
Я делаю двухфазную декомпозицию, бидиагонализацию с последующим вычислением сингулярных значений. Прямо сейчас я использую метод домохозяина для бидиагонализации (я полагаю, что LAPACK также использует это), и я думаю, что это примерно так же хорошо, как и в настоящее время (если кто-то не знает алгоритма для него ..) ,
Вычисление сингулярных значений является следующим в моем списке, и я несколько не в курсе того, что такое общие алгоритмы для этого. Я читал здесь, что исследование направлено на метод обратной итерации, который гарантирует ортогональность со сложностью . Мне было бы интересно услышать об этом или других достижениях.
Ответы:
«Рандомизированные алгоритмы» в последнее время стали довольно популярными для частичных svds. Реализацию только с заголовками можно скачать здесь: http://code.google.com/p/redsvd/
Обзор текущих методов можно найти здесь: http://arxiv.org/abs/0909.4061
Для полного свдс я не уверен, что вы можете сделать лучше, чем домохозяин.
источник
(Я хотел просто сделать несколько комментариев, так как у меня нет времени, чтобы выписать детали, но это стало довольно большим для поля для комментариев.)
С другой стороны, часть «сингулярного значения» алгоритма исходит из алгоритма (сдвинутой) дифференциальной фактор-разности (dqd (s)) , который является кульминацией предыдущей работы Фернандо, Парлетта , Деммеля и Кахана (с вдохновением от Хайнца Рутисхаузера).
Как вы, возможно, знаете, методы SVD обычно сначала выполняют бидиагональную декомпозицию, прежде чем сингулярные значения получаются из бидиагональной матрицы. К сожалению, я не слишком осведомлен о текущем лучшем методе для двунаправленной декомпозиции интерфейса; В последний раз я проверял, что обычный метод состоит в том, чтобы начать с разложения QR с поворотом столбца, а затем применить ортогональные преобразования соответственно к треугольному фактору, чтобы окончательно получить разложение по диагонали.
Я понимаю, что я был скудным с деталями; Я постараюсь уточнить этот ответ, как только у меня будет доступ к моей библиотеке ...
источник
Есть библиотеки PROPACK и nu-TRLan.
http://soi.stanford.edu/~rmunk/PROPACK/
http://crd-legacy.lbl.gov/~kewu/trlan/
источник