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

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

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

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

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

textual
Листинг программы
program AnyInt;
 
type
  TMethodFunc = function(a, b: real; n: integer): real;
 
  {интегрируемая функция}
  function F(x: real): real;
  begin
    F := 1 / (1 + sin(x) + cos(x));
    ;
  end;
 
  function tg(x: real): real;
  begin
    tg := sin(x) / cos(x);
  end;
 
  {первообразная интегрируемой функции}
  function AntiderivativeF(x: real): real;
  begin
    AntiderivativeF := ln(abs(1 + tg(x / 2)));
  end;
 
  function IntSympson(a, b: real; n: integer): real;
  var
    Res: real;
    h: real; {величина шага}
    x: real;
    i: integer;
  begin
    h := (b - a) / n;
    Res := F(a) + F(b);
    i := 1;
    while i < n do
    begin
      x := a + i * h;
      Res := Res + 4 * F(x);
      Inc(i);
      x := a + i * h;
      Res := Res + 2 * F(x);
      Inc(i);
    end;
    Res := Res * h / 3;
    IntSympson := Res;
  end;
 
  function IntSquareR(a, b: real; n: integer): real;
  var
    Res: real;
    h: real; {величина шага}
    x: real;
    i: integer;
  begin
    h := (b - a) / n;
    Res := 0;
    i := 1;
    while i <= n do
    begin
      x := a + i * h;
      Res := Res + F(x);
      Inc(i);
    end;
    Res := h * Res;
    IntSquareR := Res;
  end;
 
  function IntTrapec(a, b: real; n: integer): real;
  var
    Res: real;
    h: real; {величина шага}
    x: real;
    i: integer;
  begin
    h := (b - a) / n;
    Res := (F(a) + F(b)) / 2;
    i := 1;
    while i < n do
    begin
      x := a + i * h;
      Res := Res + F(x);
      Inc(i);
    end;
    Res := h * Res;
    IntTrapec := Res;
  end;
 
  function Integral(a, b, Eps: real; IntMethod: TMethodFunc): real;
  var
    n: integer;   {количество подинтервалов интегрирования}
    Icur,         {значение интеграла на текущем шаге итерации}
    Ipre: real;   {значение интеграла на предыдущем шаге итерации}
  begin
    n := 2;
    Icur := IntMethod(a, b, n);
    repeat
      Ipre := Icur;
      n := 2 * n;                {увеличиваем количество подинтервалов}
      Icur := IntMethod(a, b, n);
    until Abs(Icur - Ipre) < Eps;
    Integral := Icur;
  end;
 
 
var
  a, b,        {границы интегрирования}
  Eps: real;   {погрешность численного интегрирования}
begin
  a := 0;
  b := Pi / 2;
 
  WriteLn('   Etalon     Eps     Sympson  R Squaries  Trapec');
  Eps := 0.001;
  Write(AntiderivativeF(b) - AntiderivativeF(a): 10: 6);
  Write(Eps: 10: 6);
  Write(Integral(a, b, Eps, @IntSympson): 10: 6);
  Write(Integral(a, b, Eps, @IntSquareR): 10: 6);
  Write(Integral(a, b, Eps, @IntTrapec): 10: 6);
  WriteLn;
 
  Eps := 0.0001;
  Write(AntiderivativeF(b) - AntiderivativeF(a): 10: 6);
  Write(Eps: 10: 6);
  Write(Integral(a, b, Eps, @IntSympson): 10: 6);
  Write(Integral(a, b, Eps, @IntSquareR): 10: 6);
  Write(Integral(a, b, Eps, @IntTrapec): 10: 6);
  WriteLn;
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
Похожие ответы