toms748#
- scipy.optimize.toms748(f, a, b, args=(), k=1, xtol=2e-12, rtol=np.float64(8.881784197001252e-16), maxiter=100, full_output=False, disp=True)[источник]#
Найти корень с использованием метода TOMS Algorithm 748.
Реализует метод Algorithm 748 Алефельда, Потро и Ши для нахождения корня функции f на интервале
[a , b], гдеf(a)и f(b) должны иметь противоположные знаки.Он использует смесь обратной кубической интерполяции и шагов «ньютоновской квадратики». [APS1995].
- Параметры:
- fфункция
Функция Python, возвращающая скаляр. Функция \(f\) должен быть непрерывным, и \(f(a)\) и \(f(b)\) имеют противоположные знаки.
- aскаляр,
нижняя граница интервала поиска
- bскаляр,
верхняя граница интервала поиска
- argsкортеж, необязательный
содержащий дополнительные аргументы для функции f. f вызывается функцией
f(x, *args).- kint, необязательный
Количество шагов квадратичного метода Ньютона, выполняемых на каждой итерации.
k>=1.- xtolскаляр, опционально
Вычисленный корень
x0будет удовлетворятьnp.isclose(x, x0, atol=xtol, rtol=rtol), гдеxявляется точным корнем. Параметр должен быть положительным.- rtolскаляр, опционально
Вычисленный корень
x0будет удовлетворятьnp.isclose(x, x0, atol=xtol, rtol=rtol), гдеxявляется точным корнем.- maxiterint, необязательный
Если сходимость не достигнута за maxiter итераций, возникает ошибка. Должно быть >= 0.
- full_outputbool, необязательно
Если full_output равно False, возвращается корень. Если full_output если True, возвращаемое значение
(x, r), где x является корнем, и r is aRootResultsобъект.- dispbool, необязательно
Если True, вызывает RuntimeError, если алгоритм не сошёлся. В противном случае статус сходимости записывается в
RootResultsвозвращаемый объект.
- Возвращает:
- rootfloat
Приближенный корень f
- r
RootResults(присутствует, еслиfull_output = True) Объект, содержащий информацию о сходимости. В частности,
r.convergedравно True, если процедура сошлась.
Смотрите также
Примечания
f должна быть непрерывной. Алгоритм 748 с
k=2является асимптотически наиболее эффективным известным алгоритмом для нахождения корней четырежды непрерывно дифференцируемой функции. В отличие от алгоритма Брента, который может уменьшать длину охватывающего интервала только на последнем шаге, алгоритм 748 уменьшает её на каждой итерации с той же асимптотической эффективностью, с которой находит корень.Для простоты формулировки индексов эффективности предположим, что f имеет 4 непрерывные производные. Для
k=1, порядок сходимости составляет не менее 2.7, и при примерно асимптотически 2 вычислениях функции на итерации индекс эффективности приблизительно равен 1.65. Дляk=2, порядок составляет около 4,6 с асимптотически 3 вычислениями функции за итерацию и индексом эффективности 1,66. Для более высоких значений k, индекс эффективности приближается к k-му корню из(3k-2), следовательноk=1илиk=2обычно подходят.Как упомянуто в документации параметров, вычисленный корень
x0будет удовлетворятьnp.isclose(x, x0, atol=xtol, rtol=rtol), гдеxявляется точным корнем. В форме уравнения это условие завершения выглядит какabs(x - x0) <= xtol + rtol * abs(x0).Значение по умолчанию
xtol=2e-12может привести к неожиданному поведению, если ожидаетсяtoms748всегда вычислять корни с относительной погрешностью, близкой к машинной точности. Следует быть осторожным при выборе xtol для конкретного случая использования. Установкаxtol=5e-324, наименьшее субнормальное число, обеспечит наивысший уровень точности. Большие значения xtol может быть полезно для сохранения вычислений функций, когда корень находится в нуле или рядом с ним в приложениях, где крошечные абсолютные различия, доступные между числами с плавающей запятой около нуля, не имеют смысла.Ссылки
[APS1995]Alefeld, G. E. and Potra, F. A. and Shi, Yixun, Алгоритм 748: Ограничение нулей непрерывных функций, ACM Trans. Math. Softw. Volume 221(1995) doi = {10.1145/210089.210111}
Примеры
>>> def f(x): ... return (x**3 - 1) # only one real root at x = 1
>>> from scipy import optimize >>> root, results = optimize.toms748(f, 0, 2, full_output=True) >>> root 1.0 >>> results converged: True flag: converged function_calls: 11 iterations: 5 root: 1.0 method: toms748