Скачиваний:
30
Добавлен:
09.12.2013
Размер:
32.77 Кб
Скачать

{$N+,E+}

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

Uses Crt;

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

Function f(x:extended):extended;

Begin

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

End;

Function Tcheb(a,b:extended):extended;

{Ф-ция вычисляет интеграл методом Чебышева по 4-м точкам}

var h,x1,x2:real;

Begin

h:=(b-a);

x1:=(b+a)/2+((b-a)*0.57735)/2;

x2:=(b+a)/2-((b-a)*0.57735)/2;

Tcheb:=(h*(f(x1)+f(x2)))/2

End;

Function Tcheb1(a,b:extended):extended;

{Ф-ция вычисляет интеграл методом Чебышева по 4-м точкам}

var h,x1,x2,x3:real;

Begin

h:=(b-a);

x1:=(b+a)/2+((b-a)*0.707107)/2;

x2:=(b+a)/2-((b-a)*0.707107)/2;

x3:=(b+a)/2;

Tcheb1:=h*(f(x1)+f(x2)+f(x3))/3

End;

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

Var

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

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

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

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

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

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

i,j:byte;

BEGIN

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:= Tcheb(xl, xr);

xm:=(xl+xr)/2;

Q:= Tcheb(xl, xm)+ Tcheb(xm, xr);

x:=xr;

xr:=xm;

ee:=Abs(P-Q)/31

until ee<=h*e/(b-a);

i:=i+1;

Qi[i]:=Q;

hi[i]:=h;

ei[i]:=ee;

xl:=x;

xr:=b

until x=b;

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

for j:=1to i do begin 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:= Tcheb1(xl1, xr1);

xm1:=(xl1+xr1)/2;

Q1:= Tcheb1(xl1, xm1)+ Tcheb1(xm1, xr1);

x11:=xr1;

xr1:=xm1;

ee1:=Abs(P1-Q1)/31

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

i:=i+1;

Qi1[i]:=Q1;

hi1[i]:=h1;

ei1[i]:=ee1;

xl1:=x11;

xr1:=b

until x11=b;

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.

Соседние файлы в папке прога_Чеб