root_scalar#
- scipy.optimize.root_scalar(f, args=(), метод=None, скобка=None, fprime=None, fprime2=None, x0=None, x1=None, xtol=None, rtol=None, maxiter=None, опции=None)[источник]#
Найти корень скалярной функции.
- Параметры:
- fcallable
Функция для нахождения корня.
Предположим, что вызываемый объект имеет сигнатуру
f0(x, *my_args, **my_kwargs), гдеmy_argsиmy_kwargsявляются обязательными позиционными и ключевыми аргументами. Вместо передачиf0в качестве вызываемого объекта, оберните его, чтобы он принимал толькоx; например, передатьfun=lambda x: f0(x, *my_args, **my_kwargs)как вызываемый объект, гдеmy_args(кортеж) иmy_kwargs(dict) были собраны перед вызовом этой функции.- argsкортеж, необязательный
Дополнительные аргументы, передаваемые в целевую функцию и её производные.
- методstr, optional
Тип решателя. Должен быть одним из
‘bisect’ (см. здесь)
‘brentq’ (см. здесь)
‘brenth’ (см. здесь)
‘ridder’ (см. здесь)
‘toms748’ (см. здесь)
‘newton’ (см. здесь)
‘secant’ (см. здесь)
‘halley’ (см. здесь)
- bracket: Последовательность из 2 чисел с плавающей запятой, опционально
Интервал, заключающий корень.
f(x, *args)должны иметь разные знаки на двух конечных точках.- x0float, опционально
Начальное приближение.
- x1float, опционально
Второе предположение.
- fprimebool или callable, необязательно
Если fprime является логическим значением и равно True, f предполагается, что возвращает значение целевой функции и её производной. fprime также может быть вызываемым объектом, возвращающим производную от f. В этом случае он должен принимать те же аргументы, что и f.
- fprime2bool или callable, необязательно
Если fprime2 является логическим значением и равно True, f предполагается, что возвращает значение целевой функции и первых и вторых производных. fprime2 также может быть вызываемым объектом, возвращающим вторую производную f. В этом случае он должен принимать те же аргументы, что и f.
- xtolfloat, опционально
Допуск (абсолютный) для завершения.
- rtolfloat, опционально
Допуск (относительный) для завершения.
- maxiterint, необязательный
Максимальное количество итераций.
- опцииdict, optional
Словарь опций решателя. Например,
k, см.show_options()подробности.
- Возвращает:
- solRootResults
Решение представлено как
RootResultsобъект. Важные атрибуты:rootрешение ,convergedлогический флаг, указывающий, завершился ли алгоритм успешно, иflagкоторый описывает причину завершения. См.RootResultsдля описания других атрибутов.
Смотрите также
show_optionsДополнительные параметры, принимаемые решателями
rootНайти корень векторной функции.
Примечания
В этом разделе описаны доступные решатели, которые можно выбрать с помощью параметра 'method'.
По умолчанию используется наилучший доступный метод для данной ситуации. Если задан интервал, может использоваться один из методов поиска на интервале. Если задана производная и начальное значение, может быть выбран один из методов, основанных на производных. Если ни один метод не признан применимым, будет вызвано исключение.
Аргументы для каждого метода следующие (x=обязательный, o=опциональный).
метод
f
args
скобка
x0
x1
fprime
fprime2
xtol
rtol
maxiter
опции
x
o
x
o
o
o
o
x
o
x
o
o
o
o
x
o
x
o
o
o
o
x
o
x
o
o
o
o
x
o
x
o
o
o
o
x
o
x
o
o
o
o
o
x
o
x
o
o
o
o
o
x
o
x
x
x
o
o
o
o
Примеры
Найти корень простого кубического уравнения
>>> from scipy import optimize >>> def f(x): ... return (x**3 - 1) # only one real root at x = 1
>>> def fprime(x): ... return 3*x**2
The
brentqметод принимает на вход скобку>>> sol = optimize.root_scalar(f, bracket=[0, 3], method='brentq') >>> sol.root, sol.iterations, sol.function_calls (1.0, 10, 11)
The
newtonметод принимает на вход одну точку и использует производную(ые).>>> sol = optimize.root_scalar(f, x0=0.2, fprime=fprime, method='newton') >>> sol.root, sol.iterations, sol.function_calls (1.0, 11, 22)
Функция может предоставить значение и производную(ые) за один вызов.
>>> def f_p_pp(x): ... return (x**3 - 1), 3*x**2, 6*x
>>> sol = optimize.root_scalar( ... f_p_pp, x0=0.2, fprime=True, method='newton' ... ) >>> sol.root, sol.iterations, sol.function_calls (1.0, 11, 11)
>>> sol = optimize.root_scalar( ... f_p_pp, x0=0.2, fprime=True, fprime2=True, method='halley' ... ) >>> sol.root, sol.iterations, sol.function_calls (1.0, 7, 8)