Решение нелинейного уравнения - Pascal (80273)

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

нужно было решить уравнение методом Ньютона. помогите понять почему так странно работает. на других функциях работает нормально
function f1(x: real): real;//исходная функция
begin
    f1 := 2 * arctan(x) - 1 / (2 * x * x * x);
end;
 
function f2(x: real): real;//производная
begin
    f2 := 3 / (2 * x * x * x * x) + 2 / (x * x + 1);
end;
 
var
    a, b, x, e, en: real;
    i: integer;
 
begin   
    a := -2 * pi;
    b := 2 * pi;
    e := 0.000001;
    
    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);
        writeln(x:0:2);
    end;
    writeln(x:0:2);
end.
на отрезке от -2π до 2π с точностью 10-6

Код к задаче: «Решение нелинейного уравнения - Pascal (80273)»

textual
program Newton;
 
function f(x: real): real;{Исходная функция}
begin
    f := 2 * arctan(x) - 1/(2*x*x*x);  
end;
 
function f1(x: real): real;{Первая производная функции}
begin
    f1 := 2 * (1/(x*x + 1)) + 3/2 * (1/(x*x*x*x));  
end;
 
var
    a, b, x, e, en: real;
    i: integer;
 
begin
    a := -2 * pi;
    b := 2 * pi;
    e := 0.000001;
    
    en := abs(a - b);
    x := b;
    i := 1;
    while (abs(en) > e) do 
    begin{Пока не достигнута точность}
        x := x - f(x) / f1(x); {выполнить шаг метода}
        writeln(i,' ', x:0:6); {вывести значение X с шага}
        en := abs(x - b); {Новая точность}
        b := x; {Значение границы для следующего шага}
        i := i + 1; {Номер шага}
    end;
end.

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

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


СОХРАНИТЬ ССЫЛКУ