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

Лаба 3 - вариант № 3, стр. 43

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

Пермский Государственный Технический Университет

Электротехнический факультет

Кафедра автоматики и телемеханики

Вычислительные методы.

Отчет по лабораторной работе №3.

Интегрирование функций.

Вариант № 3, стр. 43

Выполнил: студент

гр. КРЭС-05 Пьянков А. Л.

Проверила: доцент кафедры АТ Леготкина Т. С.

Пермь 2007 г.

Краткая теория.

1) Простой метод Эйлера:

2) Исправленный метод Эйлера:

3) Модифицированный метод Эйлера:

Для определения начального отрезка воспользуемся уточнённым методом Эйлера:

, где

, где

Метод Милна относится к методу прогнозу и коррекции и делится на две формулы : прогноза и коррекции.

Для каждой точки, начиная с четвёртой, найдём прогнозируемое значение по первой формуле Милна:

, где

Таким образом

Необходимо посчитать прогнозируемые значения , где .

Прогнозируемые значения необходимо подставить во вторую формулу Милна (формула коррекции):

, где .

Для каждой следующей точки вначале по 1 формуле Милна подсчитываем прогнозирующее значение , затем находится значение и именно это значение подставить во 2 формулу Милна

Погрешность формулы Милна:

Листинг программы:

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.

Результаты вычислений:

x tochnoe prognoz skorrekt pr eyler isp eyler mod eyler e

1.414214E+0000 8.888889E-0001 1.000000E+0000 1.000000E+0000 1.000000E+0000 1.000000E+0000 1.000000E+0000 0.000000E+0000

1.638325E+0000 1.325263E+0000 1.731360E+0000 1.731360E+0000 1.633883E+0000 1.729714E+0000 1.731360E+0000 0.000000E+0000

1.862437E+0000 1.795498E+0000 2.718988E+0000 2.718988E+0000 2.459428E+0000 2.714493E+0000 2.718988E+0000 0.000000E+0000

2.086549E+0000 2.304441E+0000 4.024694E+0000 4.024694E+0000 3.529839E+0000 4.016434E+0000 4.024694E+0000 0.000000E+0000

2.310660E+0000 2.854317E+0000 5.762429E+0000 5.744315E+0000 4.900579E+0000 5.702014E+0000 5.714934E+0000 6.245991E-0004

2.534772E+0000 3.446331E+0000 7.931356E+0000 7.903485E+0000 6.631795E+0000 7.843460E+0000 7.861976E+0000 9.610842E-0004

2.758883E+0000 4.081204E+0000 1.061388E+0001 1.062169E+0001 8.789141E+0000 1.051918E+0001 1.054429E+0001 2.691477E-0004

2.982995E+0000 4.759397E+0000 1.395214E+0001 1.394894E+0001 1.144413E+0001 1.381394E+0001 1.384670E+0001 1.104221E-0004

3.207107E+0000 5.481223E+0000 1.800537E+0001 1.800900E+0001 1.467435E+0001 1.781896E+0001 1.786050E+0001 1.251556E-0004

3.431218E+0000 6.246900E+0000 2.287371E+0001 2.287045E+0001 1.856354E+0001 2.263197E+0001 2.268348E+0001 1.124732E-0004

3.655330E+0000 7.056587E+0000 2.866260E+0001 2.866539E+0001 2.320174E+0001 2.835723E+0001 2.841997E+0001 9.631006E-0005

3.879442E+0000 7.910405E+0000 3.548195E+0001 3.547953E+0001 2.868529E+0001 3.510557E+0001 3.518086E+0001 8.352938E-0005

4.103553E+0000 8.808442E+0000 4.345248E+0001 4.345463E+0001 3.511689E+0001 4.299440E+0001 4.308363E+0001 7.428452E-0005

4.327665E+0000 9.750769E+0000 5.269450E+0001 5.269259E+0001 4.260568E+0001 5.214775E+0001 5.225236E+0001 6.594483E-0005

4.551777E+0000 1.073744E+0001 6.334398E+0001 6.334571E+0001 5.126720E+0001 6.269622E+0001 6.281772E+0001 5.944458E-0005

4.775888E+0000 1.176850E+0001 7.553298E+0001 7.553143E+0001 6.122348E+0001 7.477708E+0001 7.491702E+0001 5.349779E-0005

5.000000E+0000 1.284399E+0001 8.941180E+0001 8.941321E+0001 7.260303E+0001 8.853420E+0001 8.869420E+0001 4.877537E-0005

emax= 9.610842E-0004 ezad= 1.000000E-0003 h= 2.241117E-0001 n=16