Здравствуйте. Помогите, пожалуйста разобраться с программой. Дано уравнение f(x)=1+sin(x)-1.14*exp(-x). Найти наименьший корень уравнения с точностью е=0.00005, используя методы половинного деления, ньютона и простой итерации. В принципе, я проги написала. Работают. Заминка только в конце: нужно вывести х0, х1, х2,...,хn для каждого метода. То есть вывести эти приближенные корни, которая прога считает в процессе и мне выдает окончательный результат. Как их вывести? подскажите, пожалуйста. Очень сильно нужно.
Метод половинного деления:
Код:
uses Crt;
function f(x:real):real;
begin
f:=1+sin(x)-1.14*exp(-x);
end;
var x,eps,a,b,c,d:real;
begin
clrScr;
writeln('vvedite a b');
readln(a,b);
writeLn('vvedite tochnost eps');
readln(eps);
repeat
c:=(a+b)/2;
if(f(a)*f(c))<0 then b:=c
else a:=c;
until (b-a)<=eps;
x:=(a+b)/2;
d:=(b-a)/2;
writeLn('koren x=',x:0:7, ' d=' ,d:0:7);
readln
end.
Метод Ньютона:
Код:
uses crt;
function F(x:real):real;
begin
F:=1+sin(x)-1.14*exp(-x);
end;
function F1(x:real):real;
begin
F1:=cos(x)+1.14*exp(-x);
end;
function Newton(x1,e:real):real;
var x2,b:real;
begin
x2:=x1;
repeat
b:=x2;
x2:=b-F(b)/F1(b);
until abs(x2-b)>e;
Newton:=x2;
end;
var a,eps:real;
begin
clrscr;
write('Введите начальное приближение a=');
readln(a);
write('Введите точность eps=');
readln(eps);
write('X=',Newton(a,eps):0:5);
readln
end.
Метод простой итерации:
Код:
var a,e,fa,fas,xa,xp,l,fx,fxp:real;
n:integer;
function FunX(b:real):real;
begin
fx:=1+sin(b)-1.14*exp(-b);
fxp:=cos(b)+1.14*exp(-b);
end;
begin
write ('vvedite tochnost_');
readln (e);
write ('vvedite nachalnoe priblizenie x0_');
readln (xp);
n:=0;
repeat
xa:=xp;
fx:=1+sin(xa)-1.14*exp(-xa);
fxp:=cos(xa)+1.14*exp(-xa);
l:=(-1)/(fxp+1);
xp:=xa+l*fx;
n:=n+1;
until abs(xp-xa)<e;
writeln ('otvet: x=', xp:9:4);
writeln ('kol-vo provedennix vichislenii=',n);
readln;
end.