scipy.optimize.

broyden1#

scipy.optimize.broyden1(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='broyden1' в частности.

Примечания

Этот алгоритм реализует обратное обновление Якобиана квази-Ньютона

\[H_+ = H + (dx - H df) dx^\dagger H / ( dx^\dagger H df)\]

что соответствует первому обновлению якобиана Бройдена

\[J_+ = J + (df - J dx) dx^\dagger / dx^\dagger dx\]

Ссылки

[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://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.broyden1(fun, [0, 0])
>>> sol
array([0.84116396, 0.15883641])