broyden2#
- scipy.optimize.broyden2(F, xin, iter=None, alpha=None, reduction_method='restart', max_rank=None, 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
Начальное приближение для решения
- alphafloat, опционально
Начальное приближение для матрицы Якоби
(-1/alpha).- reduction_methodstr или tuple, опционально
Метод, используемый для обеспечения низкого ранга матрицы Бройдена. Может быть либо строкой с названием метода, либо кортежем вида
(method, param1, param2, ...)который даёт имя метода и значения для дополнительных параметров.Доступные методы:
restart: удалить все столбцы матрицы. Не имеет дополнительных параметров.simple: удалить самый старый столбец матрицы. Не имеет дополнительных параметров.svd: оставить только наиболее значимые компоненты SVD. Принимает дополнительный параметр,to_retain, который определяет количество компонент SVD для сохранения при выполнении понижения ранга. По умолчаниюmax_rank - 2.
- max_rankint, необязательный
Максимальный ранг для матрицы Бройдена. По умолчанию бесконечность (т.е. без уменьшения ранга).
- 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='broyden2'в частности.
Примечания
Этот алгоритм реализует обратное обновление Якобиана квази-Ньютона
\[H_+ = H + (dx - H df) df^\dagger / ( df^\dagger df)\]соответствующий второму методу Бройдена.
Ссылки
[1]B.A. van der Rotten, докторская диссертация, “A limited memory Broyden method to solve high-dimensional systems of nonlinear equations”. Mathematisch Instituut, Universiteit Leiden, The Netherlands (2003).
https://web.archive.org/web/20161022015821/http://www.math.leidenuniv.nl/scripties/Rotten.pdf
Примеры
Следующие функции определяют систему нелинейных уравнений
>>> def fun(x): ... return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0, ... 0.5 * (x[1] - x[0])**3 + x[1]]
Решение может быть получено следующим образом.
>>> from scipy import optimize >>> sol = optimize.broyden2(fun, [0, 0]) >>> sol array([0.84116365, 0.15883529])