выч методы не разобраны! / LAB2-И~1 / ЛАБ_№2 / ЛАБА2~1
.DOCЗадание:
Вычислить интеграл методом Симпсона (n=2) при заданной погрешности (ε=0,001) методом двойного пересчета с банкированием и без него.
Текст программы:
{x*ln(x)*ln(2-x)}
{Формула Cимпсона}
{E=0.001 n=1 [0.5;1.5]}
program lab2;
uses crt;
const a=0.5; b=1.5; n=1; E=0.0000001;
var i,j:integer;
xlev,xprav,xser,x,h:real;
f1h,f2h,ee,f:real;
fi,hi,ei:array [1..100] of real;
deltae:real;
function trap (aa,bb:real):real;
var i,h:integer;
cheb:real;
f,x:array [0..2] of real;
begin
x[0]:=aa;
x[2]:=bb;
x[1]:=(aa+bb)/2;
for i:=0 to n do
f[i]:=x[i]*ln(x[i])*ln(2-x[i]);
simpson:=(bb-aa)/6*(f[0]+4*f[1]+f[2]);
end;
Begin
ClrScr;
{Адаптивный квадратурный алгоритм без банкирования}
Writeln('Адаптивный квадратурный алгоритм без банкирования');
WriteLn(' h(i) Ih(i) E(i)');
WriteLn('-----------------------------------------------------------------------------');
xlev:=a; xprav:=b; i:=0;
repeat
repeat
h:=xprav-xlev;
f1h:=simpson(xlev,xprav);
xser:=(xlev+xprav)/2;
f2h:=simpson(xlev,xser)+simpson(xser,xprav);
x:=xprav; xprav:=xser;
ee:=Abs(f1h-f2h)/15
until ee<=h*e/(b-a);
i:=i+1;
fi[i]:=f2h; hi[i]:=h; ei[i]:=ee;
xlev:=x; xprav:=b
until xlev>=b;
h:=0; f:=0; ee:=0;
for j:=1 to i do begin
WriteLn(j:5,' ', hi[j]:5:5,' ', fi[j]:7:11,' ', ei[j]:7:11);
f:=f+fi[j]; h:=h+hi[j]; ee:=ee+ei[j]
end;
WriteLn('-----------------------------------------------------------------------------');
WriteLn(' ', h:5:5, ' ', f:7:11, ' ',ee:5:11);
WriteLn;
WriteLn('Задана погрешность : ',e:5:11);
WriteLn('Значение интеграла : ',f:7:11);
readln;
{Адаптивный квадратурный алгоритм с банкированием}
clrscr;
Writeln('Адаптивный квадратурный алгоритм с банкированием');
WriteLn(' h(i) Ih(i) E(i)');
WriteLn('-----------------------------------------------------------------------------');
deltae:=0;
xlev:=a; xprav:=b; i:=0;
repeat
repeat
h:=xprav-xlev;
f1h:=simpson(xlev,xprav);
xser:=(xlev+xprav)/2;
f2h:=simpson(xlev,xser)+simpson(xser,xprav);
x:=xprav; xprav:=xser;
ee:=Abs(f1h-f2h)/15
until ee-deltae<=h*e/(b-a);
deltae:=h*e/(b-a)-ee+deltae;
i:=i+1;
fi[i]:=f2h; hi[i]:=h; ei[i]:=ee;
xlev:=x; xprav:=b
until xlev>=b;
h:=0; f:=0; ee:=0;
for j:=1 to i do begin
WriteLn(j:5,' ', hi[j]:5:5,' ', fi[j]:7:11,' ', ei[j]:7:11);
f:=f+fi[j]; h:=h+hi[j]; ee:=ee+ei[j]
end;
WriteLn('-----------------------------------------------------------------------------');
WriteLn(' ', h:5:5, ' ', f:7:11, ' ',ee:5:11);
WriteLn;
WriteLn('Задана погрешность : ',e:5:11);
WriteLn('Значение интеграла : ',f:7:11);
readln;
End.
Результат вычислений при ε=0,001
Результат вычислений при ε=0,0000001