Вычисление определённого интеграла с заданной точностью - Pascal

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

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

Задали вычислить определённый интеграл с заданной точностью f = 1/(1+sin(x)+cos(x)) F (первообразная) = ln|1+tg(x/2)| E1 (точность) = 0.001 E2 = 0.0001 n (число разбиений) - не задано Нужно решить методом прямоугольников, трапеций и Cимпсона Помогите пожалуйста!

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

textual
Листинг программы
  1. program AnyInt;
  2.  
  3. type
  4.   TMethodFunc = function(a, b: real; n: integer): real;
  5.  
  6.   {интегрируемая функция}
  7.   function F(x: real): real;
  8.   begin
  9.     F := 1 / (1 + sin(x) + cos(x));
  10.     ;
  11.   end;
  12.  
  13.   function tg(x: real): real;
  14.   begin
  15.     tg := sin(x) / cos(x);
  16.   end;
  17.  
  18.   {первообразная интегрируемой функции}
  19.   function AntiderivativeF(x: real): real;
  20.   begin
  21.     AntiderivativeF := ln(abs(1 + tg(x / 2)));
  22.   end;
  23.  
  24.   function IntSympson(a, b: real; n: integer): real;
  25.   var
  26.     Res: real;
  27.     h: real; {величина шага}
  28.     x: real;
  29.     i: integer;
  30.   begin
  31.     h := (b - a) / n;
  32.     Res := F(a) + F(b);
  33.     i := 1;
  34.     while i < n do
  35.     begin
  36.       x := a + i * h;
  37.       Res := Res + 4 * F(x);
  38.       Inc(i);
  39.       x := a + i * h;
  40.       Res := Res + 2 * F(x);
  41.       Inc(i);
  42.     end;
  43.     Res := Res * h / 3;
  44.     IntSympson := Res;
  45.   end;
  46.  
  47.   function IntSquareR(a, b: real; n: integer): real;
  48.   var
  49.     Res: real;
  50.     h: real; {величина шага}
  51.     x: real;
  52.     i: integer;
  53.   begin
  54.     h := (b - a) / n;
  55.     Res := 0;
  56.     i := 1;
  57.     while i <= n do
  58.     begin
  59.       x := a + i * h;
  60.       Res := Res + F(x);
  61.       Inc(i);
  62.     end;
  63.     Res := h * Res;
  64.     IntSquareR := Res;
  65.   end;
  66.  
  67.   function IntTrapec(a, b: real; n: integer): real;
  68.   var
  69.     Res: real;
  70.     h: real; {величина шага}
  71.     x: real;
  72.     i: integer;
  73.   begin
  74.     h := (b - a) / n;
  75.     Res := (F(a) + F(b)) / 2;
  76.     i := 1;
  77.     while i < n do
  78.     begin
  79.       x := a + i * h;
  80.       Res := Res + F(x);
  81.       Inc(i);
  82.     end;
  83.     Res := h * Res;
  84.     IntTrapec := Res;
  85.   end;
  86.  
  87.   function Integral(a, b, Eps: real; IntMethod: TMethodFunc): real;
  88.   var
  89.     n: integer;   {количество подинтервалов интегрирования}
  90.     Icur,         {значение интеграла на текущем шаге итерации}
  91.     Ipre: real;   {значение интеграла на предыдущем шаге итерации}
  92.   begin
  93.     n := 2;
  94.     Icur := IntMethod(a, b, n);
  95.     repeat
  96.       Ipre := Icur;
  97.       n := 2 * n;                {увеличиваем количество подинтервалов}
  98.       Icur := IntMethod(a, b, n);
  99.     until Abs(Icur - Ipre) < Eps;
  100.     Integral := Icur;
  101.   end;
  102.  
  103.  
  104. var
  105.   a, b,        {границы интегрирования}
  106.   Eps: real;   {погрешность численного интегрирования}
  107. begin
  108.   a := 0;
  109.   b := Pi / 2;
  110.  
  111.   WriteLn('   Etalon     Eps     Sympson  R Squaries  Trapec');
  112.   Eps := 0.001;
  113.   Write(AntiderivativeF(b) - AntiderivativeF(a): 10: 6);
  114.   Write(Eps: 10: 6);
  115.   Write(Integral(a, b, Eps, @IntSympson): 10: 6);
  116.   Write(Integral(a, b, Eps, @IntSquareR): 10: 6);
  117.   Write(Integral(a, b, Eps, @IntTrapec): 10: 6);
  118.   WriteLn;
  119.  
  120.   Eps := 0.0001;
  121.   Write(AntiderivativeF(b) - AntiderivativeF(a): 10: 6);
  122.   Write(Eps: 10: 6);
  123.   Write(Integral(a, b, Eps, @IntSympson): 10: 6);
  124.   Write(Integral(a, b, Eps, @IntSquareR): 10: 6);
  125.   Write(Integral(a, b, Eps, @IntTrapec): 10: 6);
  126.   WriteLn;
  127. end.

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

  1. Объявляется переменная TMethodFunc как функция, принимающая параметры a, b, n и возвращающая значение типа real.
  2. Описывается функция F, принимающая параметр x типа real и возвращающая значение типа real. Возвращаемое значение функции - 1 / (1 + sin(x) + cos(x)).
  3. Описывается функция tg, принимающая параметр x типа real и возвращающая значение типа real. Возвращаемое значение функции - sin(x) / cos(x).
  4. Описывается функция AntiderivativeF, принимающая параметр x типа real и возвращающая значение типа real. Возвращаемое значение функции - ln(abs(1 + tg(x / 2))).
  5. Описывается функция IntSympson, принимающая параметры a, b типа real и n типа integer, возвращающая значение типа real.
  6. Описывается функция IntSquareR, принимающая параметры a, b типа real и n типа integer, возвращающая значение типа real.
  7. Описывается функция IntTrapec, принимающая параметры a, b типа real и n типа integer, возвращающая значение типа real.
  8. Описывается функция Integral, принимающая параметры a, b, Eps типа real и IntMethod типа TMethodFunc, возвращающая значение типа real.
  9. Объявляются переменные a, b, Eps типа real, затем выполняется последовательность вычислений и вывода результатов на экран.

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


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

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

6   голосов , оценка 4 из 5

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

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

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