brentq#
- scipy.optimize.brentq(f, a, b, args=(), xtol=2e-12, rtol=np.float64(8.881784197001252e-16), maxiter=100, full_output=False, disp=True)[источник]#
Найти корень функции в интервале скобок с использованием метода Брента.
Использует классический метод Брента для нахождения корня функции f на интервале смены знака [a, b]. Обычно считается лучшим из алгоритмов нахождения корней здесь. Это безопасная версия метода секущих, которая использует обратную квадратичную экстраполяцию. Метод Брента сочетает ограничение корней, бисекцию интервала и обратную квадратичную интерполяцию. Его иногда называют методом ван Вейнгардена-Деккера-Брента. Брент (1973) утверждает, что сходимость гарантирована для функций, вычислимых в пределах [a,b].
[Brent1973] предоставляет классическое описание алгоритма. Другое описание можно найти в последнем издании Numerical Recipes, включая [PressEtal1992]. Третье описание находится в http://mathworld.wolfram.com/BrentsMethod.html. Алгоритм должен быть легко понятен просто при чтении нашего кода. Наш код немного расходится со стандартными представлениями: мы выбираем другую формулу для шага экстраполяции.
- Параметры:
- fфункция
Функция Python, возвращающая число. Функция \(f\) должен быть непрерывным, и \(f(a)\) и \(f(b)\) должны иметь противоположные знаки.
- aскаляр
Один конец интервала локализации \([a, b]\).
- bскаляр
Другой конец интервала ограничения \([a, b]\).
- xtolчисло, опционально
Вычисленный корень
x0будет удовлетворятьnp.isclose(x, x0, atol=xtol, rtol=rtol), гдеxявляется точным корнем. Параметр должен быть положительным. Для хороших функций метод Брента часто будет удовлетворять указанному условию сxtol/2иrtol/2. [Brent1973]- rtolчисло, опционально
Вычисленный корень
x0будет удовлетворятьnp.isclose(x, x0, atol=xtol, rtol=rtol), гдеxявляется точным корнем. Параметр не может быть меньше своего значения по умолчанию4*np.finfo(float).eps. Для хороших функций метод Брента часто удовлетворяет вышеуказанному условию сxtol/2иrtol/2. [Brent1973]- maxiterint, необязательный
Если сходимость не достигнута за maxiter итераций, возникает ошибка. Должно быть >= 0.
- argsкортеж, необязательный
Содержит дополнительные аргументы для функции f. f вызывается функцией
apply(f, (x)+args).- full_outputbool, необязательно
Если full_output равно False, возвращается корень. Если full_output если True, возвращаемое значение
(x, r), где x является корнем, и r is aRootResultsобъект.- dispbool, необязательно
Если True, вызывает RuntimeError, если алгоритм не сошёлся. В противном случае статус сходимости записывается в любой
RootResultsвозвращаемый объект.
- Возвращает:
- rootfloat
Корень f между a и b.
- r
RootResults(присутствует, если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-мерном пространстве
brenth,ridder,bisect,newton1-D поиск корней
fixed_pointскалярный итератор неподвижной точки
elementwise.find_rootэффективный поэлементный одномерный поиск корней
Примечания
f должна быть непрерывной. f(a) и f(b) должны иметь противоположные знаки.
Как упомянуто в документации параметров, вычисленный корень
x0будет удовлетворятьnp.isclose(x, x0, atol=xtol, rtol=rtol), гдеxявляется точным корнем. В форме уравнения это условие завершения выглядит какabs(x - x0) <= xtol + rtol * abs(x0).Значение по умолчанию
xtol=2e-12может привести к неожиданному поведению, если ожидаетсяbrentqвсегда вычислять корни с относительной погрешностью, близкой к машинной точности. Следует быть осторожным при выборе xtol для конкретного случая использования. Установкаxtol=5e-324, наименьшее субнормальное число, обеспечит наивысший уровень точности. Большие значения xtol может быть полезно для сохранения вычислений функций, когда корень находится в нуле или рядом с ним в приложениях, где крошечные абсолютные различия, доступные между числами с плавающей запятой около нуля, не имеют смысла.Ссылки
[Brent1973] (1,2,3)Brent, R. P., Алгоритмы минимизации без производных. Энглвуд Клиффс, Нью-Джерси: Prentice-Hall, 1973. Гл. 3-4.
[PressEtal1992]Press, W. H.; Flannery, B. P.; Teukolsky, S. A.; and Vetterling, W. T. Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2-е изд. Кембридж, Англия: Cambridge University Press, стр. 352-355, 1992. Раздел 9.3: “Метод Ван Вейнгардена-Деккера-Брента.”
Примеры
>>> def f(x): ... return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.brentq(f, -2, 0) >>> root -1.0
>>> root = optimize.brentq(f, 0, 2) >>> root 1.0