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

Узнай цену своей работы

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

Добрый вечер друзья. Пролистал кучу топиков на форуме и примеров программ связанных с реализацией метода ньютона. Переделал одну из программ под свою задачку. Условие задачки: (x-3)*cosx=1 , -2pi<=x<=2pi . Проблема в том, что она выдает непонятное значение, а мои знания математике не велики, подскажите в чем моя ошибка, заранее спасибо . Код программы:

Решение задачи: «Реализация метода Ньютона»

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.

Объяснение кода листинга программы

  1. Создается функция f1(x), которая вычисляет значение выражения ((x-3)*cos(x))-1.
  2. Создается функция f2(x), которая вычисляет значение выражения cos(x)-(x-3)*sin(x).
  3. Создается функция Newton(a,b,e), которая реализует метод Ньютона для нахождения корня уравнения f1(x)*f2(x)=0.
  4. Определяются переменные a, b, e, x, dx, eps, i, x1, x2.
  5. Задается начальное значение x1 для поиска корней.
  6. Задается шаг движения по интервалу dx.
  7. Задается точность вычислизации корня eps.
  8. Инициализируется переменная x значением x1.
  9. Задается начальное значение i=0.
  10. Запускается цикл while, который выполняется до тех пор, пока x не станет больше или равно x2.
  11. Внутри цикла вычисляются значения x11 и x12, которые являются соседними точками на интервале [x1,x2].
  12. Проверяется условие F1(x11)*F1(x12)<0. Если оно выполняется, то это означает, что на концах интервала знаки функции разные, и в этом случае увеличивается значение i.
  13. После проверки условия происходит переход к новой паре соседних точек x11,x12.
  14. Значение x увеличивается на шаг dx.
  15. Если условие F1(x11)*F1(x12)<0 выполняется снова, то увеличивается значение i.
  16. Цикл while повторяется до тех пор, пока значение i не достигнет значения 20.
  17. В конце программы выводится сообщение с уточнением найденного корня.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы