Решение нелинейного уравнения методом половинного деления - Pascal ABC

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

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

Задание следующее: "вычислить первый положительный корень уравнения F(x)=0 с заданной погрешностью e (e=10^(-3)/10^(-6)) на интервале [c;d]." У меня F(x)=sin(x)+x-1, интервал [0;8]. Как было сказано в заголовке, данное уравнение я решал методом половинного деления:
Программа то работает, вот только мне приходится вбивать +100500 значений "е" (и это я говорю на полном серьезе). Почему так происходит, я понятия не имею. Заранее спасибо.

Решение задачи: «Решение нелинейного уравнения методом половинного деления»

textual
Листинг программы
const xn=0;
      xk=8;
function f(x:real):real;
begin
f:=sin(x)+x-1;
end;
var e,x,h,a,b,c:real;
    k:byte;
begin
repeat
write('0.000001<e<0.001 e=');
readln(e);
until(e>0.000001)and(e<0.001);
//ищем интервал
x:=xn;
h:=0.1;
k:=0;
while(x<xk)and(k=0) do
if f(x)*f(x+h)<0 then k:=1
else x:=x+h;
if k=0 then writeln('Корней в интервале [0;8] нет')
else  //если нашли, уточняем корень
 begin
  a:=x;
  b:=x+h;
  repeat
   c:=(a+b)/2;
   if F(x)*F(c)<=0 then b:=c
   else a:=c;
  until abs(b-a)<e;
  x:=(a+b)/2;
  writeln('Первый положительный корень=',x:0:6);
 end;
end.

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

  1. const xn=0;
  2. const xk=8;
  3. function f(x:real):real;
  4. begin
  5. f:=sin(x)+x-1;
  6. end;
  7. var e,x,h,a,b,c:real;
  8. k:byte;
  9. begin
  10. repeat
  11. write('0.000001<e<0.001 e=');
  12. readln(e);
  13. until(e>0.000001)and(e<0.001);
  14. //ищем интервал
  15. x:=xn;
  16. h:=0.1;
  17. k:=0;
  18. while(x<xk)and(k=0) do
  19. if f(x)*f(x+h)<0 then k:=1
  20. else x:=x+h;
  21. if k=0 then writeln('Корней в интервале [0;8] нет')
  22. else
  23. //если нашли, уточняем корень
  24. a:=x;
  25. b:=x+h;
  26. repeat
  27. c:=(a+b)/2;
  28. if F(x)*F(c)<=0 then b:=c
  29. else a:=c;
  30. until abs(b-a)<e;
  31. x:=(a+b)/2;
  32. writeln('Первый положительный корень=',x:0:6);
  33. end;
  34. end.

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


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

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

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