scipy.sparse.linalg.

gmres#

scipy.sparse.linalg.gmres(A, b, x0=None, *, rtol=1e-05, atol=0.0, перезапуск=None, maxiter=None, M=None, callback=None, callback_type=None)[источник]#

Решить Ax = b с использованием метода обобщенных минимальных невязок.

Параметры:
A{sparse array, ndarray, LinearOperator}

Вещественная или комплексная N-на-N матрица линейной системы. Альтернативно, A может быть линейным оператором, который может производить Ax используя, например, scipy.sparse.linalg.LinearOperator.

bndarray

Правая часть линейной системы. Имеет форму (N,) или (N,1).

x0ndarray

Начальное приближение для решения (вектор нулей по умолчанию).

atol, rtolfloat

Параметры для теста сходимости. Для сходимости, norm(b - A @ x) <= max(rtol*norm(b), atol) должно быть удовлетворено. По умолчанию atol=0. и rtol=1e-5.

перезапускint, необязательный

Количество итераций между перезапусками. Большие значения увеличивают стоимость итерации, но могут быть необходимы для сходимости. Если опущено, min(20, n) используется.

maxiterint, необязательный

Максимальное количество итераций (циклов перезапуска). Итерация остановится после maxiter шагов, даже если указанный допуск не достигнут. См. callback_type.

M{sparse array, ndarray, LinearOperator}

Обратная матрица предобусловливателя A. M должен приближать обратную величину A и легко решаемы (см. Примечания). Эффективное предобуславливание значительно улучшает скорость сходимости, что означает, что требуется меньше итераций для достижения заданной погрешности. По умолчанию предобуславливатель не используется. В этой реализации используется левое предобуславливание, и минимизируется предобусловленный невязка. Однако окончательная сходимость проверяется относительно b - A @ x остаток.

callbackфункция

Пользовательская функция, вызываемая после каждой итерации. Вызывается как callback(args), где args выбираются с помощью callback_type.

callback_type{‘x’, ‘pr_norm’, ‘legacy’}, опционально
Аргумент функции обратного вызова запрошен:
  • x: текущая итерация (ndarray), вызывается при каждом перезапуске

  • pr_norm: относительная норма невязки (с предобусловливанием) (float), вызывается на каждой внутренней итерации

  • legacy (по умолчанию): то же, что и pr_norm, но также изменяет значение maxiter считать внутренние итерации вместо циклов перезапуска.

Этот ключевой аргумент не имеет эффекта, если callback не установлен.

Возвращает:
xndarray

Сходящееся решение.

infoint
Предоставляет информацию о сходимости:

0 : успешное завершение >0 : сходимость к допуску не достигнута, количество итераций

Смотрите также

LinearOperator

Примечания

Предобусловливатель P выбирается так, чтобы P был близок к A, но легко решался. Параметр предобусловливателя, требуемый этой процедурой, это M = P^-1. Обратную матрицу предпочтительно не вычислять явно. Вместо этого используйте следующий шаблон для получения M:

# Construct a linear operator that computes P^-1 @ x.
import scipy.sparse.linalg as spla
M_x = lambda x: spla.spsolve(P, x)
M = spla.LinearOperator((n, n), M_x)

Примеры

>>> import numpy as np
>>> from scipy.sparse import csc_array
>>> from scipy.sparse.linalg import gmres
>>> A = csc_array([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float)
>>> b = np.array([2, 4, -1], dtype=float)
>>> x, exitCode = gmres(A, b, atol=1e-5)
>>> print(exitCode)            # 0 indicates successful convergence
0
>>> np.allclose(A.dot(x), b)
True