scipy.sparse.linalg.

gcrotmk#

scipy.sparse.linalg.gcrotmk(A, b, x0=None, *, rtol=1e-05, atol=0.0, maxiter=1000, M=None, callback=None, m=20, k=None, CU=None, discard_C=False, усечение='oldest')[источник]#

Решить Ax = b с гибким алгоритмом GCROT(m,k).

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

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

bndarray

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

x0ndarray

Начальное предположение для решения.

rtol, atolfloat, опционально

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

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

Максимальное количество итераций. Итерации остановятся после maxiter шагов, даже если заданная точность не достигнута. По умолчанию 1000.

M{разреженный массив, ndarray, LinearOperator}, опционально

Предобусловливатель для A. Предобусловливатель должен аппроксимировать обратную матрицу A. gcrotmk — это 'гибкий' алгоритм, и предобусловливатель может меняться от итерации к итерации. Эффективное предобусловливание значительно улучшает скорость сходимости, что означает, что требуется меньше итераций для достижения заданной погрешности.

callbackфункция, необязательный

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

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

Количество внутренних итераций FGMRES на каждую внешнюю итерацию. По умолчанию: 20

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

Количество векторов, передаваемых между внутренними итерациями FGMRES. Согласно [2], хорошие значения около m. По умолчанию: m

CUсписок кортежей, опционально

Список кортежей (c, u) которые содержат столбцы матриц C и U в алгоритме GCROT(m,k). Подробности см. в [2]. Указанный список и содержащиеся в нем векторы изменяются на месте. Если не указан, начинается с пустых матриц. The c элементы в кортежах могут быть None, в этом случае векторы пересчитываются через c = A u в начале и ортогонализировано, как описано в [3].

discard_Cbool, необязательно

Отбросить C-векторы в конце. Полезно при повторном использовании подпространств Крылова для разных линейных систем.

усечение{'oldest', 'smallest'}, опционально

Схема усечения для использования. Удаление: старейшие векторы или векторы с наименьшими сингулярными значениями с использованием схемы, обсуждаемой в [1,2]. См. [2] для подробного сравнения. По умолчанию: 'oldest'

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

Найденное решение.

infoint

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

  • 0 : успешный выход

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

Ссылки

[1]

E. de Sturler, 'Truncation strategies for optimal Krylov subspace methods', SIAM J. Numer. Anal. 36, 864 (1999).

[2] (1,2,3)

J.E. Hicken и D.W. Zingg, ‘’A simplified and flexible variant of GCROT for solving nonsymmetric linear systems’’, SIAM J. Sci. Comput. 32, 172 (2010).

[3]

М.Л. Паркс, Э. де Штурлер, Г. Макки, Д.Д. Джонсон, С. Майти, «Переиспользование подпространств Крылова для последовательностей линейных систем», SIAM J. Sci. Comput. 28, 1651 (2006).

Примеры

>>> import numpy as np
>>> from scipy.sparse import csc_array
>>> from scipy.sparse.linalg import gcrotmk
>>> R = np.random.randn(5, 5)
>>> A = csc_array(R)
>>> b = np.random.randn(5)
>>> x, exit_code = gcrotmk(A, b, atol=1e-5)
>>> print(exit_code)
0
>>> np.allclose(A.dot(x), b)
True