Реализация метода Ньютона - 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.
Объяснение кода листинга программы
- Создается функция f1(x), которая вычисляет значение выражения ((x-3)*cos(x))-1.
- Создается функция f2(x), которая вычисляет значение выражения cos(x)-(x-3)*sin(x).
- Создается функция Newton(a,b,e), которая реализует метод Ньютона для нахождения корня уравнения f1(x)*f2(x)=0.
- Определяются переменные a, b, e, x, dx, eps, i, x1, x2.
- Задается начальное значение x1 для поиска корней.
- Задается шаг движения по интервалу dx.
- Задается точность вычислизации корня eps.
- Инициализируется переменная x значением x1.
- Задается начальное значение i=0.
- Запускается цикл while, который выполняется до тех пор, пока x не станет больше или равно x2.
- Внутри цикла вычисляются значения x11 и x12, которые являются соседними точками на интервале [x1,x2].
- Проверяется условие F1(x11)*F1(x12)<0. Если оно выполняется, то это означает, что на концах интервала знаки функции разные, и в этом случае увеличивается значение i.
- После проверки условия происходит переход к новой паре соседних точек x11,x12.
- Значение x увеличивается на шаг dx.
- Если условие F1(x11)*F1(x12)<0 выполняется снова, то увеличивается значение i.
- Цикл while повторяется до тех пор, пока значение i не достигнет значения 20.
- В конце программы выводится сообщение с уточнением найденного корня.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д