Решение нелинейного уравнения - 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
- Выполнить шаг метода:
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д