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

Стационарные методы

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

В Julia матрицы хранятся по столбцам. Чтобы избежать пропусков кэша, реализации стационарных методов проходят по матрицам по столбцам. В этом отличие от классических реализаций. Кроме того, методы SOR и SSOR не могут быть вычислены на месте. Для них требуется временный вектор.

Когда дело касается `SparseMatrixCSC`, мы предварительно вычисляем во всех стационарных методах целочисленный массив индексов диагонали, чтобы избежать дорогостоящего поиска в каждой итерации.

Якоби

jacobi(A, b) -> x

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

jacobi!(x, A::AbstractMatrix, b; maxiter=10) -> x

Выполняет ровно maxiter итераций Якоби.

Выделяет один временный вектор и проходит A по столбцам.

Выдает исключение LinearAlgebra.SingularException, если диагональ имеет нуль. Эта проверка выполняется один раз и заранее.

jacobi!(x, A::SparseMatrixCSC, b; maxiter=10) -> x

Выполняет ровно maxiter итераций Якоби.

Выделяет временный вектор и предварительно вычисляет диагональные индексы.

Выдает исключение LinearAlgebra.SingularException, если диагональ имеет нуль. Эта проверка выполняется один раз и заранее.

Гаусс-Зейдль

gauss_seidel(A, b) -> x

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

gauss_seidel!(x, A::AbstractMatrix, b; maxiter=10) -> x

Выполняет ровно maxiter итераций Гаусса-Зейделя.

Работает полностью на месте и проходит A по столбцам.

Выдает исключение LinearAlgebra.SingularException, если диагональ имеет нуль. Эта проверка выполняется один раз и заранее.

gauss_seidel!(x, A::SparseMatrixCSC, b; maxiter=10) -> x

Выполняет ровно maxiter итераций Гаусса-Зейделя.

Работает полностью на месте, но предварительно вычисляет диагональные индексы.

Выдает исключение LinearAlgebra.SingularException, если диагональ имеет нуль. Эта проверка выполняется один раз и заранее.

Последовательная верхняя релаксация (SOR)

sor(A, b, ω::Real) -> x

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

sor!(x, A::AbstractMatrix, b, ω::Real; maxiter=10) -> x

Выполняет ровно maxiter итераций SOR с параметром релаксации ω.

Выделяет один временный вектор и проходит A по столбцам.

Выдает исключение LinearAlgebra.SingularException, если диагональ имеет нуль. Эта проверка выполняется один раз и заранее.

sor!(x, A::SparseMatrixCSC, b, ω::Real; maxiter=10)

Выполняет ровно maxiter итераций SOR с параметром релаксации ω.

Выделяет временный вектор и предварительно вычисляет диагональные индексы.

Выдает исключение LinearAlgebra.SingularException, если диагональ имеет нуль. Эта проверка выполняется один раз и заранее.

Симметричная последовательная верхняя релаксация (SSOR)

ssor(A, b, ω::Real) -> x

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

ssor!(x, A::AbstractMatrix, b, ω::Real; maxiter=10) -> x

Выполняет ровно maxiter итераций SSOR с параметром релаксации ω. Каждая итерация по сути является прямой и обратной прогонкой SOR.

Выделяет один временный вектор и проходит A по столбцам.

Выдает исключение LinearAlgebra.SingularException, если диагональ имеет нуль. Эта проверка выполняется один раз и заранее.

ssor!(x, A::SparseMatrixCSC, b, ω::Real; maxiter=10)

Выполняет ровно maxiter итераций SSOR с параметром релаксации ω. Каждая итерация по сути является прямой и обратной прогонкой SOR.

Выделяет временный вектор и предварительно вычисляет диагональные индексы.

Выдает исключение LinearAlgebra.SingularException, если диагональ имеет нуль. Эта проверка выполняется один раз и заранее.

Все стационарные методы можно использовать как итераторы.