Этот метод является модификацией метода Ньютона в плане его реализации, т. е. задача поиска корня связана лишь с вычислением значения функции f(x). Заменив производную f '(xn) в методе Ньютона так называемой разделенной разностью по двум точкам xn и xn + hn, где hn – некоторый малый параметр, получим итерационную формулу
, n = 0, 1, 2, …, (3.9)
которая называется методом секущих.
Приближение xn+1 является абсциссой точки пересечения секущей прямой, проведенной через точки (xn, f(xn)) и (xn+ hn , f(xn + hn)) с осью х (рис. 3.6).
Имеются другие интерпретации формулы (3.9). В частности, метод Вегстейна,в котором для выбора параметра h используют предыдущую расчетную точку, т. е. берут hn= xn–1 – xn, тогда (3.9) имеет вид
, n = 0, 1, 2, … . (3.10)
Рис. 3.6
Метод Вегстейна, очевидно, двухшаговый (m = 2), т. е. для вычисления требуется задать две начальные точки приближения, лучше всего x0 = а; x1 = b. Данный метод медленнее метода секущих, однако требует в два раза меньше вычислений f(x) и поэтому оказывается более эффективным.
Целесообразным является использовать подходы к уточнению корня, не выпускающие корень из выделенной «вилки» (отрезка [a, b]).
Так, если f(b)×f "(x) > 0 для x Î [a, b], берут в качестве x0 = a, и уточнение корня производится по формуле
, n = 0, 1, 2, …, (3.11)
а если f(a)×f "(x) > 0 для x Î [a, b], берут в качестве x0 = b, и уточнение корня производится по формуле
, n = 0, 1, 2, … . (3.12)
Все вышеизложенные методы могут работать, если функция f(x) из (3.1) является непрерывной и дифференцируемой вблизи искомого корня, в противном случае решение не гарантируется. Данный метод может быть использован даже для разрывных функций.
Его алгоритм реализовывается согласно следующей рекуррентной последовательности: для x*Î [a, b]; x0 = a; x1 = b, находится x2 = (a + b) / 2.
Очередная точка x3 выбирается, как середина того из смежных с x2 интервалов [x0, x2] или [x2, x1], на котором находится корень. В результате получается следующий алгоритм метода деления отрезка пополам:
1) вычисляем y0 = f(x0);
2) вычисляем x2 = (x0 + x1) / 2, y2 = f(x2);
3) если y0 × y2 > 0, то x0 = x2, иначе x1 = x2; (3.13)
4) если x1 - x0 > e, то повторяем с п. 1;
5) вычисляем x* = (x0 + x1) / 2.
За одно вычисление функции погрешность уменьшается вдвое, т. е. скорость сходимости невелика, однако метод устойчив к ошибкам округления и всегда сходится.
Немного подкорректировав, алгоритм (3.13) более наглядно можно представить в виде блок-схемы (рис. 3.7).