scipy.optimize.

KrylovJacobian#

класс scipy.optimize.KrylovJacobian(rdiff=None, метод='lgmres', inner_maxiter=20, inner_M=None, outer_k=10, **kw)[источник]#

Найти корень функции, используя приближение Крылова для обратной матрицы Якоби.

Этот метод подходит для решения крупномасштабных задач.

Параметры:
%(params_basic)s
rdifffloat, опционально

Относительный размер шага для использования в численном дифференцировании.

методstr или callable, опционально

Метод Крылова для аппроксимации якобиана. Может быть строкой или функцией, реализующей тот же интерфейс, что и итеративные решатели в scipy.sparse.linalg. Если строка, должна быть одной из: 'lgmres', 'gmres', 'bicgstab', 'cgs', 'minres', 'tfqmr'.

Значение по умолчанию scipy.sparse.linalg.lgmres.

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

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

inner_MLinearOperator или InverseJacobian

Предобусловливатель для внутренней итерации Крылова. Обратите внимание, что вы также можете использовать обратные матрицы Якоби как (адаптивные) предобусловливатели. Например,

>>> from scipy.optimize import BroydenFirst, KrylovJacobian
>>> from scipy.optimize import InverseJacobian
>>> jac = BroydenFirst()
>>> kjac = KrylovJacobian(inner_M=InverseJacobian(jac))

Если предобуславливатель имеет метод с именем 'update', он будет вызван как update(x, f) после каждого нелинейного шага, с x давая текущую точку, и f текущее значение функции.

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

Размер подпространства, сохраняемого в течение нелинейных итераций LGMRES. См. scipy.sparse.linalg.lgmres подробности.

inner_kwargskwargs

Ключевые параметры для 'внутреннего' решателя Крылова (определенного с метод). Имена параметров должны начинаться с inner_ префикс, который будет удалён перед передачей внутреннему методу. См., например, scipy.sparse.linalg.gmres подробности.

%(params_extra)s

Методы

в качестве предобуславливателя

matvec

setup

решить

update

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

root

Интерфейс к алгоритмам нахождения корней для многомерных функций. См. method='krylov' в частности.

scipy.sparse.linalg.gmres
scipy.sparse.linalg.lgmres

Примечания

Эта функция реализует решатель Ньютона-Крылова. Основная идея заключается в вычислении обратной матрицы Якоби с помощью итерационного метода Крылова. Эти методы требуют только вычисления произведений Якоби-вектор, которые удобно аппроксимируются конечной разностью:

\[J v \approx (f(x + \omega*v/|v|) - f(x)) / \omega\]

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

SciPy scipy.sparse.linalg модуль предлагает выбор решателей Крылова. По умолчанию здесь используется lgmres, который является вариантом итерации GMRES с перезапуском, повторно использующим часть информации, полученной на предыдущих шагах Ньютона, для обращения матриц Якоби на последующих шагах.

Для обзора методов Ньютона-Крылова см., например [1], и для разреженного обратного метода LGMRES, см. [2].

Ссылки

[1]

C. T. Kelley, Solving Nonlinear Equations with Newton’s Method, SIAM, pp.57-83, 2003. DOI:10.1137/1.9780898718898.ch3

[2]

D.A. Knoll и D.E. Keyes, J. Comp. Phys. 193, 357 (2004). DOI:10.1016/j.jcp.2003.08.010

[3]

А.Х. Бейкер и Э.Р. Джессап и Т. Мантойфель, SIAM J. Matrix Anal. Appl. 26, 962 (2005). DOI:10.1137/S0895479803422014

Примеры

Следующие функции определяют систему нелинейных уравнений

>>> def fun(x):
...     return [x[0] + 0.5 * x[1] - 1.0,
...             0.5 * (x[1] - x[0]) ** 2]

Решение может быть получено следующим образом.

>>> from scipy import optimize
>>> sol = optimize.newton_krylov(fun, [0, 0])
>>> sol
array([0.66731771, 0.66536458])