Метод Голуба-Кахана-Ланцоша (SVDL)
Использование
#
IterativeSolvers.svdl
— Function
svdl(A) -> Σ, L, [history]
Вычисляет некоторые сингулярные значения (и при необходимости векторы), используя бидиагонализацию Голуба-Кахана-Ланцоша [1] с массовым перезапуском [2].
Если log
имеет значение true
, метод выведет кортеж X, L, ch
. Где ch
является объектом ConvergenceHistory
. В противном случае будет возвращены только X, L
.
Аргументы
-
A
: матрица или матричный объект, сингулярные значения которого требуются.
Ключевые слова
-
nsv::Int = 6
: количество запрашиваемых сингулярных значений; -
v0 = random unit vector
: вектор начальных предположений в областиA
. Длинаq
должна совпадать с количеством столбцов вA
. -
k::Int = 2nsv
: максимальное количество векторов Ланцоша, которые нужно вычислить перед перезапуском; -
j::Int = nsv
: количество векторов, которые необходимо сохранить в конце перезапуска. Не рекомендуется использовать j < nsv. -
maxiter::Int = minimum(size(A))
: максимальное количество выполняемых итераций; -
verbose::Bool = false
: вывод информации при каждой итерации; -
tol::Real = √eps()
: максимальная абсолютная ошибка в каждом нужном сингулярном значении; -
reltol::Real=√eps()
: максимальная абсолютная ошибка в каждом нужном сингулярном значении относительно оцененной нормы входной матрицы; -
method::Symbol=:ritz
: используемый перезапускающий алгоритм. Вот возможные варианты.-
:ritz
: массовый перезапуск со значениями Ритца [Wu2000]. -
:harmonic
: перезапуск с гармоническими значениями Ритца [Baglama2005].
-
-
vecs::Symbol = :none
: возвращаемые сингулярные векторы.-
:both
: возвращаются и левый, и правый сингулярные векторы. -
:left
: возвращаются только левые сингулярные векторы. -
:right
: возвращаются только правые сингулярные векторы. -
:none
: сингулярные векторы не возвращаются.
-
-
dolock::Bool=false
: если задано значениеtrue
, блокирует сходящиеся значения Ритца, удаляя их из подпространства Крылова, в котором будет выполняться поиск в следующей макроитерации; -
log::Bool = false
: вывод дополнительного элемента типаConvergenceHistory
, содержащего дополнительную информацию о выполнении метода.
Возвращаемые значения
если log
имеет значение false
-
Σ
: список требуемых сингулярных значений, еслиvecs == :none
(по умолчанию), иначе возвращает объектSVD
с заполненными требуемыми сингулярными векторами; -
L
: вычисленные частичные разложения A.
если log
имеет значение true
-
Σ
: список требуемых сингулярных значений, еслиvecs == :none
(по умолчанию),
иначе возвращает объект SVD
с заполненными требуемыми сингулярными векторами;
-
L
: вычисленные частичные разложения A; -
history
: история сходимости.
Ключи ConvergenceHistory
-
:betas
=>betas
: История вычисленных бета. -
:Bs
=>Bs
: История вычисленных проецируемых матриц. -
:ritz
=>ritzvalhist
: Значения Ритца, вычисленные в каждой итерации. -
:conv
=>convhist
: Данные сходимости.
Сведения о реализации
Реализация массивного перезапуска в точности повторяет реализацию SLEPc, описанную в [3]. Этот перезапуск можно отключить, установив значение k = maxiter
, но чаще всего делать это нежелательно.
Сингулярные векторы вычисляются напрямую путем формирования векторов Ритца из произведения векторов Ланцоша L.P
/L.Q
и сингулярных векторов L.B
. Дополнительную точность в сингулярных тройках можно получить с помощью обратной итерации.