Введение

Алгоритм поиска нуля функции, поиск нулей непрерывных функций

В математике метод бисекции (или деления пополам) — это метод поиска корня, применимый к любой непрерывной функции, для которой известны два значения с противоположными знаками. Метод заключается в многократном делении пополам интервала, заданного этими значениями, и последующем выборе подинтервала, в котором функция меняет знак, и, следовательно, должен содержать корень. Это очень простой и надёжный метод, но он также относительно медленный. По этой причине он часто используется для получения грубого приближения к решению, которое затем служит начальной точкой для более быстро сходящихся методов. Метод также называют методом деления интервала пополам, методом бинарного поиска или методом дихотомии. Для полиномов существуют более сложные методы проверки существования корня в интервале (правило знаков Декарта, теорема Штурма, теорема Будана). Они позволяют расширить метод бисекции до эффективных алгоритмов для нахождения всех вещественных корней полинома; см. Изоляция вещественных корней.

Метод

Метод применим для численного решения уравнения f(x) = 0 для вещественной переменной x, где f — непрерывная функция, определенная на интервале [a, b], и где f(a) и f(b) имеют противоположные знаки. В этом случае говорят, что a и b заключают корень, поскольку, согласно теореме о промежуточных значениях, непрерывная функция f должна иметь по крайней мере один корень в интервале (a, b). На каждом шаге метод делит интервал на две части, вычисляя середину интервала c = (a+b) / 2 и значение функции f(c) в этой точке. Если c является корнем, то процесс успешно завершен и останавливается. В противном случае существует только две возможности: либо f(a) и f(c) имеют противоположные знаки и заключают корень, либо f(c) и f(b) имеют противоположные знаки и заключают корень. Метод выбирает подинтервал, который гарантированно заключает корень, в качестве нового интервала для следующего шага. Таким образом, интервал, содержащий корень f, уменьшается в ширине на 50% на каждом шаге. Процесс продолжается до тех пор, пока интервал не станет достаточно малым. В частности, если f(c) = 0, то c можно принять за решение, и процесс останавливается. В противном случае, если f(a) и f(c) имеют противоположные знаки, то метод присваивает c новое значение b, а если f(b) и f(c) имеют противоположные знаки, то метод присваивает c новое значение a. В обоих случаях новые f(a) и f(b) имеют противоположные знаки, поэтому метод применим к этому меньшему интервалу.

Итерационные задачи

Входными данными для метода являются непрерывная функция f, интервал [a, b] и значения функции f(a) и f(b). Значения функции имеют противоположные знаки (в интервале есть хотя бы один ноль функции). Каждая итерация выполняет следующие шаги: вычислить c, среднюю точку интервала, c = (a+b)/2. Вычислить значение функции в средней точке, f(c). Если сходимость удовлетворительна (то есть, |c - a| достаточно мало, или |f(c)| достаточно мало), вернуть c и прекратить итерацию. Проверить знак f(c) и заменить либо (a, f(a)) или (b, f(b)) на (c, f(c)) так, чтобы в новом интервале сохранялся ноль функции. При реализации метода на компьютере могут возникнуть проблемы с конечной точностью, поэтому часто используются дополнительные тесты сходимости или ограничения на количество итераций. Хотя f непрерывна, конечная точность может препятствовать тому, чтобы значение функции когда-либо стало равным нулю. Например, рассмотрим f(x) = cos x; не существует значения с плавающей точкой, которое бы давало точно ноль. Кроме того, разница между a и b ограничена точностью представления чисел с плавающей точкой; то есть, по мере уменьшения разницы между a и b, в какой-то момент средняя точка интервала [a, b] станет численно идентичной (в пределах точности представления чисел с плавающей точкой) либо a, либо b.

Обобщение в более высоких измерениях

Метод бисекции был обобщен на многомерные функции. Такие методы называются обобщенными методами деления пополам.

Методы, основанные на вычислении степеней

Некоторые из этих методов основаны на вычислении топологической степени.

Характерный метод бисекции

Метод половинного деления использует только знаки функции в различных точках. Пусть f – функция из Rd в Rd, для некоторого целого числа d ≥ 2. Характерный многогранник (также называемый допустимым многоугольником) функции f – это многогранник в Rd, имеющий 2d вершин, такой что в каждой вершине v комбинация знаков f(v) уникальна. Например, для d=2, характерный многогранник f является четырехугольником с вершинами (скажем) A, B, C, D, таким образом, что: Знак f(A) = (–, –), то есть f1(A) < 0, f2(A) < 0. Знак f(B) = (–, +), то есть f1(B) < 0, f2(B) > 0. Знак f(C) = (+, –), то есть f1(C) > 0, f2(C) < 0. Знак f(D) = (+, +), то есть f1(D) > 0, f2(D) > 0. Правильное ребро характерного многоугольника – это ребро между парой вершин, для которых вектор знаков отличается только одним знаком. В приведенном выше примере правильными ребрами характерного четырехугольника являются AB, AC, BD и CD. Диагональ – это пара вершин, для которых вектор знаков отличается по всем d знакам. В приведенном выше примере диагоналями являются AD и BC. На каждой итерации алгоритм выбирает правильное ребро многогранника (скажем, AB) и вычисляет знаки f в его средней точке (скажем, M). Затем он действует следующим образом:

Если Знак f(M) = Знак(A), то A заменяется на M, и мы получаем меньший характерный многогранник. Если Знак f(M) = Знак(B), то B заменяется на M, и мы получаем меньший характерный многогранник. Иначе мы выбираем новое правильное ребро и пробуем снова. Предположим, что диаметр (= длина самого длинного правильного ребра) исходного характерного многогранника равен δ. Тогда требуется, по крайней мере, ⌈log₂ (δ/ε)⌉ половинных делений ребер, чтобы диаметр оставшегося многоугольника был не больше ε.