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