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

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

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

Автор: sintanial 15.03.2008 0:49

http://forum.pascal.net.ru/index.php?showtopic=4389
Спасибо огромнейшее за то что выложили так много способов вычисления определенных интегралов, но всё же в универе задали вычислить интеграл методом правых прямоугольников, а здесь я нашел только центральных прямоугольников, и просто метод прямоугольников =). Я просто болел когда была эта лекция и поэтому не знаю чем отличается метод прямоугольников от метода правых прямоугольников и левых прямоугольников =), а интеграл завтра сдавать( поэтому лекцию взять не успею =(( ). Прошу помощи, за ранее огромное спасибо

Автор: volvo 15.03.2008 1:19

Поиск по словам +правых +прямоуг* выводит на эту тему:
http://forum.pascal.net.ru/index.php?showtopic=8550 ... Был тут?

Автор: sintanial 15.03.2008 1:30

там где ты мне дал, используются дополнительно модули, а мне модули нельзя использовать =) !, так что увы но это не подходит. Самое хорошее где было написанно это метод центрального прямоугольника =)

З.ы. Я так понял что методы правого левого и центрального тличаются только в цикле for , тоесть
Центральный
For i:=1 to n-1 do
Левый
for i:=0 to n-1 do
Правый
for i:=1 to n do

Но я не знаю прав я или нет =) , поправте если ошибаюсь =)

Автор: volvo 15.03.2008 1:41

Выдрать функцию из модуля - никак нельзя? Не обязательно же все время делать только Copy/Paste, подумать тоже иногда полезно.

Автор: Michael_Rybak 15.03.2008 1:46

Цитата
Не обязательно же все время делать только Copy/Paste, подумать тоже иногда полезно.


Тем более, что в результате таки получится тот же Copy/Paste, только в профиль smile.gif

Автор: sintanial 15.03.2008 1:47

вольво ну извени, просто я на лекции не был, и я даже не знаю о чем идет речь и как вычислять интеграл =), поэтому и плаваю в коде =)

Добавлено через 18 мин.
Эммм потехоньку начал разбираться =)

Автор: sintanial 15.03.2008 2:44

Фсё разобрался

ВОТ ТОЖЕ САМОЕ ТОЛЬКО БЕЗ МОДУЛЕЙ( правый прямоугольник ) . Вдруг кому понадобится так же как мне без модулей =)


function IntF(x:real):real;
var y:real;
begin
y:=sqrt(1+2*x);{ Вписываем функцию которую нужно вычислить !!!!}
intf:=y;
end;


var
//S - площадь на предыдущей итерации,
//step - Толщина прямоугольника
//gran - ïпередвигаемая от a до b граница
//n - число прямоугольников, удваивается на каждой итерации
S, step, gran,eps,a,b,z,x,l,f,result:real;
n: integer;
begin
read(a,b,eps);
z:=IntF(b);
//Сначало приближение одного прямоугольника
step := b - a;
Result :=z * step;
n := 1;
repeat
S := Result;
n := n * 2;
step := (b - a) / n;
Gran := b;
Result := 0;
//Вычисление площади новых прямоугольников
while a < gran do
begin
l:=IntF(gran);
Result := Result +l * step;
gran := gran - step;
end;
until abs(S - Result) <= eps;
f:=Result;
writeln(f);
end.


Автор: Джери 16.01.2010 3:17

у мня метод левых прямоугольников и вот что я пробнул набрать
-------------

Program integ;
uses crt;
var
a,b,eps,k,sum,sum1:real;
n:integer;
function f(x:real):real;
begin
f:=x/cos(x);
if x=pi/2+pi*k then
writeln('wrong');
end;

function calc(n:real):real;
var
h,sqr,x:real;
begin
h:=abs(b-a)/n;
x:=a;
sqr:=0;
while x<b do
begin
x:=x+h;
sqr:=sqr+f(x);

end;
sqr:=abs(sqr*h);
calc:=sqr;
end;

begin
TextColor(2);
writeln('Zadanie f(x)=x/cos(x)');
write('Vvedite levuiu granitsu a='); {left_border}
readln(a);
write('Vvedite pravuiu granitsu b='); {right_border}
readln(b);
write('Vvedite tochnost eps='); {tochnost}
readln(eps);
sum:=0;

if {(a=pi/2+pi*k) or} (a=b) then
writeln('error')
else
begin
n:=1;
sum1:=calc(n);
repeat
sum:=sum1;
n:=n*2;
sum1:=calc(n);
until abs(sum-sum1)<=eps;

writeln(' Result= ' ,sum1);
writeln(' n= ',n);
end;

readln;
end.

---------
но оно как я понял:
1 работает ток в определенных значениях раз;
2 не учитываетса то что в значении х=pi/2+pi*k(real) функция y=x/cos(x) проскакивает ( например х=0 0/cos0=0)
Проблема в том что я не наю как исправить ни 1 ни 2 проблему wacko.gif

Автор: Гость 16.01.2010 3:18

{(a=pi/2+pi*k) or} написал потому что не наю куда его всунуть потому и закоментил

Автор: Джери 16.01.2010 3:19

2 верхних сообщения написал я просто забыл во 2ом написать имя