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целочисленный массив
Количество выполненных итераций алгоритма.
Смотрите также
Примечания
Эта функция обобщает алгоритм, найденный в разрозненных частях
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])