Начало работы
Интерфейс
Практически все решатели имеют общие объявления функций:
solver(A, args...; kwargs...)
solver!(x, A, args...; kwargs...)
где A
— это линейный оператор, а x
— начальное предположение. Второе объявление также обновляет x
на месте.
Явные матрицы и безматричный подход
Вместо построения явной матрицы A
типа Matrix
или SparseMatrixCSC
можно передать общий линейный оператор, который выполняет матричные операции неявным образом. Это так называемый безматричный подход.
Для безматричных типов A
должен быть определен следующий интерфейс:
-
A*v
вычисляет произведение матрицы и вектора дляv::AbstractVector
; -
mul!(y, A, v)
вычисляет произведение матрицы и вектора дляv::AbstractVector
на месте; -
eltype(A)
возвращает тип элемента, неявно присутствующий в эквивалентном матричном представленииA
; -
size(A, d)
возвращает номинальные измерения поd
-й оси в эквивалентном матричном представленииA
.
!!! tip "Matrix-free with LinearMaps.jl" Настоятельно рекомендуется использовать LinearMaps.jl для безматричных линейных операторов, так как в нем уже реализованы вышеописанные методы. Вам нужно только написать действие линейного отображения.
Дополнительные аргументы
Имена ключевых слов зависят от метода, однако некоторые из них всегда имеют одинаковое написание:
-
tol
: (относительный) допуск остановки метода; -
verbose
: вывод информации во время итераций; -
maxiter
: максимальное количество допустимых итераций; -
Pl
иPr
: левый и правый предобуславливатели. См. раздел Предобуславливание. -
log::Bool = false
: вывод дополнительного элемента типаConvergenceHistory
, содержащего историю сходимости.
Ключевое слово log
Большинство решателей содержат ключевое слово log
. Оно используется, когда требуется получить больше информации. Для его применения поместите набор log
в true
.
x, ch = cg(Master, rand(10, 10), rand(10) log=true)
svd, L, ch = svdl(Master, rand(100, 100), log=true)
Теперь функция будет возвращать еще один параметр типа ConvergenceHistory
.
ConvergenceHistory
Экземпляр ConvergenceHistory
хранит информацию о решателе.
Количество итераций.
ch.iters
Состояние сходимости.
ch.isconverged
Допуски остановок. (Для доступа требуется ключ Symbol
.)
ch[:tol]
Минимальное количество итераций на перезапуск (только в перезапускаемых методах).
nrests(ch)
Количество произведений матрицы на вектор и транспонированных произведений матрицы на вектор.
nprods(ch)
Данные сохраняются при каждой итерации, доступная информация может быть как вектором, так и матрицей. Эти данные могут быть самыми разными, чаще всего — невязками. (Для доступа требуется ключ Symbol
.)
ch[:resnorm] #Вектор или матрица
ch[:resnorm, x] #Элемент вектора или матрицы
ch[:resnorm, x, y] #Элемент матрицы
#
IterativeSolvers.ConvergenceHistory
— Type
Хранит общую и подробную информацию об итерационном методе.
Поля
mvps::Int
: количество произведений матрицы на вектор.
mtvps::Int
: количество транспонированных произведений матрицы и вектора.
iters::Int
: итерации, выполняемые методом.
restart::T
: перезапуск соответствующей информации.
-
T == Int
: итерации за перезапуск. -
T == Nothing
: методы без перезапусков.
isconverged::Bool
: сходимость метода.
data::Dict{Symbol,Any}
: Хранит всю информацию, сохраненную во время выполнения метода. Хранит допуски, невязки и другие сведения, например значения Ритца в svdl
.
Конструкторы
ConvergenceHistory() ConvergenceHistory(restart)
Создает ConvergenceHistory
с пустыми полями.
Аргументы
restart
: количество итераций за перезапуск.
Графики
Поддерживает построение графиков с использованием пакета Plots.jl
с помощью шаблона типа. Векторы строятся в виде рядов, а матрицы — в виде графиков рассеяния.
Реализации
Base
: getindex
, setindex!
, push!
Построение графиков
ConvergeHistory
предоставляет шаблон для использования с пакетом Plots.jl, что позволяет очень легко строить графики на различных бэкендах. Доступно два шаблона:
Один для всего ConvergenceHistory
.
plot(ch)
Другой — для построения графика данных, привязанных к ключу.
_, ch = gmres(rand(10,10), rand(10), maxiter = 100, log=true)
plot(ch, :resnorm, sep = :blue)
Дополнительные ключевые слова для построения графиков
sep::Symbol = :white
: цвет разделителя строк в перезапускаемых методах.