Скачиваний:
42
Добавлен:
10.05.2014
Размер:
48.05 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение Высшего профессионального образования

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ

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

«ЧИСЛЕННОЕ РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ ЛИНЕЙНОГО ОБЫКНОВЕННОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ВТОРОГО ПОРЯДКА»

Программа/

Результат

Теоретический материал

Оценка

Группа: Ф-0

Курс: Численные методы

Выполнил:

Преподаватель: Рябов Павел Николаевич

Москва 2012 год

  1. Решаем уравнение

2. График точного решения

Метод Эйлера

h = 0,05

Метод Рунге-

Кутты 4,

c h= 0.1

Метод Рунге-Кутты 4,

c h= 0.05

Поправка Рунге ΔuР для метода Рунге –Кутты 4

Точное решение u0(x) в узлах сетки

1.00000

1.00000

1.00250

1.00726

1.01407

1.02273

1.03310

1.04502

1.05838

1.07306

1.08897

1.10604

1.12419

1.14338

1.16357

1.18471

1.20678

1.22977

1.25366

1.27845

1.30414

1.000000000

1.004686722

1.017637944

1.037477421

1.063151560

1.093870152

1.129060362

1.168329693

1.211434713

1.258253098

1.308757243

1.000000000

1.001209611

1.004686560

1.010223434

1.017637675

1.026768984

1.037477084

1.049639766

1.063151181

1.077920334

1.093869749

1.110934264

1.129059947

1.148203090

1.168329277

1.189412499

1.211434304

1.234382973

1.258252705

1.283042806

1.308756874

0.0E+00

-1.1E-08

-1.8E-08

-2.2E-08

-2.5E-08

-2.7E-08

-2.8E-08

-2.8E-08

-2.7E-08

-2.6E-08

-2.5E-08

1.000000000

1.001209605

1.004686549

1.010223420

1.017637657

1.026768964

1.037477062

1.049639743

1.063151157

1.077920309

1.093869723

1.110934238

1.129059921

1.148203064

1.168329251

1.189412473

1.211434279

1.234382949

1.258252682

1.283042784

1.308756854

Погрешность метода в каждом узле расчётной области (шаг ):

Модуль разности решения по методу Эйлера и точного решения,

Модуль разности решения по методу РК4 с h=0.1 и точного решения,

Модуль разности решения по методу РК4 с h=0.05 и точного решения,

0.0E+00

1.2E-03

2.2E-03

3.0E-03

3.6E-03

4.0E-03

4.4E-03

4.6E-03

4.8E-03

4.9E-03

4.9E-03

4.9E-03

4.9E-03

4.8E-03

4.8E-03

4.7E-03

4.7E-03

4.6E-03

4.6E-03

4.6E-03

4.6E-03

0.0E+00

1.7E-07

2.9E-07

3.6E-07

4.0E-07

4.3E-07

4.4E-07

4.4E-07

4.3E-07

4.2E-07

3.9E-07

0.0E+00

5.8E-09

1.1E-08

1.4E-08

1.7E-08

2.0E-08

2.2E-08

2.3E-08

2.4E-08

2.5E-08

2.6E-08

2.6E-08

2.6E-08

2.6E-08

2.6E-08

2.5E-08

2.5E-08

2.4E-08

2.3E-08

2.2E-08

2.1E-08

0.0E+00

2.8E-10

4.7E-10

6.2E-10

7.9E-10

1.0E-09

1.4E-09

1.8E-09

2.4E-09

3.1E-09

3.9E-09

Код. Эйлер + Р-К 4 и 3 порядка точности

uses crt, math;

Function pU(x,y,z:real):real; //funkcia posle u'=...

begin

pU:= z;

end;

Function pZ(x,y,z:real):real; //funkcia posle z'=...

begin

pZ:=cosh(x)+x*sinh(x)-sinh(x)*y-cosh(x)*z;

end;

Function U(x:real):real; //U- tochnoe reshenie

begin

U:= x+ exp(-sinh(x));

end;

var

x,y,z,y2,dy:array [0..100] of real;

h,k1,k2,k3,k4,m1,m2,m3,m4:real;

i,n:integer;

output:text;

begin

Assign(output,'c:/out2.txt');

Rewrite(output);

clrscr;

n:=20;

h:=0.05;

x[0]:=0; //nach usloviya

y[0]:= 1; //u(0) dlya shaga h

y2[0]:=1; //u(0) dlya shaga 2h

z[0]:=0; //u'(0)

Writeln(output,'Tochnoe reshenie na melkoi setke (h)');

Writeln(output,u(x[0]));

For i:=1 to n do

begin

x[i]:=x[i-1]+h;

Writeln(output,u(x[i]));

end;

Writeln(output);

//Method Eulera

Writeln(output,'Euler na setke h');

//Rac4ety

For i:=0 to n do

begin

y[i+1]:=y[i]+z[i]*h;

z[i+1]:=z[i]+pZ(x[i],y[i],z[i])*h;

x[i+1]:=x[i]+h;

end;

//Vyvod rezultata

Writeln(output,' u |u-u0|');

For i:=0 to n do

Writeln(output,y[i],' ',abs(y[i]-u(x[i])):1 );

Writeln(output);

