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

универсальная прога для третьей лабы (крэс-05)

.pas
Скачиваний:
18
Добавлен:
09.12.2013
Размер:
2.06 Кб
Скачать
program laba3;
{$N+}
const
b=5; hzad=0.1; ezad=0.0000001; nzad=20;

var
x,y,t,yk,yp,ypr,yis,ymo,e:array[0..100] of extended;
emax,h,a:extended;
c:char;
i,n:integer;
out:text;

function f(x,y:extended):extended;
begin
f:=x*sqrt(y)+x*y/(x*x-1);
end;


begin
a:=sqrt(2);
assign(out,'laba3.txt');
rewrite(out);

{na4alnie usloviya}
x[0]:=a; y[0]:=1;
write('h or n or e?'); readln(c);
if c='e' then
begin
emax:=ezad+1;
n:=0;
end;




repeat

case c of
'e': begin n:=n+1; h:=(b-a)/n; end;
'h': begin h:=hzad; n:=round((b-a)/h); end;
'n': begin n:=nzad; h:=(b-a)/n; end;
else begin writeln('idiot! only h or n or e'); writeln(out,'idiot! only h or n or e'); close(out); exit; end;
end;


{zabivaem x}
for i:=0 to n-1 do x[i+1]:=x[i]+h;

{to4noe}
for i:=0 to n do t[i]:=sqr(2*sqrt(sqrt(x[i]*x[i]-1))+x[i]*x[i]-1)/9;

{prostoy metod eylera}
ypr[0]:=y[0];
for i:=0 to n-1 do ypr[i+1]:=ypr[i]+h*f(x[i],ypr[i]);

{ispr}
yis[0]:=y[0];
for i:=0 to n-1 do yis[i+1]:=yis[i]+h/2*(f(x[i],yis[i])+f(x[i]+h,yis[i]+h*f(x[i],yis[i])));

{mod}
ymo[0]:=y[0];
for i:=0 to n-1 do ymo[i+1]:=ymo[i]+h*f(x[i]+h/2,ymo[i]+h/2*f(x[i],ymo[i]));


for i:=0 to 3 do begin yk[i]:=ymo[i]; yp[i]:=yk[i]; end;

{miln}
for i:=3 to n-1 do
begin
yp[i+1]:=yk[i-3]+4*h/3*(2*f(x[i-2],yk[i-2])-f(x[i-1],yk[i-1])+2*f(x[i],yk[i]));
yk[i+1]:=yk[i-1]+h/3*(f(x[i+1],yp[i+1])+4*f(x[i],yk[i])+f(x[i-1],yk[i-1]));
end;

emax:=0;
for i:=0 to n do begin e[i]:=abs(yp[i]-yk[i])/29; if emax<e[i] then emax:=e[i]; end;

until ((emax<=ezad) and (emax<>0)) or (c<>'e') ;







writeln(out,'x tochnoe prognoz skorrekt pr eyler isp eyler mod eyler e');

for i:=0 to n do writeln(out,x[i]{:8:6},t[i]{:10:6},yp[i]{:10:6},yk[i]{:10:6}
,ypr[i]{:10:6},yis[i]{:10:6},ymo[i]{:10:6},e[i]{:15});
writeln(out,'emax=',emax:15,' ezad=',ezad:15,' h=',h:8:6,' n=',n);

close(out);

end.