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

Examples Where Root Finding Goes Wrong

Boost , Math Toolkit 2.5.0 , Root finding

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

Есть много причин, по которым поиск корневых корней может потерпеть неудачу, вот лишь некоторые из наиболее распространенных примеров:

Local Minima

Если вы начинаете в неправильном месте, например, z0:

Тогда почти любой алгоритм поиска корней спустится в локальный минимум, а не найдет корень.

Flatlining

В этом примере мы начинаем с места (z0), где первая производная по существу равна нулю:

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

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

Это действительно частный случай более распространенной ситуации, когда корневой поиск с производными являетсядивергентным. Рассмотрим, начиная с z0в этом случае:

Начальный шаг Ньютона уведет вас дальше от корня, чем вы начали, как и все последующие шаги.

Micro-stepping / Non-convergence

Рассмотрим, начиная с z0в этой ситуации:

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

Примером такой ситуации может служить попытка найти корень e-1/z2— эта функция имеет один корень приz = 0, но дляz0< 0ни шаги Ньютона, ни шаги Галлея никогда не сойдутся на корне, а дляz0>0шаги фактически расходятся.


PrevUpHomeNext

Статья Examples Where Root Finding Goes Wrong раздела Math Toolkit 2.5.0 Root finding может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Root finding ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:04:03/0.006587028503418/0