Написать программу для вычисления значения интеграла - Pascal ABC
Формулировка задачи:
Вычислить на ЭВМ значение интеграла методом прямоугольников с автоматическим выбором шага интегрирования на заданном интервале [a;b] с заданной точностью .
функция:
интервал:[1;2]
заданная точность:0,00001
Решение задачи: «Написать программу для вычисления значения интеграла»
textual
Листинг программы
const a = 1;
b = 2;
e = 1e-5;
function f(x: real): real;
begin
x := ln(x) / x;
f := x * x * x;
end;
function integ(k: longint): real;
var h, x, sum: real;
i: integer;
begin
sum := 0;
h := (b - a) / k;
x := a + h / 2;
for i := 1 to k do
begin
sum := sum + f(x);
x := x + h
end;
integ := sum * h
end;
var s, s2: real;
n: longint;
begin
n := 1;
s := integ(n);
repeat
s2 := s;
n := n * 2;
s := integ(n)
until abs(s2 - s) < e;
writeln('Приближённое значение = ', s:0:abs(trunc(ln(e) / ln(10))));
writeln(' Точность = ', e:0:abs(trunc(ln(e) / ln(10))));
writeln(' Количество разбиений = ', n);
writeln(' Точное значение = ', (9 - 4 * sqr(ln(2)) * ln(2) - 6 * sqr(ln(2)) - ln(64)) / 32:0:17)
end.
Объяснение кода листинга программы
- Переменная
aиbзадаются начальными значениями 1 и 2 соответственно. - Функция
f(x: real)вычисляет значение функцииx^3в точкеx. - Функция
integ(k: longint)вычисляет значение интеграла отaдоbс помощью метода разбиения на отрезки. - Переменные
h,xиsumинициализируются значениями(b-a)/k,a+h/2и0соответственно. - Цикл
forвыполняетсяkраз, на каждой итерации увеличивая значениеxнаh/2. - Внутри цикла функция
f(x)вызывается для вычисления значения функцииx^3в текущей точкеx. - Значение
sumувеличивается на результат функцииf(x). - После завершения цикла значение
sumвозвращается как результат функцииinteg(k). - Переменные
sиs2инициализируются начальными значениямиinteg(n)иs2=sсоответственно. - Цикл
repeatвыполняется до тех пор, пока разница междуs2иsменьше заданной точностиe. - Выводится приближенное значение
sи его точностьe. - Выводится количество разбиений
n. - Вычисляется точное значение
sс использованием формулы(9-4*sqrt(log(2))*sqrt(log(2))-6*sqrt(log(2))-log(64))/32. - Программа завершается.