Определитель матрицы ▦ Производная функции dydx График 3D Упростить выражение Графический метод решения задач нелинейного программирования ⇲
Примеры решений Метод Зейделя Метод Ньютона Метод хорд Решение уравнений Метод LU-разложения Метод Гаусса Матрица Гессе Градиент функции Экстремум функции

Метод половинного деления (метод дихотомии или метод бисекции)

Данный метод описывает алгоритм нахождение корней (нулей) функции. Чтобы найти минимум целевой функции методом дихотомии используйте этот калькулятор.

Оглавление

Считаем, что отделение корней произведено и на интервале [a,b] расположен один корень, который необходимо уточнить с погрешностью ε.
Итак, имеем f(a)f(b)<0. Метод дихотомии заключается в следующем. Определяем половину отрезка c=½(a+b) и вычисляем f(c). Проверяем следующие условия
1. Если |f(c)| < ε, то c – корень. Здесь ε - заданная точность.
2. Если f(c)f(a)<0, то корень лежит в интервале [a,c].
3. Если f(c)f(b)<0, то корень лежит на отрезке[c,b].
Продолжая процесс половинного деления в выбранных подынтервалов, можно дойти до сколь угодно малого отрезка, содержащего корень ξ.
Так как за каждую итерацию интервал, где расположен корень уменьшается в два раза, то через n итераций интервал будет равен:
при этом an≤ξ≤bn, , .
В качестве корня ξ. возьмем =½(bn+an). Тогда погрешность определения корня будет равна (bn – an)/2. Если выполняется условие (bn–an)/2<ε, то процесс поиска заканчивается и ε=½(bn+an).

Теорема 2. Итерационный процесс половинного деления сходится к искомому корню ξ с любой наперед заданной точностью ε.
Доказательство: Рассмотрим последовательность чисел ξi являющихся приближением корня на i-ом шаге.
ξi=½(bi+ai), i=0,1,...
где a0=a; b0=b; ai;bi - границы подынтервалов, в которых f(ai)f(bi)<0. Рассмотрим разности
1- ξ0|, |ξ2- ξ1|, …, |ξn- ξn-1|.
Имеем |ξ10|=½(b1+a1-b0-a0). Так как всегда имеем либо b1=b0, a1=½(b0+a0), либо a1=a0, b1=½(a0+b0), поэтому  , если, b1=b0
 либо , если a1=a0.
Повторяя аналогичные рассуждения и учитывая, что всегда выполняется соотношение либо bi=bi-1, ai=½(bi-1+ai-1), либо bi=½(bi-1+ai-1), ai=ai-1. Получим
;
;
, где a0=a, b0=b.
Отсюда видно, что какое бы малое число ε>0 мы ни задали, всегда можно найти такое n, что  ч.т.д.
Графически метод дихотомии выглядит следующим образом

|f(c)|≤δ f(a)f(c)<0 f(b)f(c)<0

Сходимость метода дихотомии линейная с коэффициентом α=0,5. Покажем это.
Если в качестве xn брать an, то из формулы (6) мы можем записать . Отсюда следует .
Отметим, что за 10 итераций (n=10) интервал уменьшается в 210 = 1024 ≈ 103 раз. За 20 итераций (n=2) уменьшается в 220 ≈ 106 раз.

Перейти к онлайн решению своей задачи

Скачать решение

Методом дихотомии также можно находить и минимальное и максимальное значения функции. Для этого необходимо найти производную функции и приравнять ее нулю.

Алгоритм метода половинного деления (метод дихотомии)

Метод деления пополам позволяет исключать в точности половину интервала на каждой итерации. При использовании метода считается, что функция непрерывна и имеет на концах интервала разный знак. После вычисления значения функции в середине интервала одна часть интервала отбрасывается так, чтобы функция имела разный знак на концах оставшейся части. Итерации метода деления пополам прекращаются, если интервал становится достаточно малым.
Словесный алгоритм.
  1. Найдем отрезок [a,b]: f(a)f(b)<0.
  2. Положим c=(a+b)/2.
  3. Если f(a)f(c)<0, то положим b=c, в противном случае a=c.
  4. Если tex2html_wrap_inline1294, то tex2html_wrap_inline1296, в противном случае выполнить пункт 2.
Описание переменных
a - левая граница
b - правая граница
sigma - погрешность
max_step - максимальное кол-во шагов
x - найденный корень
f_a – значение функции в начале интервала
f_b – значение функции в конце интервала
xm – середина интервала
f_xm – значение функции в середине интервала
k – переменная цикла

Блок – схема алгоритма

Метод половинного деления на языке Pascal. Листинг

program dohometr;
var
a:real;		{левая граница}
b:real;		{правая граница}
sigma:real;	{погрешность}
max_step:longint;	{максимальное кол-во шагов}
x:real;		{найденный корень}

