Nickolay.info. Алгоритмы. Метод Ньютона решения нелинейного уравнения

В литературе называется также методом касательных.

Рассмотрим графическую иллюстрацию метода (рис. 1). Предположим, что графическим методом определено начальное приближение х0 к корню. В точке х0 вычислим левую часть решаемого уравнения f0 = f(x0), а также производную в этой точке f'(x0) = tg α. Следующее приближение к корню найдем в точке х1, где касательная к функции f(x), проведенная из точки 0, f0), пересекает ось абсцисс. Затем считаем точку х1 в качестве начальной и продолжаем итерационный процесс. Из рис. видно, что таким способом можно приближаться к корню х*. При этом с каждой итерацией расстояние между очередным хk+1 и предыдущим хk приближениями к корню будет уменьшаться. Процесс уточнения корня закончим, когда выполнится условие

lxk + 1- xkl< e,

где е - допустимая погрешность определения корня.

Из геометрических соотношений (рис. 1) получим основную формулу метода Ньютона

x1 = x0 - f(x0)/f'(x0)

В общем виде для к-го шага итерационного процесса последнее соотношение принимает вид

xk+1 = xk - f(xk)/f'(xk)

Метод Ньютона решения нелинейного уравнения

Алгоритм Ньютона можно получить другим способом с помощью разложения в ряд Тейлора левой части уравнения f(x) вблизи корня х*. Пусть xk+1=xk+ s, тогда

f(xk+1)= f(xk)+sf'(xk) + ...,

s ~= -f(xk)/f'(xk),

так как f(xk+1)=> 0 (стремится к нулю).

Метод Ньютона обладает высокой скоростью сходимости. Обычно абсолютная точность решения 10-5 - 10-6 достигается через 5-6 итераций.

Недостатком метода является необходимость вычисления на каждой итерации не только левой части уравнения, но и её производной.

Можно, несколько уменьшив скорость сходимости, ограничиться вычислением производной f'(x) только на первой итерации, а затем вычислять лишь значения f(x), не изменяя производной f'(x). Это алгоритм так называемого модифицированного метода Ньютона (рис. 2).

xk+1 = xk - f(xk)/f'(x0)

Ниже приводится простая консольная программа на Паскале для решения алгебраического уравнения произвольной степени n>1. Функция f(x) и первая производная f'(x) задаются подпрограммами-функциями f и f1 соответственно.

{Метод Ньютона решения нелинейного уравнения}
program Newton;
uses crt; {модуль управления экраном}

function f(x:real):real; {Исходная функция}
begin
 f:=sqr(sqr(x))-5*sqr(x)-x+1;
end;

function f1(x:real):real; {Первая производная функции}
begin
 f1:=4*x*sqr(x)-10*x-1;
end;

var a,b,x,e,en:real;
    i:integer;

begin
 clrscr; {очистить экран}
 writeln ('Решение нелинейного уравнения методом Ньютона');
 writeln ('Уравнение x^4+5x^2-x+1=0');
 write ('Введите левую и правую границы интервала:');
 read (a,b);
 write ('Введите требуемую точность решения:');
 read (e);
 writeln ('Решение:');
 writeln ('Номер шага Значение X');
 en:=abs(a-b);
 x:=b;
 i:=1;
 while (abs(en)>e) do begin {Пока не достигнута точность}
  x:=x-f(x)/f1(x); {выполнить шаг метода}
  writeln (i:10,x:20:14); {вывести значение X с шага}
  en:=abs(x-b); {Новая точность}
  b:=x; {Значение границы для следующего шага}
  i:=i+1; {Номер шага}
 end;
end.

Пример вывода программы:

Решение нелинейного уравнения методом Ньютона
Уравнение x^4+5x^2-x+1=0
Введите левую и правую границы интервала:0 3
Введите требуемую точность решения:0.0001
Решение:
Номер шага Значение X
         1       2.55844155840
         2       2.34660467920
         3       2.29360252760
         4       2.29042173360
         5       2.29041062100

Рейтинг@Mail.ru

вверх гостевая; E-mail