scipy.optimize.elementwise.

bracket_root#

scipy.optimize.elementwise.bracket_root(f, xl0, xr0=None, *, xmin=None, xmax=None, фактор=None, args=(), maxiter=1000)[источник]#

Ограничьте корень монотонной вещественнозначной функции вещественной переменной.

Для каждого элемента вывода f, bracket_root ищет скалярные границы интервала xl и xr такой, что sign(f(xl)) == -sign(f(xr)) поэлементно.

Функция гарантированно находит допустимый интервал, если функция монотонна, но может найти интервал и при других условиях.

Эта функция работает поэлементно, когда xl0, xr0, xmin, xmax, фактор, и элементы args являются (взаимно транслируемыми) массивами.

Параметры:
fcallable

Функция, для которой требуется найти интервал, содержащий корень. Сигнатура должна быть:

f(x: array, *args) -> array

где каждый элемент x является конечным вещественным числом и args является кортежем, который может содержать произвольное количество массивов, совместимых с x.

f должна быть поэлементной функцией: каждый элемент f(x)[i] должно равняться f(x[i]) для всех индексов i. Он не должен изменять массив x или массивы в args.

xl0, xr0: float array_like

Начальное предположение для интервала, который не обязательно содержит корень. Если xr0 не предоставлен, xr0 = xl0 + 1. Должен быть совместим с широковещанием со всеми другими входными массивами.

xmin, xmaxfloat array_like, optional

Минимальные и максимальные допустимые конечные точки интервала, включительно. Должны быть совместимыми для трансляции со всеми другими входными массивами.

факторfloat array_like, по умолчанию: 2

Коэффициент, используемый для расширения скобки. См. Примечания.

argsкортеж из array_like, необязательно

Дополнительные позиционные аргументы в виде массивов для передачи в f. Если вызываемый объект, для которого требуется найти корень, требует аргументов, которые не транслируются с x, оберните этот вызываемый объект с f такой, что f принимает только x и поддерживающие вещание *args.

maxiterint, по умолчанию: 1000

Максимальное количество итераций алгоритма для выполнения.

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

Объект, похожий на экземпляр scipy.optimize.OptimizeResult со следующими атрибутами. Описания написаны так, как будто значения будут скалярами; однако, если f возвращает массив, выходные данные будут массивами той же формы.

successлогический массив

True где алгоритм успешно завершился (статус 0); False в противном случае.

statusцелочисленный массив

Целое число, представляющее статус завершения алгоритма.

  • 0 : Алгоритм создал допустимый интервал.

  • -1 : Интервал расширился до допустимых пределов без успеха.

  • -2 : Достигнуто максимальное количество итераций.

  • -3 : Встречено неконечное значение.

  • -4 : Итерация была завершена callback.

  • -5: Начальный интервал не удовлетворяет условию `xmin <= xl0 < xr0 < xmax`.

скобка2-кортеж массивов float

Нижняя и верхняя границы интервала, если алгоритм успешно завершился.

f_bracket2-кортеж массивов float

Значения f вычисленные в конечных точках res.bracket, соответственно.

nfevцелочисленный массив

Количество абсцисс, в которых f было вычислено для нахождения корня. Это отличается от количества раз f является вызывается поскольку функция может быть вычислена в нескольких точках за один вызов.

nitцелочисленный массив

Количество выполненных итераций алгоритма.

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

find_root

Примечания

Эта функция обобщает алгоритм, найденный в разрозненных частях scipy.stats кодовой базы. Стратегия заключается в итеративном расширении скобки (l, r) до f(l) < 0 < f(r) или f(r) < 0 < f(l)Скобка растет влево следующим образом.

  • Если xmin не предоставлено, расстояние между xl0 и l итеративно увеличивается на фактор.

  • Если xmin предоставлено, расстояние между xmin и l итеративно уменьшается на фактор. Обратите внимание, что это также увеличивается размер скобки.

Расширение скобки вправо аналогично.

Рост скобки в одном направлении останавливается, когда конечная точка больше не является конечной, значение функции в конечной точке больше не конечно, или конечная точка достигает своего предельного значения (xmin или xmax). Итерация завершается, когда скобка перестаёт расти в обоих направлениях, скобка окружает корень или корень найден (случайно).

Если найдены две скобки - то есть скобка найдена с обеих сторон в одной и той же итерации, возвращается меньшая из двух.

Если найдены корни функции, то оба xl и xr устанавливаются в крайний левый корень.

Примеры

Предположим, мы хотим найти корень следующей функции.

>>> def f(x, c=5):
...     return x**3 - 2*x - c

Сначала мы должны найти допустимый интервал. Функция не монотонна, но bracket_root может предоставить скобку.

>>> from scipy.optimize import elementwise
>>> res_bracket = elementwise.bracket_root(f, 0)
>>> res_bracket.success
True
>>> res_bracket.bracket
(2.0, 4.0)

Действительно, значения функции на концах интервала имеют противоположные знаки.

>>> res_bracket.f_bracket
(-1.0, 51.0)

Как только у нас есть допустимый интервал, find_root может использоваться для предоставления точного корня.

>>> res_root = elementwise.find_root(f, res_bracket.bracket)
>>> res_root.x
2.0945514815423265

bracket_root и find_root принимают массивы для большинства аргументов. Например, чтобы найти корень для нескольких значений параметра c одновременно:

>>> import numpy as np
>>> c = np.asarray([3, 4, 5])
>>> res_bracket = elementwise.bracket_root(f, 0, args=(c,))
>>> res_bracket.bracket
(array([1., 1., 2.]), array([2., 2., 4.]))
>>> res_root = elementwise.find_root(f, res_bracket.bracket, args=(c,))
>>> res_root.x
array([1.8932892 , 2.        , 2.09455148])