//Method Runge-Kutty 4

Writeln(output,'RK4 na setke h s uto4neniem dlya shaga 2h');

//Ras4ety dlya zadannogo shaga h

For i:=0 to n do

begin

k1:=h*pZ(x[i],y[i],z[i]);

m1:=h*pU(x[i],y[i],z[i]);

k2:=h*pZ(x[i]+h/2,y[i]+m1/2,z[i]+k1/2);

m2:=h*pU(x[i]+h/2,y[i]+m1/2,z[i]+k1/2);

k3:=h*pZ(x[i]+h/2,y[i]+m2/2,z[i]+k2/2);

m3:=h*pU(x[i]+h/2,y[i]+m2/2,z[i]+k2/2);

k4:=h*pZ(x[i]+h,y[i]+m3,z[i]+k3);

m4:=h*pU(x[i]+h,y[i]+m3,z[i]+k3);

z[i+1]:=z[i]+(1/6)*(k1+2*k2+2*k3+k4);

y[i+1]:=y[i]+(1/6)*(m1+2*m2+2*m3+m4);

end;

//Ras4ety dlya grubogo shaga 2h

h:=2*h;

i:=0;

While i<=n do

begin

k1:=h*pZ(x[i],y[i],z[i]);

m1:=h*pU(x[i],y[i],z[i]);

k2:=h*pZ(x[i]+h/2,y[i]+m1/2,z[i]+k1/2);

m2:=h*pU(x[i]+h/2,y[i]+m1/2,z[i]+k1/2);

k3:=h*pZ(x[i]+h/2,y[i]+m2/2,z[i]+k2/2);

m3:=h*pU(x[i]+h/2,y[i]+m2/2,z[i]+k2/2);

k4:=h*pZ(x[i]+h,y[i]+m3,z[i]+k3);

m4:=h*pU(x[i]+h,y[i]+m3,z[i]+k3);

z[i+2]:=z[i]+(1/6)*(k1+2*k2+2*k3+k4);

y2[i+2]:=y2[i]+(1/6)*(m1+2*m2+2*m3+m4);

i:=i+2;

end;

//Vyvod

Writeln(output,' u1 u2 |u1-u0| |u2-u0| dy |u2*-u0|');

i:=0;

While i<=n do

begin

dy[i]:=(y[i]-y2[i])/15;

Writeln(output,y2[i],' ',y[i],' ',y2[i]-u(x[i]):1,' ',y[i]-u(x[i]):1,' ',dy[i]:1,' ',dy[i]+y[i]-u(x[i]):1);

i:=i+1;

Writeln(output,' ',y[i],' ',y[i]-u(x[i]):1);

i:=i+1;

end;

Writeln(output);

//Method Runge-Kutty 3

Writeln(output);

Writeln(output,'RK3 na setke h s uto4neniem dlya shaga 2h');

h:=h/2;

//Ras4ety dlya zadannogo shaga h

For i:=0 to n do

begin

k1:=h*pZ(x[i],y[i],z[i]);

m1:=h*pU(x[i],y[i],z[i]);

k2:=h*pZ(x[i]+h/3,y[i]+m1/3,z[i]+k1/3);

m2:=h*pU(x[i]+h/3,y[i]+m1/3,z[i]+k1/3);

k3:=h*pZ(x[i]+2*h/3,y[i]+2*m2/3,z[i]+2*k2/3);

m3:=h*pU(x[i]+2*h/3,y[i]+2*m2/3,z[i]+2*k2/3);

z[i+1]:=z[i]+(1/4)*(k1+3*k3);

y[i+1]:=y[i]+(1/4)*(m1+3*m3);

end;

//Ras4ety dlya grubogo shaga 2h

h:=2*h;

i:=0;

While i<=n do

begin

k1:=h*pZ(x[i],y[i],z[i]);

m1:=h*pU(x[i],y[i],z[i]);

k2:=h*pZ(x[i]+h/3,y[i]+m1/3,z[i]+k1/3);

m2:=h*pU(x[i]+h/3,y[i]+m1/3,z[i]+k1/3);

k3:=h*pZ(x[i]+2*h/3,y[i]+2*m2/3,z[i]+2*k2/3);

m3:=h*pU(x[i]+2*h/3,y[i]+2*m2/3,z[i]+2*k2/3);

z[i+2]:=z[i]+(1/4)*(k1+3*k3);

y2[i+2]:=y2[i]+(1/4)*(m1+3*m3);

i:=i+2;

end;

//Vyvod

Writeln(output,' u1 u2 |u1-u0| |u2-u0| dy |u2*-u0|');

i:=0;

While i<=n do

begin

dy[i]:=(y[i]-y2[i])/15;

Writeln(output,y2[i],' ',y[i],' ',abs(y2[i]-u(x[i])):1,' ',abs(y[i]-u(x[i])):1,' ',dy[i]:1,' ',abs(dy[i]+y[i]-u(x[i])):1);

i:=i+1;

Writeln(output,' ',y[i],' ',abs(y[i]-u(x[i])):1);

i:=i+1;

end;

Writeln(output);

Close(output);

Writeln('out2.txt');

Readln;

end.

Соседние файлы в папке 2. Задача Коши для ОДУ 2 порядка