скобка#
- scipy.optimize.скобка(функция, xa=0.0, xb=1.0, args=(), grow_limit=110.0, maxiter=1000)[источник]#
Ограничить минимум функции.
Для заданной функции и различных начальных точек выполнить поиск в направлении спуска (определяемом начальными точками) и вернуть три точки, ограничивающие минимум функции.
- Параметры:
- функциявызываемая функция f(x,*args)
Целевая функция для минимизации.
- xa, xbfloat, опционально
Начальные точки. По умолчанию xa до 0.0, и xb до 1.0. Локальный минимум не обязательно должен находиться в этом интервале.
- argsкортеж, необязательный
Дополнительные аргументы (если присутствуют), передаваемые в функция.
- grow_limitfloat, опционально
Максимальный предел роста. По умолчанию: 110.0
- maxiterint, необязательный
Максимальное количество итераций для выполнения. По умолчанию 1000.
- Возвращает:
- xa, xb, xcfloat
Конечные точки интервала.
- fa, fb, fcfloat
Значения целевой функции в точках скобки.
- funcallsint
Количество выполненных оценок функции.
- Вызывает:
- BracketError
Если до завершения алгоритма не найдена допустимая скобка. См. примечания для условий допустимой скобки.
Примечания
Алгоритм пытается найти три строго упорядоченные точки (т.е. \(x_a < x_b < x_c\) или \(x_c < x_b < x_a\)) удовлетворяющий \(f(x_b) ≤ f(x_a)\) и \(f(x_b) ≤ f(x_c)\), где одно из неравенств должно быть строго удовлетворено, и все \(x_i\) должен быть конечным.
Примеры
Эта функция может найти выпуклую вниз область функции:
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy.optimize import bracket >>> def f(x): ... return 10*x**2 + 3*x + 5 >>> x = np.linspace(-2, 2) >>> y = f(x) >>> init_xa, init_xb = 0.1, 1 >>> xa, xb, xc, fa, fb, fc, funcalls = bracket(f, xa=init_xa, xb=init_xb) >>> plt.axvline(x=init_xa, color="k", linestyle="--") >>> plt.axvline(x=init_xb, color="k", linestyle="--") >>> plt.plot(x, y, "-k") >>> plt.plot(xa, fa, "bx") >>> plt.plot(xb, fb, "rx") >>> plt.plot(xc, fc, "bx") >>> plt.show()
Обратите внимание, что обе начальные точки находились справа от минимума, и третья точка была найдена в "нисходящем" направлении: направлении, в котором функция, по-видимому, убывала (влево). Конечные точки строго упорядочены, и значение функции в средней точке меньше значений функции в конечных точках; отсюда следует, что минимум должен находиться внутри скобки.