Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычисление определнных интегралов
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
sintanial
Численное интегрирование
Спасибо огромнейшее за то что выложили так много способов вычисления определенных интегралов, но всё же в универе задали вычислить интеграл методом правых прямоугольников, а здесь я нашел только центральных прямоугольников, и просто метод прямоугольников =). Я просто болел когда была эта лекция и поэтому не знаю чем отличается метод прямоугольников от метода правых прямоугольников и левых прямоугольников =), а интеграл завтра сдавать( поэтому лекцию взять не успею =(( ). Прошу помощи, за ранее огромное спасибо
volvo
Поиск по словам +правых +прямоуг* выводит на эту тему:
Интегрирование методом ... прямоугольников ... Был тут?
sintanial
там где ты мне дал, используются дополнительно модули, а мне модули нельзя использовать =) !, так что увы но это не подходит. Самое хорошее где было написанно это метод центрального прямоугольника =)

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

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


Тем более, что в результате таки получится тот же Copy/Paste, только в профиль smile.gif
sintanial
вольво ну извени, просто я на лекции не был, и я даже не знаю о чем идет речь и как вычислять интеграл =), поэтому и плаваю в коде =)

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

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


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.

Джери
у мня метод левых прямоугольников и вот что я пробнул набрать
-------------
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
Гость
{(a=pi/2+pi*k) or} написал потому что не наю куда его всунуть потому и закоментил
Джери
2 верхних сообщения написал я просто забыл во 2ом написать имя
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.