Вычисление определённого интеграла с заданной точностью - 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, затем выполняется последовательность вычислений и вывода результатов на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д