function f(x:real):real;{функция}
begin
f:=x*sin(x);
end;

function FindKoren(a,b:real):real;{уменьшение интервала неопределенности} 
var f_a,f_b,xm,f_xm:real;k:longint;
begin
k:=0;
f_a:=f(a);	       {устанавливаем первоначальное значение}
f_b:=f(b);	       {устанавливаем первоначальное значение}
while (b-a > sigma)and(k < max_step) do
		begin
		xm:=(a+b)/2;	          {середина интервала}
		f_xm:=f(xm);
if (f_a*f_xm <=0) then       {функция должна иметь разный знак}
			begin	          {на границах интервала}
			b:=xm;
			f_b:=f_xm	          {исключен левый подынтервал}
			end
			else
			begin
			a:=xm;
			f_a:=f_xm;	    {исключен правый подынтервал}
			end;
	end;
findkoren:=(a+b)/2;	    {ответ}
end;

begin
Write('Введите левый интервал, a = ');ReadLN(a);
Write('Введите правый интервал, b = ');ReadLN(b); 
sigma:=0.001;         {погрешность} 
max_step:=1000000;
WriteLN('Корень равен, х = ',FindKoren(a,b):10:3); 
end.

Метод дихотомии в Excel

Чтобы найти корни уравнения с помощью метода половинного деления (он же метод дихотомии - деление отрезка пополам) необходимо:
  1. Получить шаблон через сервис.
  2. Уточнить интервалов в ячейках B2, B3.
  3. Копировать строки итераций до требуемой точности.

В ячейку B2 заносим начало интервала a, в ячейку B3 заносим конец интервала b. Строку 4 отводим под заголовок таблицы. Сам процесс итераций организуем в ячейках A5:G5.

Пример решения

Найти корни уравнения: x•sin(x) = 0

Решение. Чтобы отыскать предварительные интервалы, строим график функции.

Как видно, первый корень лежит в интервале [-2;2], второй корень функции находится в интервале [2;4].
Уточним интервалы, в которых будут находиться корни уравнения. Для этого исходный интервал [2;4] разобьем на 10 подынтервалов.
h5 = 2 + 5*(4-2)/10 = 3
h6 = 2 + (5+1)*(4-2)/10 = 3.2
Поскольку F(3)*F(3.2)<0, то корень лежит в пределах [3;3.2].
Итерация 1.
Находим середину отрезка: c = (3 + 3.2)/2 = 3.1
F(c) = 0.13
F(x) = 0.42
Поскольку F(c)•F(x) > 0, то a=3.1
Итерация 2.
Находим середину отрезка: c = (3.1 + 3.2)/2 = 3.15
F(c) = -0.0265
F(x) = 0.13
Поскольку F(c)•F(x) < 0, то b=3.15
Итерация 3.
Находим середину отрезка: c = (3.1 + 3.15)/2 = 3.13
F(c) = 0.0518
F(x) = 0.13
Поскольку F(c)•F(x) > 0, то a=3.13
Итерация 4.
Находим середину отрезка: c = (3.13 + 3.15)/2 = 3.14
F(c) = 0.0128
F(x) = 0.0518
Поскольку F(c)•F(x) > 0, то a=3.14
Остальные расчеты сведем в таблицу.

N c a b f(c) f(x)
1 3.1 3 3.2 0.1289 0.1289
2 3.15 3.1 3.2 0.1289 -0.02648
3 3.125 3.1 3.15 0.05185 0.05185
4 3.1375 3.125 3.15 0.01284 0.01284
5 3.1438 3.1375 3.15 0.01284 -0.00678
6 3.1406 3.1375 3.1438 0.00304 0.00304
7 3.1422 3.1406 3.1438 0.00304 -0.00187
8 3.1414 3.1406 3.1422 0.000586 0.000586
Ответ: x = 3.14; F(x) = 0.000586
Количество итераций, N = 8
Параметр сходимости.

Пример №1. Найти экстремум функции: y=5x2-4x+1 методом дихотомии, если ε=0.1, а исходный интервал [0,10].
Решение. Находим производную функции: y ' = 10x-4. Найдем нули функции методом дихотомии: y'=0.
Поскольку F(0)*F(10)<0 (т.е. значения функции на его концах имеют противоположные знаки), то корень лежит в пределах [0;10].
Итерация 1.
Находим середину отрезка: c = (0 + 10)/2 = 5
F(x) = 46
F(c) = -4
Поскольку F(c)•F(a) < 0, то b=5
Итерация 2.
Находим середину отрезка: c = (0 + 5)/2 = 2.5
F(x) = 21
F(c) = 46
Поскольку F(c)•F(a) < 0, то b=2.5
Итерация 3.
Находим середину отрезка: c = (0 + 2.5)/2 = 1.25
F(x) = 8.5
F(c) = 21
Поскольку F(c)•F(a) < 0, то b=1.25
Итерация 4.
Находим середину отрезка: c = (0 + 1.25)/2 = 0.625
F(x) = 2.25
F(c) = 8.5
Поскольку F(c)•F(a) < 0, то b=0.625

