Решение нелинейного уравнения - Pascal (80273)
Формулировка задачи:
нужно было решить уравнение методом Ньютона. помогите понять почему так странно работает. на других функциях работает нормально
на отрезке от -2
Листинг программы
- 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π
с точностью 10-6 Решение задачи: «Решение нелинейного уравнения»
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.
Объяснение кода листинга программы
- Объявление функции f(x: real): real; - описывает исходную функцию, которая равна
2 * arctan(x) - 1/(2*x*x*x)
- Объявление функции f1(x: real): real; - описывает первую производную функции, которая равна
2 * (1/(x*x + 1)) + 3/2 * (1/(x*x*x*x))
- Объявление переменных
a, b, x, e, en
- присваивание значения переменнымa
= -2 pi,b
= 2 pi,e
= 0.000001 - Присваивание переменной
en
значенияabs(a - b)
- Присваивание переменной
x
значенияb
- Присваивание переменной
i
значения1
- Пока
abs(en) > e
выполняется следующий блок кода:- Выполнить шаг метода:
x := x - f(x) / f1(x)
- Вывести значение X с шага:
writeln(i,' ', x:0:6)
- Новая точность:
en := abs(x - b)
- Значение границы для следующего шага:
b := x
- Номер шага:
i := i + 1
- Выполнить шаг метода:
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д