Отделение и уточнение корней нелинейных уравнений - Pascal

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

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

Сделал вроде все правильно. Но программа решения не находит. Или дело в том, что корней на участке просто нет? Уравнение: +5-2x-2=0 Отрезок: [-5;1] Точность:
uses crt;
function f(x:real):real;
begin
f:=(exp(ln(X) * 4)) + (5 * exp(ln(X) * 3))-(2*x)-2;
end;
procedure koren(a,b,eps:real);
var c:real;
begin
repeat
 c:=(f(b)*a-f(a)*b)/(f(b)-f(a));
 if f(a)*f(c) > 0 then a := c
 else b := c;
until abs((f(b)*a-f(a)*b)/(f(b)-f(a))-c)<eps;
writeLn(c:10:7);
end;
var a,b,x1,x2,y1,y2,h,eps:real;
    k:integer;
begin
clrscr;
a:=-5;
b:=1;
h:=0.5;
eps:=0.0001;
repeat
// writeLn('Vvedite tochnost v predelah ot 0 do 1 eps=');
 // readln(eps);
until (eps >0) and (eps <1);
k:=0; x1:=a; x2:=x1+h; y1:=f(x1); y2:=f(x2);
while x2<b do
 begin
  y2:=f(x2);
  if y1*y2<0 then
   begin
    inc (k);
    write(k,'-i корень в интервале [',x1:4:1,';',x2:4:1,']=');
    koren(x1,x2,eps);
   end;
  x1:=x2;
  x2:=x1+h;
  y1:=y2;
 end;
write('Для выхода нажмите Enter');
readln
end.

Решение задачи: «Отделение и уточнение корней нелинейных уравнений»

textual
Листинг программы
uses crt;
function f(x:real):real;
begin
f:=x*x*x*x+5*x*x*x-2*x-2;
end;
procedure koren(a,b,eps:real);
var c:real;
begin
repeat
 c:=(f(b)*a-f(a)*b)/(f(b)-f(a));
 if f(a)*f(c) > 0 then a := c
 else b := c;
until abs((f(b)*a-f(a)*b)/(f(b)-f(a))-c)<eps;
writeLn(c:10:7);
end;
var a,b,x,h,eps:real;
    k:integer;
begin
clrscr;
a:=-5;
b:=1;
h:=0.1;
eps:=0.0001;
k:=0;
x:=a;
while x<b+h do
 begin
  if f(x)*f(x+h)<0 then
   begin
    inc (k);
    write(k,'-i корень в интервале [',x:4:1,';',x+h:4:1,']=');
    koren(x,x+h,eps);
   end;
  x:=x+h;
 end;
write('Для выхода нажмите Enter');
readln
end.

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

  1. В начале кода подключается библиотека crt, которая обеспечивает работу с функциями ввода-вывода в режиме консоли.
  2. Создается функция f(x), которая вычисляет значение нелинейного уравнения xxxx + 5xxx - 2*x - 2.
  3. Создается процедура koren(a, b, eps), которая вычисляет корни нелинейного уравнения путем последовательного деления и проверки условия для каждого корня. Переменные a и b представляют начальные значения корней, а переменная eps задает допустимую погрешность.
  4. Создается переменная a, которая инициализируется значением -5.
  5. Создается переменная b, которая инициализируется значением 1.
  6. Создается переменная h, которая инициализируется значением 0.1.
  7. Создается переменная eps, которая инициализируется значением 0.0001.
  8. Создается переменная k, которая инициализируется значением 0.
  9. Инициализируется цикл while, который выполняется до тех пор, пока значение переменной x меньше значения b плюс h.
  10. Внутри цикла while проверяется условие f(x)*f(x+h)<0. Если это условие истинно, то выполняется блок begin.
  11. Внутри блока begin выводится значение k с префиксом -i, а затем вызывается функция koren(x, x+h, eps).
  12. После завершения блока begin значение переменной x увеличивается на h.
  13. Цикл while повторяется до тех пор, пока значение x не станет больше значения b плюс h.
  14. После завершения цикла while выводится сообщение Для выхода нажмите Enter.
  15. Запускается цикл чтения, который ожидает ввода пользователя до нажатия клавиши Enter.
  16. Введенные данные обрабатываются и сохраняются в переменных a, b, x, h и eps.
  17. Код завершается.

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


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

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

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