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 : сходимость к допуску не достигнута, количество итераций
Смотрите также
Примечания
Предобусловливатель 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