Вычисление определенного интеграла с заданной точностью( метод Симпсона) - Pascal ABC
Формулировка задачи:
Проверьте пожалуйста программу на ошибки. 1/xlg(x) a=2 b=3
Решение задачи: «Вычисление определенного интеграла с заданной точностью( метод Симпсона)»
textual
Листинг программы
{
Программа для вычисления интеграла
численным методом Симпсона
с заданной погрешностью вычислений
}
program Sympson;
function F(x: real): real;
begin
F := 1 / (x * (ln(x) / ln(10)));
end;
function Integr(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;
Integr := Res;
end;
var
a, b, {границы интегрирования}
Eps: real; {погрешность численного интегрирования}
n: integer;{количество подинтервалов интегрирования}
Icur, {значение интеграла на текущем шаге итерации}
Ipre: real;{значение интеграла на предыдущем шаге итерации}
begin
a := 2;
b := 3;
Eps := 0.00001;
n := 2;
Icur := Integr(a, b, n);
repeat
Ipre := Icur;
n := 2 * n; {увеличиваем количество подинтервалов}
Icur := Integr(a, b, n);
WriteLn('I=', Icur: 10: 8, ' при n=', n, ', e=', Abs(Icur - Ipre): 10: 8);
until Abs(Icur - Ipre) < Eps;
WriteLn('I=', Icur: 10: 8, ' при n=', n, ', e=', Abs(Icur - Ipre): 10: 8);
end.
Объяснение кода листинга программы
- В функции F(x) вычисляется определенный интеграл с использованием численного метода Симпсона.
- В функции Integr(a, b; n) вычисляется определенный интеграл с заданной погрешностью вычислений.
- Переменная h используется для определения величины шага.
- Переменные x и i используются для итеративного вычисления интеграла.
- Переменная Res используется для хранения промежуточных результатов вычислений.
- Переменная Eps используется для задания погрешности численного интегрирования.
- Переменная n используется для задания количества подинтервалов интегрирования.
- Переменные Icur и Ipre используются для хранения значений интеграла на текущем и предыдущем шагах итерации соответственно.
- В цикле while повторяются вычисления на текущем и предыдущем шагах итерации, пока разница между ними не будет меньше заданной погрешности.
- После достижения заданной точности, значение интеграла записывается в переменную Integr.
- В конце программы выводятся результаты вычислений.