Вычисление определённого интеграла с заданной точностью - 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.
Объяснение кода листинга программы
- Объявляется переменная TMethodFunc как функция, принимающая параметры a, b, n и возвращающая значение типа real.
- Описывается функция F, принимающая параметр x типа real и возвращающая значение типа real. Возвращаемое значение функции - 1 / (1 + sin(x) + cos(x)).
- Описывается функция tg, принимающая параметр x типа real и возвращающая значение типа real. Возвращаемое значение функции - sin(x) / cos(x).
- Описывается функция AntiderivativeF, принимающая параметр x типа real и возвращающая значение типа real. Возвращаемое значение функции - ln(abs(1 + tg(x / 2))).
- Описывается функция IntSympson, принимающая параметры a, b типа real и n типа integer, возвращающая значение типа real.
- Описывается функция IntSquareR, принимающая параметры a, b типа real и n типа integer, возвращающая значение типа real.
- Описывается функция IntTrapec, принимающая параметры a, b типа real и n типа integer, возвращающая значение типа real.
- Описывается функция Integral, принимающая параметры a, b, Eps типа real и IntMethod типа TMethodFunc, возвращающая значение типа real.
- Объявляются переменные a, b, Eps типа real, затем выполняется последовательность вычислений и вывода результатов на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д