Документация Engee

Локально оптимальный блочный сопряженный градиент с предобуславливанием (LOBPCG)

Приближенно решает обобщенную задачу на нахождение собственных значений , где и являются эрмитовыми линейными отображениями, причем  — положительно определенное. По умолчанию считается тождеством. Он может находить наименьшие (или наибольшие) собственные значения k и соответствующие им собственные векторы, которые являются B-ортонормальными. Он также допускает предобуславливатель и матрицу «ограничений» C, так что алгоритм возвращает наименьшие (или наибольшие) собственные значения, связанные с собственными векторами в нуль-пространстве C’B.

Использование

# IterativeSolvers.lobpcgFunction

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

Справочные материалы

Реализация основана на документах [1] и [2].


1. Andrew V. Knyazev. Toward the Optimal Preconditioned Eigensolver: Locally Optimal Block Preconditioned Conjugate Gradient Method, SIAM Journal on Scientific Computing, 23(2):517—​541 2001.