По итерациям что то вроде того:
Код:
program Iteraz;
uses graph,crt;
var
a,b,x1,x,f1,f2,e:real;
i,n:integer;
function ArcSin ( X : Real ): Real;
begin
if X = 1.0 then { чтобы не было деления на 0 }
ArcSin := Pi / 2.0
else
ArcSin := ArcTan ( X / Sqrt ( 1 - X * X ) );
end;
function f(tmpX:real):real;
begin
f:=sqrt(1*tmpX*tmpX)-ArcSin(tmpX);
end;
begin
a:=0;
b:=0.99;
x1:=a;
f1:=f(x1);
e:=0.001;
n:=round((b-a)/e);
writeln('Metod iterazii');
for i:=1 to n do begin
x:=x1+(b-a)/n;
f2:=f(x);
if f1*f2<=0 then begin
writeln('Done. X = ',(X+x1)/2:6:4);
writeln('Kolichectvo iterazii = ',i);
end;
x1:=x;f1:=f2;
end;
readkey;
end.
Метод итераций.
При решении нелинейного уравнения методом итераций воспользуемся записью уравнения в виде x=f(x). Задаются начальное значение аргумента x0 и точность e. Первое приближение решения x1 находим из выражения x1=f(x0), второе - x2=f(x1) и т.д. В общем случае i+1 приближение найдем по формуле xi+1 =f(xi). Указанную процедуру повторяем пока |f(xi)-xi| >eУсловие сходимости метода итераций |f'(x)<1| . Структограмма метода итераций:
Не знаю корректно ли работает программа, но я в свое время её сдал ;D
Если подставить в качестве верхнего предела 1, то будет переполнение.
По сути все верно, так как если изменить интервал, то программа вообще не найдет решения.
Другой вариант:
Код:
program ITERAT;
uses crt;
const max_iter=100; {максимальное количество итераций}
var
i :integer;
x,x0,eps,M:real;
function ArcSin ( X : Real ): Real;
begin
if X = 1.0 then { чтобы не было деления на 0 }
ArcSin := Pi / 2.0
else
ArcSin := ArcTan ( X / Sqrt ( 1 - X * X ) );
end;
function F(tmpX:real):real; {функция}
begin
f:=sqrt(1*tmpX*tmpX)-ArcSin(tmpX);
end;
begin {основная программа}
clrscr;
x:=0;
x0:=0.99;
eps:=0.001;
i:=0;
repeat
M:=-(F(x+eps)-F(x-eps))/(2*eps); {коэффициент для улучшения сходимости}
x0:=x;
x:=x0+F(x0)/M; {сердце метода итераций}
inc(i);
until (abs(x-x0)<=eps)or(i>max_iter);
if (abs(x-x0)<=eps) then writeln('Otvet: X= ',x:6:4,' naiden za ',i,' shagov')
else writeln('Otvet ne naiden! Za ',max_iter:0,' shagov.');
readkey;
end.
Программа взята
отсюда и немного подредактирована.