scipy.optimize.

brenth#

scipy.optimize.brenth(f, a, b, args=(), xtol=2e-12, rtol=np.float64(8.881784197001252e-16), maxiter=100, full_output=False, disp=True)[источник]#

Найти корень функции в ограничивающем интервале с использованием метода Брента с гиперболической экстраполяцией.

Вариация классической процедуры Брента для нахождения корня функции f между аргументами a и b, использующая гиперболическую экстраполяцию вместо обратной квадратичной экстраполяции. Bus & Dekker (1975) гарантируют сходимость для этого метода, утверждая, что верхняя граница вычислений функции здесь в 4 или 5 раз больше, чем у метода бисекции. f(a) и f(b) не могут иметь одинаковые знаки. В целом, наравне с процедурой Брента, но не так тщательно протестирована. Это безопасная версия метода секущих, использующая гиперболическую экстраполяцию. Версия здесь от Chuck Harris и реализует Алгоритм M из [BusAndDekker1975], где можно найти дополнительные детали (свойства сходимости, дополнительные замечания и т.д.)

Параметры:
fфункция

Функция Python, возвращающая число. f должна быть непрерывной, а f(a) и f(b) должны иметь противоположные знаки.

aскаляр

Один конец интервала ограничения [a,b].

bскаляр

Другой конец интервала ограничения [a,b].

xtolчисло, опционально

Вычисленный корень x0 будет удовлетворять np.isclose(x, x0, atol=xtol, rtol=rtol), где x является точным корнем. Параметр должен быть положительным. Как и в случае с brentq, для хороших функций метод часто будет удовлетворять указанному выше условию с xtol/2 и rtol/2.

rtolчисло, опционально

Вычисленный корень x0 будет удовлетворять np.isclose(x, x0, atol=xtol, rtol=rtol), где x является точным корнем. Параметр не может быть меньше своего значения по умолчанию 4*np.finfo(float).eps. Как и в случае с brentq, для хороших функций метод часто будет удовлетворять вышеуказанному условию с xtol/2 и rtol/2.

maxiterint, необязательный

Если сходимость не достигнута за maxiter итераций, возникает ошибка. Должно быть >= 0.

argsкортеж, необязательный

Содержит дополнительные аргументы для функции f. f вызывается функцией apply(f, (x)+args).

full_outputbool, необязательно

Если full_output равно False, возвращается корень. Если full_output если True, возвращаемое значение (x, r), где x является корнем, и r is a RootResults объект.

dispbool, необязательно

Если True, вызывает RuntimeError, если алгоритм не сошёлся. В противном случае статус сходимости записывается в любой RootResults возвращаемый объект.

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

Корень f между a и b.

rRootResults (присутствует, если full_output = True)

Объект, содержащий информацию о сходимости. В частности, r.converged равно True, если процедура сошлась.

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

fmin, fmin_powell, fmin_cg, fmin_bfgs, fmin_ncg

многомерные локальные оптимизаторы

leastsq

минимизатор нелинейных наименьших квадратов

fmin_l_bfgs_b, fmin_tnc, fmin_cobyla

ограниченные многомерные оптимизаторы

basinhopping, differential_evolution, brute

глобальные оптимизаторы

fminbound, brent, golden, bracket

локальные скалярные минимизаторы

fsolve

Поиск корней в N-мерном пространстве

brentq, ridder, bisect, newton

1-D поиск корней

fixed_point

скалярный итератор неподвижной точки

elementwise.find_root

эффективный поэлементный одномерный поиск корней

Примечания

Как упомянуто в документации параметров, вычисленный корень x0 будет удовлетворять np.isclose(x, x0, atol=xtol, rtol=rtol), где x является точным корнем. В форме уравнения это условие завершения выглядит как abs(x - x0) <= xtol + rtol * abs(x0).

Значение по умолчанию xtol=2e-12 может привести к неожиданному поведению, если ожидается brenth всегда вычислять корни с относительной погрешностью, близкой к машинной точности. Следует быть осторожным при выборе xtol для конкретного случая использования. Установка xtol=5e-324, наименьшее субнормальное число, обеспечит наивысший уровень точности. Большие значения xtol может быть полезно для сохранения вычислений функций, когда корень находится в нуле или рядом с ним в приложениях, где крошечные абсолютные различия, доступные между числами с плавающей запятой около нуля, не имеют смысла.

Ссылки

[BusAndDekker1975]

Бус, Дж. К. П., Деккер, Т. Дж., «Два эффективных алгоритма с гарантированной сходимостью для нахождения нуля функции», ACM Transactions on Mathematical Software, Том 1, Выпуск 4, Декабрь 1975, стр. 330-345. Раздел 3: «Алгоритм M». DOI:10.1145/355656.355659

Примеры

>>> def f(x):
...     return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.brenth(f, -2, 0)
>>> root
-1.0
>>> root = optimize.brenth(f, 0, 2)
>>> root
1.0