Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Интеграл

Автор: Мюллер С.Х. 17.01.2003 1:03

Вычислить определённый интеграл методами средних прямоугольников и трапеции.
Обязательно функция должна вводиться не в исходнике, а в проге(exe)нике.

Пожалуста выручите.

Автор: Ivs 17.01.2003 23:24

Вот что удалось отискать в краткой теоретической справке по этому вопросу:
"Метод прямоугольников основан на интерполяции функции на малом отрезке постоянным значением.  Кривую  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 19.01.2003 5:09

Методом трапеции вычислить определенный интеграл 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 19.01.2003 5:19

Метод прямоугольников для приближенного вычисления интеграла функции 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.