IDR(s)
Метод индуцированного снижения размерности — это семейство простых и быстрых алгоритмов на основе подпространств Крылова для решения больших несимметричных линейных систем. Идея варианта IDR(s) состоит в том, чтобы генерировать невязки, которые находятся во вложенных подпространствах уменьшающейся размерности.
Использование
#
IterativeSolvers.idrs!
— Function
idrs!(x, A, b; s = 8, kwargs...) -> x, [history]
Приближенно решает задачу с помощью IDR(s), где s
является размерностью теневого пространства.
Аргументы
-
x
: начальное предположение, будет обновляться на месте; -
A
: линейный оператор; -
b
: правая часть.
Ключевые слова
-
s::Integer = 8
: размерность пространства; -
Pl::precT
: левый предобуславливатель; -
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
является невязкой вk
-й итерации; -
maxiter::Int = size(A, 2)
: максимальное количество итераций; -
log::Bool
: отслеживание нормы невязки в каждой итерации; -
verbose::Bool
: вывод информации о сходимости во время итераций.
Возвращаемые значения
если log
имеет значение false
-
x
: приближенное решение.
если log
имеет значение true
-
x
: приближенное решение; -
history
: история сходимости.
Сведения о реализации
Текущая реализация основана на версии MATLAB от Ван Гийзена (Van Gijzen) и Зонневельда (Sonneveld). Справочную информацию см. в документах [1], [2], на веб-странице о IDR(s) и в главе об IDR в документе [3].