QMR
Использование
#
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 можно использовать как итератор с помощью |