Локально оптимальный блочный сопряженный градиент с предобуславливанием (LOBPCG)
Приближенно решает обобщенную задачу на нахождение собственных значений , где и являются эрмитовыми линейными отображениями, причем — положительно определенное. По умолчанию считается тождеством. Он может находить наименьшие (или наибольшие) собственные значения k
и соответствующие им собственные векторы, которые являются B-ортонормальными. Он также допускает предобуславливатель и матрицу «ограничений» C
, так что алгоритм возвращает наименьшие (или наибольшие) собственные значения, связанные с собственными векторами в нуль-пространстве C’B
.
Использование
#
IterativeSolvers.lobpcg
— Function
Метод локально оптимального блочного сопряженного градиента с предобуславливанием (LOBPCG)
Находит экстремальные собственные значения nev
и соответствующие им собственные векторы, удовлетворяющие AX = λBX
.
A
и B
могут иметь универсальные типы, но Base.mul!(C, AorB, X)
должен быть определен для векторов и матриц X
и C
с заданным шагом. size(A, i::Int)
и eltype(A)
также должны быть определены для A
.
lobpcg(A, [B,] largest, nev; kwargs...) -> results
Аргументы
-
A
: линейный оператор; -
B
: линейный оператор; -
largest
:true
, если требуются наибольшие собственные значения, и false, если требуются наименьшие; -
nev
: нужное количество собственных значений.
Ключевые слова
-
log::Bool
: значение по умолчанию —false
; если заданоtrue
,results.trace
будет хранить состояния итераций; если заданоfalse
, пустым будет толькоresults.trace
; -
P
: предобуславливатель векторов невязки, должен перегружатьldiv!
; -
C
: ограничение, позволяющее разложить векторы невязки решений ортогонально подпространству; должно перегружатьmul!
; -
maxiter
: максимальное количество итераций; значение по умолчанию — 200; -
tol::Real
: допуск, которому должны соответствовать нормы векторов невязки.
Вывод
-
results
: структураLOBPCGResults
.r.λ
иr.X
хранят собственные значения и собственные векторы.
lobpcg(A, [B,] largest, X0; kwargs…) -> результаты
Аргументы
-
A
: линейный оператор; -
B
: линейный оператор; -
largest
:true
, если требуются наибольшие собственные значения, и false, если требуются наименьшие; -
X0
: начальное предположение, не изменяется. Количество столбцов соответствует нужному количеству собственных векторов.
Ключевые слова
-
not_zeros
: значение по умолчанию —false
. Еслиtrue
, считается, чтоX0
не имеет столбцов с одними нулями. -
log::Bool
: значение по умолчанию —false
; если заданоtrue
,results.trace
будет хранить состояния итераций; если заданоfalse
, пустым будет толькоresults.trace
; -
P
: предобуславливатель векторов невязки, должен перегружатьldiv!
; -
C
: ограничение, позволяющее разложить векторы невязки решений ортогонально подпространству; должно перегружатьmul!
; -
maxiter
: максимальное количество итераций; значение по умолчанию — 200; -
tol::Real
: допуск, которому должны соответствовать нормы векторов невязки.
Вывод
-
results
: структураLOBPCGResults
.r.λ
иr.X
хранят собственные значения и собственные векторы.
lobpcg(A, [B,] largest, X0, nev; kwargs…) -> результаты
Аргументы
-
A
: линейный оператор; -
B
: линейный оператор; -
largest
:true
, если требуются наибольшие собственные значения, и false, если требуются наименьшие; -
X0
: блочные векторы, такие, что собственные значения будут найдены size(X0, 2) за один раз; столбцы также используются для инициализации первого пакета векторов Ритца; -
nev
: нужное количество собственных значений.
Ключевые слова
-
log::Bool
: значение по умолчанию —false
; если заданоtrue
,results.trace
будет хранить состояния итераций; если заданоfalse
, пустым будет толькоresults.trace
; -
P
: предобуславливатель векторов невязки, должен перегружатьldiv!
; -
C
: ограничение, позволяющее разложить векторы невязки решений ортогонально подпространству; должно перегружатьmul!
; -
maxiter
: максимальное количество итераций; значение по умолчанию — 200; -
tol::Real
: допуск, которому должны соответствовать нормы векторов невязки.
Вывод
-
results
: структураLOBPCGResults
.r.λ
иr.X
хранят собственные значения и собственные векторы.
#
IterativeSolvers.lobpcg!
— Function
lobpcg!(iterator::LOBPCGIterator; kwargs…) -> результаты
Аргументы
-
iterator::LOBPCGIterator
: структура, содержащая все переменные, необходимые для работы алгоритма LOBPCG.
Ключевые слова
-
not_zeros
: значение по умолчанию —false
. Еслиtrue
, считается, что начальные векторы Ритца не имеют столбцов с одними нулями. -
log::Bool
: значение по умолчанию —false
; если заданоtrue
,results.trace
будет хранить состояния итераций; если заданоfalse
, пустым будет толькоresults.trace
; -
maxiter
: максимальное количество итераций; значение по умолчанию — 200; -
tol::Real
: допуск, которому должны соответствовать нормы векторов невязки.
Вывод
-
results
: структураLOBPCGResults
.r.λ
иr.X
хранят собственные значения и собственные векторы.
Сведения о реализации
Создается LOBPCGIterator
для предварительного выделения всей памяти, необходимой методу, с помощью конструктора LOBPCGIterator(A, B, largest, X, P, C)
, где A
и B
— это матрицы из обобщенной задачи на нахождение собственных значений, largest
указывает, является ли задача задачей на нахождение максимального или минимального собственного значения, X
— это начальный собственный базис, выбранный случайным образом, если он не является входным значением, где size(X, 2)
— это размер блока bs
. P
является предобуславливателем, nothing
задано по умолчанию, а C
— это матрица ограничений. Искомые собственные значения k
находятся по bs
за один раз.