Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
09.12.2013
Размер:
72.19 Кб
Скачать

Задание:

Вычислить интеграл методом Симпсона (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

Соседние файлы в папке ЛАБ_№2