scipy.optimize.

newton_krylov#

scipy.optimize.newton_krylov(F, xin, iter=None, rdiff=None, метод='lgmres', inner_maxiter=20, inner_M=None, outer_k=10, verbose=False, maxiter=None, f_tol=None, f_rtol=None, x_tol=None, x_rtol=None, tol_norm=None, линейный поиск='armijo', callback=None, **kw)#

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

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

Параметры:
Ffunction(x) -> f

Функция, корень которой нужно найти; должна принимать и возвращать объект, подобный массиву.

xinarray_like

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

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 подробности.

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

Количество итераций для выполнения. Если опущено (по умолчанию), выполняется столько, сколько требуется для достижения допусков.

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

Выводить статус в stdout на каждой итерации.

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

Максимальное количество итераций для выполнения. Если требуется больше для достижения сходимости, NoConvergence вызывается исключение.

f_tolfloat, опционально

Абсолютная погрешность (в max-норме) для невязки. Если опущена, по умолчанию равна 6e-6.

f_rtolfloat, опционально

Относительная погрешность для невязки. Если опущено, не используется.

x_tolfloat, опционально

Абсолютный минимальный размер шага, определяемый из приближения Якобиана. Если размер шага меньше этого, оптимизация завершается как успешная. Если опущено, не используется.

x_rtolfloat, опционально

Относительный минимальный размер шага. Если опущено, не используется.

tol_normfunction(vector) -> scalar, опционально

Норма для проверки сходимости. По умолчанию используется максимальная норма.

линейный поиск{None, ‘armijo’ (по умолчанию), ‘wolfe’}, опционально

Какой тип линейного поиска использовать для определения размера шага в направлении, заданном приближением Якоби. По умолчанию ‘armijo’.

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

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

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

Массив (аналогичного типа массива как x0) содержащий итоговое решение.

Вызывает:
NoConvergence

Когда решение не было найдено.

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

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])