Вычисление определенного интеграла с заданной точностью( метод Симпсона) - Pascal ABC

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

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

Проверьте пожалуйста программу на ошибки. 1/xlg(x) a=2 b=3
Листинг программы
  1. Program Simpson4;
  2. function F(x:real):real;
  3. begin
  4. F:=1/(x*(ln(x)/ln(10)));
  5. end;
  6. Procedure Simp(a,b:real;n:integer;var J:real);
  7. Var
  8. h,x,J1,J2:real;
  9. N1,i:integer;
  10. Begin
  11. N1:=n-1;
  12. h:=(b-a)/N1;
  13. J1:=0.0;
  14. i:=1;
  15. while i<=2*N1-1 do
  16. begin
  17. x:=a+i*h/2;
  18. J1:=J1+F(x);
  19. i:=i+2;
  20. end;
  21. J2:=0.0;
  22. i:=2;
  23. while i<=2*N1-2 do
  24. begin
  25. x:=a+i*h/2;
  26. J2:=J2+F(x);
  27. i:=i+2;
  28. end;
  29. J:=h/6*(F(a)+F(b)+4*J1+2*J2);
  30. End;
  31. Var
  32. a,b,J0,J1,J2,eps:real;
  33. n:integer;
  34. Begin
  35. a:=2;
  36. b:=3;
  37. eps:=0.00001;
  38. Writeln(' n?');
  39. readln(n);
  40. J0:=0.0;
  41. Repeat
  42. J1:=J0;
  43. n:=2*n;
  44. Simp(a,b,n,J2);
  45. J0:=J2;
  46. Until abs(J1-J2)<=eps;
  47. writeln('Значение интеграла: J2=', J2:0:5);
  48. End.

Решение задачи: «Вычисление определенного интеграла с заданной точностью( метод Симпсона)»

textual
Листинг программы
  1. {
  2.  Программа для вычисления интеграла
  3.  численным методом Симпсона
  4.  с заданной погрешностью вычислений
  5. }
  6. program Sympson;
  7.  
  8.   function F(x: real): real;
  9.   begin
  10.     F := 1 / (x * (ln(x) / ln(10)));
  11.   end;
  12.  
  13.   function Integr(a, b: real; n: integer): real;
  14.   var
  15.     Res: real;
  16.     h: real; {величина шага}
  17.     x: real;
  18.     i: integer;
  19.   begin
  20.     h := (b - a) / n;
  21.     Res := F(a) + F(b);
  22.     i := 1;
  23.     while i < n do
  24.     begin
  25.       x := a + i * h;
  26.       Res := Res + 4 * F(x);
  27.       Inc(i);
  28.       x := a + i * h;
  29.       Res := Res + 2 * F(x);
  30.       Inc(i);
  31.     end;
  32.     Res := Res * h / 3;
  33.     Integr := Res;
  34.   end;
  35.  
  36. var
  37.   a, b,      {границы интегрирования}
  38.   Eps: real; {погрешность численного интегрирования}
  39.  
  40.   n: integer;{количество подинтервалов интегрирования}
  41.   Icur,      {значение интеграла на текущем шаге итерации}
  42.   Ipre: real;{значение интеграла на предыдущем шаге итерации}
  43.  
  44. begin
  45.   a := 2;
  46.   b := 3;
  47.   Eps := 0.00001;
  48.  
  49.   n := 2;
  50.   Icur := Integr(a, b, n);
  51.   repeat
  52.     Ipre := Icur;
  53.     n := 2 * n;                {увеличиваем количество подинтервалов}
  54.     Icur := Integr(a, b, n);
  55.     WriteLn('I=', Icur: 10: 8, ' при n=', n, ', e=', Abs(Icur - Ipre): 10: 8);
  56.   until Abs(Icur - Ipre) < Eps;
  57.   WriteLn('I=', Icur: 10: 8, ' при n=', n, ', e=', Abs(Icur - Ipre): 10: 8);
  58. end.

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

  1. В функции F(x) вычисляется определенный интеграл с использованием численного метода Симпсона.
  2. В функции Integr(a, b; n) вычисляется определенный интеграл с заданной погрешностью вычислений.
  3. Переменная h используется для определения величины шага.
  4. Переменные x и i используются для итеративного вычисления интеграла.
  5. Переменная Res используется для хранения промежуточных результатов вычислений.
  6. Переменная Eps используется для задания погрешности численного интегрирования.
  7. Переменная n используется для задания количества подинтервалов интегрирования.
  8. Переменные Icur и Ipre используются для хранения значений интеграла на текущем и предыдущем шагах итерации соответственно.
  9. В цикле while повторяются вычисления на текущем и предыдущем шагах итерации, пока разница между ними не будет меньше заданной погрешности.
  10. После достижения заданной точности, значение интеграла записывается в переменную Integr.
  11. В конце программы выводятся результаты вычислений.

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


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

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

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

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

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

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы