Как обстоят дела с алгоритмами разложения по сингулярным числам?

12

Я работаю над библиотекой матриц только для заголовков, чтобы обеспечить некоторую разумную степень возможностей линейной алгебры в максимально простом пакете, и я пытаюсь рассмотреть, каково текущее состояние техники: вычисление SVD сложная матрица.

Я делаю двухфазную декомпозицию, бидиагонализацию с последующим вычислением сингулярных значений. Прямо сейчас я использую метод домохозяина для бидиагонализации (я полагаю, что LAPACK также использует это), и я думаю, что это примерно так же хорошо, как и в настоящее время (если кто-то не знает алгоритма для него ..) , О(N2)

Вычисление сингулярных значений является следующим в моем списке, и я несколько не в курсе того, что такое общие алгоритмы для этого. Я читал здесь, что исследование направлено на метод обратной итерации, который гарантирует ортогональность со сложностью . Мне было бы интересно услышать об этом или других достижениях.О(N)

GCT
источник
есть ли документ для вашей матрицы lib только для заголовков (кроме .h)? Также, пожалуйста, добавьте тег "SVD".
Денис

Ответы:

7

«Рандомизированные алгоритмы» в последнее время стали довольно популярными для частичных svds. Реализацию только с заголовками можно скачать здесь: http://code.google.com/p/redsvd/

Обзор текущих методов можно найти здесь: http://arxiv.org/abs/0909.4061

Для полного свдс я не уверен, что вы можете сделать лучше, чем домохозяин.

dranxo
источник
Это звучит очень интересно, мне нужно взглянуть на этот обзорный документ, спасибо!
Gct
ОП интересуется алгоритмами для плотных матриц. Я не думаю, что рандомизированные алгоритмы конкурентоспособны в таких условиях, если они вообще работают.
Федерико Полони
Это сообщение указывает , что в рандомизированные методы прекрасно работают на плотных матриц research.facebook.com/blog/294071574113354/fast-randomized-svd
dranxo
@dranxo В этом посте нет сравнений точности, и результаты расчета времени выглядят не очень тщательно. Кроме того, рандомизированные алгоритмы основаны на проекции + точное решение мелкомасштабной задачи. Это означает, что OP в любом случае потребуется реализация «стандартного метода» для возникающей мелкомасштабной проблемы.
Федерико Полони
Справедливо. Хотя я немного запутался, почему мы должны думать, что эти методы работают только на разреженных матрицах. Прямо из резюме статьи Джоэля Троппа: «Для плотной входной матрицы рандомизированные алгоритмы требуют O (mn log (k)) операций с плавающей запятой (флопс) в отличие от O (mnk) для классических алгоритмов». arxiv.org/pdf/0909.4061v2.pdf
dranxo
4

О(N)

(Я хотел просто сделать несколько комментариев, так как у меня нет времени, чтобы выписать детали, но это стало довольно большим для поля для комментариев.)

LDLUDU

С другой стороны, часть «сингулярного значения» алгоритма исходит из алгоритма (сдвинутой) дифференциальной фактор-разности (dqd (s)) , который является кульминацией предыдущей работы Фернандо, Парлетта , Деммеля и Кахана (с вдохновением от Хайнца Рутисхаузера).

Как вы, возможно, знаете, методы SVD обычно сначала выполняют бидиагональную декомпозицию, прежде чем сингулярные значения получаются из бидиагональной матрицы. К сожалению, я не слишком осведомлен о текущем лучшем методе для двунаправленной декомпозиции интерфейса; В последний раз я проверял, что обычный метод состоит в том, чтобы начать с разложения QR с поворотом столбца, а затем применить ортогональные преобразования соответственно к треугольному фактору, чтобы окончательно получить разложение по диагонали.

Я понимаю, что я был скудным с деталями; Я постараюсь уточнить этот ответ, как только у меня будет доступ к моей библиотеке ...

JM
источник
От матрицы к двухдиагональной форме, сделайте столбец, затем строку, повторите диагональ вниз: используйте Givens или Household, чтобы обнулить столбец до диагонали, затем сделайте то же самое для строки до супердиагонали.
Адам W
UAВUUзнак равнояВВзнак равноя
0

Есть библиотеки PROPACK и nu-TRLan.

http://soi.stanford.edu/~rmunk/PROPACK/

http://crd-legacy.lbl.gov/~kewu/trlan/

мощность
источник
2
Здесь автор просит алгоритмы, а не библиотеки; могли бы вы вместо этого рассказать об алгоритмах, используемых в этих библиотеках, их вычислительной сложности и почему эти библиотеки являются современными?
Джефф Оксберри