Новичок
Джуниор
Регистрация: 02.04.2012
Сообщений: 1
|
Решение интегралов с заданной точностью
Задача посчитать 2 интеграла с заданной точностью( 0.001 и 0.0001).
интеграл от 0,2 до 1 с подынтегральной функцией (sin(0.8*x*x+0.3))/(0.7+cos(1.2*x+0.3))
второй интеграл от 1,4 до 3 с подынтегральной функцией
x*x*(lg10)
мой код:
Код:
program Laba_8_bez;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
Tfunc = function (x:currency):currency;
Tmeth = function (b,a,t:currency;const f) : currency;
function f1(x:currency):currency; //ïåðâàÿ ïîäûíòåãðàëüíàÿ ôóíêöèÿ
begin
f1:=(sin(0.8*sqr(x)+0.3))/(0.7+cos(1.2*x+0.3));
end;
function f2(x:currency):currency; //âòîðàÿ ïîäûíòåãðàëüíàÿ ôóíêöèÿ
begin
f2:=sqr(x)*(ln(x)/ln(10));
end;
function l_pr(b,a,t:currency;const f: Tfunc) : currency; //ìåòîä ëåâûõ ïðÿìîóãîëüíèêîâ
var h,integr,integr0,sum,xi:currency;
n,i:integer;
begin
integr:=f{unc}(a)*(b-a);
n:=5;
repeat
integr0:=integr;
h:=(b-a)/n;
sum:=0; i:=0;
while i<=n-1 do
begin
xi:=a+i*h;
sum:=sum+f{unc}(xi);
inc(i);
end;
integr:=h*sum;
n:=n+5;
until abs(Integr-Integr0)<=t; //write(' ',n);
l_pr:=integr;
end;
function trap(b,a,t:currency;const f: Tfunc) : currency; //ìåòîä òðàïåöèè
var h,integr,integr0,sum,xi:currency;
n,i:integer;
begin
integr:=f{unc}(a)*(b-a);
n:=5;
repeat
integr0:=integr;
h:=(b-a)/n;
sum:=0; i:=0;
while i<=n-1 do
begin
xi:=a+i*h+h/2;
sum:=sum+f{unc}(xi);
inc(i);
end;
integr:=h*sum;
n:=n+5;
until abs(Integr-Integr0)<=t; //write(' ',n);
trap:=integr;
end;
{function method (met : tmeth; fun : tfunc; b,a,t:currency):currency;
begin
method:=met(b,a,t,fun);
end;}
begin
write(#201#205#205#205#205#205#203#205#205#205#205#205#205#205#205#205#205); // øàïêà òàáëèöû è ïîñëåäóþùåå çàïîëíåíèå
write(#205#205#205#205#205#203#205#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#205#203#205#205#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#203#205#205#205#205#205#205#205#205#205#205#205);
writeln(#205#205#205#205#187);
writeln(#186,' INT ',#186,'LPRYAMOYG 10^-3',#186,' TRAPECIA 10^-3'#186,'LPRYAMOYG 10^-4',#186,' TRAPECIA 10^-4'#186);
write(#204#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205);
writeln(#205#205#205#205#185);
write(#186,' 1 ',#186,l_pr(1,0.2,0.001,f1):15:6,#186);
{write(#186,' 1 ',#186,method(l_pr,f1,1,0.2,0.001):15:6,#186); }
write(trap(1,0.2,0.001,f1):15:6,#186);
write(l_pr(1,0.2,0.0001,f1):15:6);
writeln(#186,trap(1,0.2,0.0001,f1):15:6,#186);
write(#204#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#206#205#205#205#205#205#205#205#205#205#205#205);
writeln(#205#205#205#205#185);
write(#186,' 2 ',#186,l_pr(3,1.4,0.001,f2):15:6,#186);
write(trap(3,1.4,0.001,f2):15:6,#186);
write(l_pr(3,1.4,0.0001,f2):15:6);
writeln(#186,trap(3,1.4,0.0001,f2):15:6,#186);
write(#200#205#205#205#205#205#202#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#205#205#202#205#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#205#202#205#205#205#205#205#205#205#205#205#205#205#205);
write(#205#205#205#202#205#205#205#205#205#205#205#205#205#205#205#205#205);
writeln(#205#205#188);
ReadLN;
readln;
end.
программа долго думает на 2-х значениях, когда высчитывает интегралы по методу левых прямоугольников функции с точностью 0,0001 количество итераций сравнительно большое для 1-й функции порядка 3200 второй в 2 раза больше. с чем это может быть связаною
Последний раз редактировалось Stilet; 02.04.2012 в 08:02.
|