Метод бисекции

Пусть[a,b] v отрезок локализации. Предположим, что функция f(x) непрерывна на [a,b] и на концах принимает значения разных знаков .

Алгоритм метода бисекции состоит в построении последовательности вложенных отрезков, на концах которых функция принимает значения разных знаков. Каждый последующий отрезок получают делением пополам предыдущего. Опишем один шаг итераций метода. Пусть на k-ом шаге найден отрезок такой, что . Найдем середину отрезка . Если , то - корень и задача решена. Если нет, то из двух половин отрезка выбираем ту, на концах которой функция имеет противоположные знаки:

, , если

, , если

Критерий окончания итерационного процесса: если длина отрезка локализации меньше 2, то итерации прекращают и в качестве значения корня с заданной точностью принимают середину отрезка.

Теорема о сходимости метода бисекций. Пусть функция f(x) непрерывна на [a,b] и на концах принимает значения разных знаков . Тогда метод сходится и справедлива оценка погрешности:

 

ПРИМЕР 2. Решение уравнения методом бисекции.

% Локализовать корни уравнения f(x)=0, где f(x)= x^3 - cos(x) + 1 (рис. 4.5.)

% Введём функцию f(x)

f = inline('x.^3 - cos(x) + 1');

% Нарисуем её график на отрезке [-10,10]

x = linspace(-10,10,100);

% Оси с градуировкой

figure('Name', '[-10,10]');

axes('NextPlot', 'Add');

grid on

plot(x, f(x));

Рис. 4.5. - Локализация корней уравнения f(x)=0, где f(x)= x^3 - cos(x) +1

 

% Нарисуем её график на отрезке [-1, 1] (рис. 4.6)

% Оси с градуировкой

figure('Name', '[-1,1]');

axes('NextPlot', 'Add');

grid on

x = linspace(-1,1,100);

plot(x, f(x))

 

Рис. 4.6. – График функции на отрезке [-1, 1]

 

% Из графика видно, что корни уравнения a находятся на отрезках [-0.6,-0.4] и [-0.2,0.2]


% Нарисуем её график на отрезке [-0.6,-0.4] (рис. 4.7)

figure('Name', '[-0.6,-0.4]');

axes('NextPlot', 'Add');

grid on

x = linspace(-0.6,-0.4,100);

plot(x, f(x));

 

Рис. 4.7. – График функции на отрезке [-0.6,-0.4]

 

% Нарисуем её график на отрезке [-0.2, 0.2] (рис. 4.8.)

figure('Name', '[-0.2,0.2]');

axes('NextPlot', 'Add');

grid on

x = linspace(-0.2,0.2,100);

plot(x, f(x));

 

Рис. 4.8. – График функции на отрезке [-0.2, 0.2]