Реализация метода Ньютона - Pascal ABC

Формулировка задачи:

Добрый вечер друзья. Пролистал кучу топиков на форуме и примеров программ связанных с реализацией метода ньютона. Переделал одну из программ под свою задачку. Условие задачки: (x-3)*cosx=1 , -2pi<=x<=2pi . Проблема в том, что она выдает непонятное значение, а мои знания математике не велики, подскажите в чем моя ошибка, заранее спасибо . Код программы:
uses crt;
function f1(x:real):real; {Основная функция}
begin
f1:=((x-3)*cos(x))-1;
end;
function f2(x:real):real; {Производная от основной функции}
begin
f2:=cos(x)-((x-3)*(sin(x)));
end;
var x,a,b,e:real;
begin
clrscr;
 
a:=-6.28318530718;     {интервал }
b:=6.28318530718;
e:=0.001;
if f1(a)*f2(a)>0 then x:=a
else x:=b;
while abs(f1(x))>e do
x:=x-f1(x)/f2(x);
write('В интервале от ',a:0:5,' до ',b:0:5,' с погрешностью e=0.01 x=',x:0:6);
readln
end.

Код к задаче: «Реализация метода Ньютона - Pascal ABC»

textual
uses crt;
function f1(x: real): real;
begin
f1:=(((x-3)*cos(x))-1);
end;
function f2(x:real): real;
begin
f2:=cos(x)-(x-3)*sin(x);
end;
function Newton(a,b,e:real):real;
var x:real;
begin
if f1(a)*f2(a)>0 then x:=a
else x:=b;
while abs(f1(x))>e do
   begin
     x:=x-f1(x)/f2(x);
   end;
Newton:=x;
end;
 
var x,x1,x2,dx,x11,x12,eps:real;
    i:integer;
begin
clrscr;
x1:=-2*pi; {весь интервал для поиска корней}
x2:=2*pi;
dx:=0.1;{шаг движения по интервалу}
eps:=0.001; {точность вычислкения корня}
x:=x1;
i:=0;
while x<=x2 do {движемся слева направо}
 begin
  x11:=x;
  x12:=x+dx;
  if F1(x11)*F1(x12)<0 then{если знаки функции на концах малого интервала разные}
   begin
    i:=i+1; {есть корень}
    writeln('X',i,'=',Newton(x11,x12,eps):8:5);{уточняем его}
   end;
  x:=x+dx;{к новому интервалу размером 0.1}
 end;
readln
end.
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

7   голосов, оценка 3.714 из 5


СДЕЛАЙТЕ РЕПОСТ