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

3_теориЛеготкина / лаба2_Раф

.doc
Скачиваний:
24
Добавлен:
09.12.2013
Размер:
30.72 Кб
Скачать

{Программа вычисляет интеграл методом Чебышева в адаптивном алгоритме}

Uses Crt;

Const b=1;a=0;e=0.001;t=0.7071;

function f(x:extended):extended;

begin

f:=(x*x*x)*(1-x)*(1-x)*(1-x)*(1-x)*(1-x);

end;

{Основная программа}

Var

xl,xm,xr,x,Theb1,Theb2 :extended; {Значение x на краях отрезка и посередине}

S,P,Q,h,ee:extended; {Значение интеграла }

ei,hi,Qi:array[1..1000]of extended;

xl1,xm1,xr1,x1 :extended; {Значение x на краях отрезка и посередине}

S1,P1,Q1,h1,ee1:extended; {Значение интеграла}

ei1,hi1,Qi1:array[1..1000]of extended;

i,j:byte;

function Theb(a1,b1:extended):extended;

var x1,x2,x3:extended;

begin

x1:=(b1+a1)/2-(b1-a1)*(-t)/2;

x3:=(b1+a1)/2+(b1-a1)*t/2;

x2:=(b1+a1)/2;

Theb2:=(0.333*((b-a)/2)*(f(x1)+f(x2)+f(x3)));

Theb1:=Theb1+Theb2;

Theb:=Theb2; end;

BEGIN

Theb1:=0;Theb2:=0;

ClrScr;

Writeln('Вычисление интеграла без банкирования');

WriteLn('j':5, '|', 'h(i)':17,'Q(i)':21,'e(i)':17);

WriteLn('-----------------------------------------------------------------------------'); xl:=a;xr:=b;i:=0;

Repeat {Цикл поиска отрезка, удовлетворяющего неравенству}

repeat h:=xr-xl; {Размер отрезка}

P:=Theb(xl, xr); {1*h}

xm:=(xl+xr)/2; {Середина отрезка}

Q:=Theb(xl, xm)+Theb(xm, xr); 2*h x:=xr; {х-равен a}

xr:=xm; {xr-равен середине отрезка}

ee:=Abs(P-Q)/63 {выч-ем погрешность на этом участке}

until ee<=h*e/(b-a); {Если погрешность меньше}

i:=i+1;

Qi[i]:=Q; {Значение интеграла на отрезке}

hi[i]:=h; {размер этого отрезка}

ei[i]:=ee; {погрешность на отрезке}

xl:=xm; {присваиваем началу отрезка новое значение}

xr:=b {присваиваем концу отрезка значение b}

until xl>=b-h; {переход к следующему отрезку}

h:=0;S:=0;ee:=0;

for j:=1to i do begin if (j div 5)=0 then WriteLn(j:5, '|', hi[j], '|', Qi[j], '|', ei[j]); S:=S+Qi[j];

h:=h+hi[j];

ee:=ee+ei[j]

end; WriteLn('-----------------------------------------------------------------------------'); WriteLn(' ':5, ' ', h:5:5, ' | ', S:7:7, ' | ' , ee:5:5); WriteLn;

WriteLn('Задана погрешность : ',e:5:5);

WriteLn('Значение интеграла : ',S:7:7);readln; xl1:=a;xr1:=b;i:=0;

Repeat {Цикл поиска отрезка,удовлетворяющего неравенству}

repeat h1:=xr1-xl1; {Размер отрезка}

P1:=Theb(xl1, xr1); xm1:=(xl1+xr1)/2; Q1:=Theb(xl1, xm1)+Theb(xm1, xr1); x1:=xr1;

xr1:=xm1;

ee1:=Abs(P1-Q1)/63

until ee1<=h1*e/(b-a);

i:=i+1;

Qi1[i]:=Q1; hi1[i]:=h1; ei1[i]:=ee1; xl1:=x1; xr1:=b

until xl1>=b-h1; h1:=0;S1:=0;ee1:=0;

Writeln('Вычисление интеграла c банкированием'); WriteLn('j':5, '|', 'h(i)':17,'Q(i)':21,'e(i)':17); WriteLn('-------------------------------------------------------------------------------');

for j:=1to i do begin

S1:=S1+Qi1[j]; h1:=h1+hi1[j]; ei1[j+1]:=ei1[j+1]+ei1[j]; ee1:=ee1+ei1[j];

WriteLn(j:5, '|', hi1[j], '|', Qi1[j], '|', ei1[j]*10); end;

WriteLn('-------------------------------------------------------------------------------'); WriteLn(' ':5, ' ', h1:5:5, ' | ', S1:5:5, ' | ' , ee1*10:5:5); WriteLn('Задана погрешность : ',e:5:5);

WriteLn('Значение интеграла : ',S1:5:5);readln

END.