Остальные расчеты сведем в таблицу.

N c a b f(c) f(x) ε
1 5 10 5 -4 46 5
2 2.5 5 2.5 46 21 2.5
3 1.25 2.5 1.25 21 8.5 1.25
4 0.625 1.25 0.625 8.5 2.25 0.625
5 0.3125 0.625 0.3125 2.25 -0.875 0.3125
6 0.4688 0.625 0.4688 -0.875 0.6875 0.1563
Таким образом, в качестве корня можно принять:
x=(0.3125+0.46875)/2 = 0.3906
Ответ:x=0.3906; F(x) = 0.6875
Количество итераций, N = 6
Параметр сходимости. Сходимость метода дихотомии линейная с коэффициентом α = 0.5.

На отрезке [0,10] функция имеет экстремум x=0.3906.

Пример №2. Методом дихотомического поиска найдите максимумы функций, пологая, что Δ=0,05.
f(x) = x*cos(x), 0 ≤x≤ π

Пример №3. Методом бисекции найти решение нелинейного уравнения на отрезке [a,b] с точностью ε = 10-2. Выбрав полученное решение в качестве начального приближения, найти решение уравнения методом простой итерации с точностью ε = 10-4. Для метода простой итерации обосновать сходимость и оценить достаточное для достижения заданной точности число итераций.
sqrt(t)+x2 = 10, a = 2.6, b = 3

Найдем корни уравнения:
Используем для этого Метод половинного деления (метод дихотомии)..
Считаем, что отделение корней произведено и на интервале [a,b] расположен один корень, который необходимо уточнить с погрешностью ε.
Итак, имеем f(a)f(b)<0. Метод дихотомии заключается в следующем.
Определяем половину отрезка c=1/2(a+b) и вычисляем f(c). Проверяем следующие условия:
1. Если |f(c)| < ε, то c – корень. Здесь ε - заданная точность.
2. Если f(c)f(a)<0, то корень лежит в интервале [a,c].
3. Если f(c)f(b)<0, то корень лежит на отрезке[c,b].
Продолжая процесс половинного деления в выбранных подынтервалов, можно дойти до сколь угодно малого отрезка, содержащего корень ξ.
Так как за каждую итерацию интервал, где расположен корень уменьшается в два раза, то через n итераций интервал будет равен:
bn-an=1/2n(b-a)
В качестве корня ξ. возьмем 1/2(an+bn). Тогда погрешность определения корня будет равна (bn – an)/2. Если выполняется условие:
(bn – an)/2 < ε
то процесс поиска заканчивается и ξ = 1/2(an+bn).
Решение.
Поскольку F(2.6)*F(3)<0, то корень лежит в пределах [2.6;3].
Итерация 1.
Находим середину отрезка: c = (2.6 + 3)/2 = 2.8
F(x) = -0.487
F(c) = -1.628
Поскольку F(c)•F(x) > 0, то a=2.8
Итерация 2.
Находим середину отрезка: c = (2.8 + 3)/2 = 2.9
F(x) = 0.113
F(c) = -0.487
Поскольку F(c)•F(x) < 0, то b=2.9
Итерация 3.
Находим середину отрезка: c = (2.8 + 2.9)/2 = 2.85
F(x) = -0.189
F(c) = 0.113
Поскольку F(c)•F(x) < 0, то b=2.85
Итерация 4.
Находим середину отрезка: c = (2.8 + 2.85)/2 = 2.825
F(x) = -0.339
F(c) = -0.189
Поскольку F(c)•F(x) > 0, то a=2.825
Остальные расчеты сведем в таблицу.

N c a b f(c) f(x)
1 2.6 3 2.8 -1.6275 -0.4867
2 2.8 3 2.9 -0.4867 0.1129
3 2.8 2.9 2.85 0.1129 -0.1893
4 2.8 2.85 2.825 -0.1893 -0.3386
5 2.825 2.85 2.8375 -0.3386 -0.2641
6 2.8375 2.85 2.8438 -0.2641 -0.2267
Ответ: x = 2.8438; F(x) = -0.2267
Решение было получено и оформлено с помощью сервиса Метод Ньютона онлайн

Пример №2. Локализовать корень нелинейного уравнения f(x) = 0 и найти его методом бисекции с точностью ε1 = 0,01. Выбрав полученное решение в качестве начального приближения, найти решение уравнения методом простой итерации  с точностью ε2 = 0,0001. Для метода простой итерации обосновать сходимость и оценить достаточное для достижения заданной точности ε2 число итераций.