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

QMR

QMR — это короткорекуррентная версия GMRES для приближенного решения для , где  — это линейный оператор, а  — вектор правой части. может быть несимметричным.

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

# IterativeSolvers.qmrFunction

qmr(A, b; kwargs...) -> x, [history]

То же, что и qmr!, но выделяет вектор решений x, инициализированный нулями.

# IterativeSolvers.qmr!Function

qmr!(x, A, b; kwargs...) -> x, [history]

Решает задачу методом квазиминимальной невязки (QMR).

Аргументы

  • x: начальное предположение, будет обновляться на месте;

  • A: линейный оператор;

  • b: правая часть.

Ключевые слова

  • initially_zero::Bool: Если true предполагает iszero(x) так, чтобы одно произведение матрицы и вектора могло быть сохранено при вычислении начального вектора невязки;

  • maxiter::Int = size(A, 2): максимальное количество итераций;

  • abstol::Real = zero(real(eltype(b))), reltol::Real = sqrt(eps(real(eltype(b)))): абсолютный и относительный допуски для условия остановки |r_k| ≤ max(reltol * |r_0|, abstol), где r_k = A * x_k - b

  • log::Bool: отслеживание нормы невязки в каждой итерации;

  • verbose::Bool: вывод информации о сходимости во время итераций.

Возвращаемые значения

если log имеет значение false

  • x: приближенное решение.

если log имеет значение true

  • x: приближенное решение;

  • history: история сходимости.

Сведения о реализации

QMR использует трехдиагональную структуру матрицы Хессенберга. Хотя QMR схож с GMRES, вместо использования процесса Арнольди пара биортогональных векторных пространств и строится с помощью процесса Ланцоша. Для этого необходимо, чтобы было доступно сопряжение adjoint(A).

QMR позволяет вычислять и с помощью трехчленного рекуррентного соотношения. Из этих значений также можно построить трехчленное рекуррентное соотношение для проекции на вектор решения, используя часть последнего столбца матрицы Хессенберга. Поэтому мы предварительно выделяем только восемь векторов.

Более подробные сведения о реализации см. в исходной статье [1] или [2]: Freund, W. R., & Nachtigal, N. M. (1990). QMR: for a Quasi-Minimal Residual Linear Method Systems. (December).].

QMR можно использовать как итератор с помощью qmr_iterable!. Это позволяет получить доступ к следующему, текущему и предыдущему базисным векторам Крылова во время итерации.


1. Freund, W. R., & Nachtigal, N. M. (1990). QMR : for a Quasi-Minimal Residual Linear Method Systems. (December).
2. Saad, Y. (2003). Interactive method for sparse linear system. footnote:Freund1990[