scipy.optimize.

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

Тип решателя. Должен быть одним из

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

опции

bisect

x

o

x

o

o

o

o

brentq

x

o

x

o

o

o

o

brenth

x

o

x

o

o

o

o

ridder

x

o

x

o

o

o

o

toms748

x

o

x

o

o

o

o

секанс

x

o

x

o

o

o

o

o

newton

x

o

x

o

o

o

o

o

halley

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)