Помощь - Поиск - Пользователи - Календарь
Полная версия: Интеграл
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Мюллер С.Х.
Вычислить определённый интеграл методами средних прямоугольников и трапеции.
Обязательно функция должна вводиться не в исходнике, а в проге(exe)нике.

Пожалуста выручите.
Ivs
Вот что удалось отискать в краткой теоретической справке по этому вопросу:
"Метод прямоугольников основан на интерполяции функции на малом отрезке постоянным значением.  Кривую  f(x) на каждом малом интервале "h" заменяют горизонтальной линией,  пересекающей кривую в середине отрезка,  при этом M=N.  Интеграл вычисляется по формуле:

     S1 = f1 * h;  -  на одном отрезке.
     S =( f1 + f2 + ... + fM )*h;   -  на  M отрезках.

Здесь fi = f(xi);    h = (b-a)/N;   xi = a - h/2 + h*i;    i = 1,  2,  . . . ,

Метод трапеций состоит в том,  что кривую  f(x) на каждом малом интервале  "h" заменяют отрезком прямой,  соединяющим точки кривой f(x) на краях этого интервала,  при этом M=N-1.  Интеграл вычисляется по формуле:

     S1 =((fa + fb)/2)* h;  -  на одном отрезке.
     S = ((fa + fb)/2 + f1 + f2 + ... + fM )*h;  -  на N отрезках.
Здесь fi = f(xi);    h = (b-a)/N;   xi = a + h*i;    i = 1,  2,  . . . ,  M."                         
ClaneOffline
Методом трапеции вычислить определенный интеграл sinx в квадрате dx от 0 до pi/2. Количество частей разбиения 22.
{Код программы}
Код
program m1;
const pi=3.14;
var x,s,f:real;
n:integer;
begin
writeln('Введите кол-во разбиений');
read(n);
x:=0;
s:=pi/4;
while x<=((pi/2)-(pi/2*n)) do
begin
x:=x+(pi/2*n);
s:=s+2*sqr(sin(x));
end;
s:=s*((pi/(2*2*n)));
f:=(x/2)-((1/4)*(2*sin(2x)));
write(s,f);
end.  
ClaneOffline
Метод прямоугольников для приближенного вычисления интеграла функции f(x)=5*x*x-x+2
Код
program m2;
var
a,b:real; {границы отрезка}
dx:real; {приращение аргумента}
s:real; {приближенное значение интеграла}
n:integer; {кол-во интервалов}
x:real; {аргумент}
y:real; {значение функции в начале интервала}
i:integer;
begin
writeln('Нижняя граница отрезка');
readln(a);
writeln('Верхняя граница отрезка');
readln(B);
writeln('Приращение аргумента');
readln(dx);
n:=Round((b-a)/dx);
x:=a;
s:=0;
for i:=1 to n do
begin
y:=5*x*x-x+2;
s:=s+y*dx;
x:=x+dx;
end;
writeln('Значение интеграла :',s:9:3);
readln;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.