Уравнение f (x)=0 представляем в виде x = j (x). Выбираем на отрезке [ a,b ] произвольную точку x 0 в качестве начального приближения и строим последовательность: x 1= j (x 0), x 2= j (x 1),. .., xn = j (xn -1). Процесс последовательного вычисления чисел xn (n =1,2,3,...) называется методом итераций.
Если на отрезке [ a,b ] выполнено условие |j' (x) |≤q< 1, то процесс итераций сходится, т.е. увеличивая n, можно получить приближение, сколь угодно мало отличающееся от истинного значения корня уравнения.
Процесс итераций продолжается до тех пор, пока не будет выполнено условие |xn-xn -1 |£ e, где e — заданная точность вычислений. Если q≤0.5, то для прекращения процесса итераций можно пользоваться более простым соотношением |xn-xn -1 |£e.
Геометрическая интерпретация метода итераций:
Пример: Методом итераций найти корень уравнения f(x)= arcsin(2 x+ 1) -x 2 =0 расположенный на отрезке [-0.5,0] c точностью ε =10-4.
Уравнение преобразуем к виду y=j(x) следующим образом:
arcsin(2 x +1) =x 2, sin(arcsin(2 x +1)) = sin(x 2), 2 x +1 = sin(x 2), x =0.5(sin(x 2)-1).
Значит j (x)= 0.5(sin(x 2)-1), j’ (x)= x cos(x2), | j’ (x) |=|x cos(x 2)|≤0.5 для x Î[ -0.5,0 ]. Метод итераций сходится.
|
|
Замечание: на каждом этапе необходимо помнить лишь два соседних приближения, поэтому приближение xn обозначим через x, а приближение xn +1через y.
Program Iter; {метод итераций}
Uses Crt;
Const eps=0.0001;
Var
fx,x,y,delta:Real;
n:Integer;
Function Fi(z:Real):Real;
Begin
Fi:=0.5*(sin(z*z)-1)
End;
Function F(z:Real):Real;
Begin
F:=2*z+1-sin(z*z);
End;
Begin
Clrscr;
Write ('Введите начальное приближение x=');
ReadLn (x);
n:=0;
Repeat
y:=Fi(x);
delta:=abs(y-x);
n:=n+1;
x:=y;
Until delta<eps;
WriteLn('Корень уравнения x=',x:8:4);
WriteLn('Проверка f(',x:8:4,')=',f(x):8:5);
WriteLn('Количество итераций n=',n);
Repeat Until KeyPressed;
End.