Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Algorithm TOMS 748: Alefeld, Potra and Shi: Enclosing zeros of continuous functions

Boost , Math Toolkit 2.5.0 , Root Finding Without Derivatives

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
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&);

Эти функции реализуют TOMS Algorithm 748: он использует смесь кубического, квадратного и линейного (секантного) интерполяции, чтобы найти корень f(x). Две пары функций различаются только тем, доступны ли уже значения для f(a) и f(b).

Вообще говоря, проще (и часто более эффективно) использовать bracket и решать, а не пытаться закрепить корень самостоятельно, как этого требует эта функция.

Эта функция предоставляется, а не метод Brent, поскольку она, как известно, более эффективна во многих случаях (это асимптически наиболее эффективный известный и был показан как оптимальный для определенных классов гладких функций). Он также имеет полезное свойство уменьшать размер кронштейна с каждым шагом, в отличие от метода Брента, который только сокращает интервал закрытия на заключительном этапе. Это делает его особенно полезным, когда вам нужен результат, когда концы интервального раунда до одного и того же целого числа: как часто бывает в статистических приложениях, например. В этой ситуации функция может выйти после гораздо меньшего количества итераций, чем в противном случае было бы возможно.

Параметры алгоритма TOMS 748:

f

Неарочный функтор, который является функцией, чей корень должен быть решен. f(x) не должен равномерно увеличиваться или уменьшаться на x и может иметь несколько корней. Тем не менее, указанные ограничения должны быть заключены в квадратные скобки одного корня.

a

Нижняя граница для начальной кронштейна корня.

b

Верхний предел для начальной кронштейна корня. Это предварительное условие, что a < b и что a и b фиксируют корень, чтобы найти f(a) * f(b) < 0.

fa

Опционно: значение f(a).

fb

Опционно: значение f(b).

tol

Бинарный фанктор, который определяет условие прекращения для поиска корня. tol принимает нынешние скобки на каждом шагу, когда это вернет, то текущие скобки возвращаются в результате. См. также предопределенные выходные фанкторы.

max_iter

Максимальное количество призваний к выполнению в поиске корня. На выходе max_iter настроено на фактическое количество используемых функций.

Окончательный аргумент Политика является необязательным и может использоваться для контроля поведения функции: как он обрабатывает ошибки, какой уровень точности использовать и т.д. См. документ политики для более подробной информации.

toms748_solve возвратит: пара значений r, которые скрепляют корень таким образом:

f(r.first) * f(r.second) <= 0

или

tol(r.first, r.second) == true

или

max_iter >= m

где m является начальным значением max_iter, переданным функции.

Иными словами, это зависит от звонящего, чтобы проверить, произошло ли прекращение в результате превышения max_iter функции ссылок (просто сделано путем проверки обновленного значения max_iter против его предыдущего значения, принятого в качестве параметра), а не потому, что условие прекращения tol было выполнено.


PrevUpHomeNext

Статья Algorithm TOMS 748: Alefeld, Potra and Shi: Enclosing zeros of continuous functions раздела Math Toolkit 2.5.0 Root Finding Without Derivatives может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Root Finding Without Derivatives ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 06:37:07/0.0066111087799072/0