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]. Указанный список и содержащиеся в нем векторы изменяются на месте. Если не указан, начинается с пустых матриц. Thecэлементы в кортежах могут быть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