Локально оптимальный блочный сопряженный градиент с предобуславливанием (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 за один раз.