Метод бисекции
Материал из Википедии — свободной энциклопедии
Метод бисекции или метод деления отрезка пополам — простейший численный метод для решения нелинейных уравнений вида f(x)=0. Преполагается только непрерывность функции f(x).
[править] Описание алгоритма
Задача заключается в нахождении корней нелинейного уравнения
![f(x)=0. \qquad ( 1 )](../../../math/0/3/2/03238ba0865cda57a61a180ecb461181.png)
Для начала итераций необходимо знать интервал [xL,xR] значений x, где находится единственный корень. Произведение значений функции на краях этого интервала получится меньше нуля:
![f(x_L)f(x_R)<0. \qquad ( 2 )](../../../math/5/1/7/517efaa5e77f48b6c13b44e508b145c1.png)
То есть функция меняет знак на данном интервале. Выберем точку внутри интервала
![x_M=(x_R+x_L)/2. \qquad ( 3 )](../../../math/d/9/c/d9c03f9f79532c6232ee4325024ccbc7.png)
Разобьём этот интервал на два [xL,xM] и [xM,xR]. Теперь найдём новый интервал, в котором функция меняет знак. Пусть и соответственно корень находится внутри интервала [xL,xM]. Тогда обозначим xR=xM и повторим описанную процедуру до достижения требуемой точности. За количество итераций N первоначальный отрезок делится в 2N раз.
[править] Программный код
Пример реализации алгоритма на языке Matlab
clear; %Интервал x_L=1; x_R=2; length=x_R-x_L; %Начальная ошибка err=length; %Итерационный цыкл while err>1e-3 %Деление отрезка пополам x_M=(x_L+x_R)/2; %Нахождение нового интервала if tan(x_L)*tan(x_M)<0 x_R=x_M; else if tan(x_M)*tan(x_R)<0 x_L=x_M; else x_M break; end end %Пересчёт ошибки err=(x_R-x_L)/length; end %Вывод результата x_M err
Результат выполнения вполне ожидаемый
x_M = 1.5713 err = 9.7656e-004