#include <boost/math/tools/roots.hpp>
namespace boost { namespace math {
namespace tools {
template <class F, class T, class Tol>
std::pair<T, T>
bisect(
F f,
T min,
T max,
Tol tol,
boost::uintmax_t& max_iter);
template <class F, class T, class Tol>
std::pair<T, T>
bisect(
F f,
T min,
T max,
Tol tol);
template <class F, class T, class Tol, class Policy>
std::pair<T, T>
bisect(
F f,
T min,
T max,
Tol tol,
boost::uintmax_t& max_iter,
const Policy&);
template <class F, class T, class Tol>
std::pair<T, T>
bracket_and_solve_root(
F f,
const T& guess,
const T& factor,
bool rising,
Tol tol,
boost::uintmax_t& max_iter);
template <class F, class T, class Tol, class Policy>
std::pair<T, T>
bracket_and_solve_root(
F f,
const T& guess,
const T& factor,
bool rising,
Tol tol,
boost::uintmax_t& max_iter,
const Policy&);
template <class F, class T, class Tol>
std::pair<T, T>
toms748_solve(
F f,
const T& a,
const T& b,
Tol tol,
boost::uintmax_t& max_iter);
template <class F, class T, class Tol, class Policy>
std::pair<T, T>
toms748_solve(
F f,
const T& a,
const T& b,
Tol tol,
boost::uintmax_t& max_iter,
const Policy&);
template <class F, class T, class Tol>
std::pair<T, T>
toms748_solve(
F f,
const T& a,
const T& b,
const T& fa,
const T& fb,
Tol tol,
boost::uintmax_t& max_iter);
template <class F, class T, class Tol, class Policy>
std::pair<T, T>
toms748_solve(
F f,
const T& a,
const T& b,
const T& fa,
const T& fb,
Tol tol,
boost::uintmax_t& max_iter,
const Policy&);
template <class T>
struct eps_tolerance;
struct equal_floor;
struct equal_ceil;
struct equal_nearest_integer;
}}}
Эти функции решают корень некоторой функцииf(x)-без необходимости каких-либо производныхf(x).
<bracket_and_solve_root
>функции используют алгоритмTOMS 748Алефельда, Потры и Ши, который является асимптотически наиболее эффективным из известных и, как было показано, является оптимальным для определенных классов плавных функций. Различия между нимии.
В качестве альтернативы,бисектпредставляет собой простуюбисекциярутину, которая может быть полезна сама по себе в некоторых ситуациях, или альтернативно для сужения диапазона, содержащего корень, до вызова более продвинутого алгоритма.
Все алгоритмы в этом разделе уменьшают диаметр замкнутого интервала с той же асимптотической эффективностью, с которой они находят корень. Это в отличие от методов, основанных на производных, которые могутникогдазначительно уменьшить замкнутый интервал, даже если они быстро приближаются к корню. Это также контрастирует с некоторыми другими свободными от производных методами (например, методом Брента, описанным вБрент-Деккере), который только уменьшает замкнутый интервал на конечной стадии. Следовательно, эти способы возвращают<std::pair
>, содержащий обнаруженный замкнутый интервал, и принимают объект функции, определяющий условие терминации.
Для готовых условий прекращения предусмотрены три функциональных объекта:
- eps_toleranceвызывает прекращение, когда относительная ошибка в замкнутом интервале ниже определенного порога.
- equal_floorиequal_ceilполезны для некоторых статистических применений, где результат известен как целое число.
- Другие пользовательские условия терминации, вероятно, будут использоваться редко, но могут быть полезны в некоторых конкретных обстоятельствах.