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

Узлы пространственной сетки,

Численное решение задачи в узлах сетки в момент времени

Точное решение задачи в узлах сетки,

Модуль разности между точным и приближенным решением в узлах сетки,

Аппроксимация 1 порядка

Аппроксимация 2 порядка

Аппроксимация 1 порядка

Аппроксимация 2 порядка

0.0

0.05

0.10

0.15

0.20

0.25

0.30

0.35

0.40

0.45

0.50

0.55

0.60

0.65

0.70

0.75

0.80

0.85

0.90

0.95

1.00

0.3340

0.5139

0.6730

0.8146

0.9412

1.0553

1.1584

1.2523

1.3382

1.4170

1.4897

1.5569

1.6194

1.6777

1.7324

1.7838

1.8321

1.8776

1.9205

1.9607

1.9984

1.0485

1.1188

1.1854

1.2491

1.3101

1.3691

1.4263

1.4817

1.5356

1.5882

1.6398

1.6905

1.7400

1.7887

1.8363

1.8832

1.9292

1.9746

2.0193

2.0634

2.1070

1.0000

1.0770

1.1489

1.2166

1.2806

1.3416

1.4000

1.4560

1.5100

1.5620

1.6125

1.6613

1.7088

1.7550

1.8000

1.8439

1.8868

1.9287

1.9698

2.0100

2.0494

6.66E-01

5.63E-01

4.76E-01

4.02E-01

3.39E-01

2.86E-01

2.42E-01

2.04E-01

1.72E-01

1.45E-01

1.23E-01

1.04E-01

8.94E-02

7.73E-02

6.76E-02

6.01E-02

5.47E-02

5.12E-02

4.93E-02

4.93E-02

5.09E-02

4.85E-02

4.18E-02

3.65E-02

3.25E-02

2.95E-02

2.74E-02

2.63E-02

2.57E-02

2.56E-02

2.62E-02

2.74E-02

2.91E-02

3.12E-02

3.37E-02

3.63E-02

3.93E-02

4.24E-02

4.58E-02

4.95E-02

5.34E-02

5.76E-02

Максимальный модуль разности

при t = 2.2

6.66e-1

5.76e-2

4. График зависимости максимальной погрешности от времени:

Код с 1 и 2 порядком аппроксимации начальных и граничных условий, шаблон-крест

uses crt;

Function f(x,t:real):real;

begin

f:=((1+t)*(1+t)-2*x*x)/8/sqrt(1+x+x*t)/sqrt(1+x+x*t)/sqrt(1+x+x*t);

end;

Function phi1(x:real):real;

begin

phi1:=sqrt(1+x);

end;

Function phi2(x:real):real;

begin

phi2:=x/2/sqrt(1+x);

end;

Function psi1(t:real):real;

begin

psi1:=(7+t)/2;

end;

Function psi2(t:real):real;

begin

psi2:=1/sqrt(2+t);

end;

Function U0(x,t:real):real;

begin

U0:=sqrt(1+x+x*t);

end;

var

j,k,nx,nt:integer;

hx,ht,xmax,tmax,aa,sr,m:real;

x,t:array[0..500] of real;

u1,u2: array [0..500,0..500] of real;

Output:text;

begin

clrscr;

Assign(output,'out4.txt');

Rewrite(output);

aa:=1/2;

hx:=0.05;

xmax:=1;

Write('T max = '); Readln(tmax);

Write('Shag po t = '); Readln(ht);

nx:=round(xmax/hx);

nt:=round(tmax/ht);

x[0]:=0;

t[0]:=0;

For j:=1 to nx do

x[j]:=x[j-1]+hx;

For k:=1 to nt do

t[k]:=t[k-1]+ht;

{1 poryadok approks.}

For j:=0 to nx do

begin

U1[j,0]:=phi1(x[j]);

U1[j,1]:=U1[j,0]+ht*phi2(x[j]);

end;

For k:=1 to nt-1 do

begin

For j:=1 to nx-1 do

U1[j,k+1]:=2*U1[j,k]-U1[j,k-1]+aa*ht*ht/(hx*hx)*(U1[j+1,k]-2*U1[j,k]+U1[j-1,k])+f(x[j],t[k])*ht*ht;

U1[0,k+1]:=(U1[1,k+1]-hx*psi1(t[k+1])) / (1-3*hx);

U1[nx,k+1]:=(U1[nx-1,k+1]-hx/2*psi2(t[k+1])) / (1-hx/2);

end;

{2 poryadok approks.}

For j:=0 to nx do

begin

U2[j,0]:=phi1(x[j]);

U2[j,1]:=phi1(x[j])+ht*phi2(x[j])+ht*ht/2*(-aa/4/phi1(x[j])/phi1(x[j])/phi1(x[j])+f(x[j],0));

end;

For k:=1 to nt-1 do

begin

For j:=1 to nx-1 do

U2[j,k+1]:=2*U2[j,k]-U2[j,k-1]+aa*ht*ht/(hx*hx)*(U2[j+1,k]-2*U2[j,k]+U2[j-1,k])+f(x[j],t[k])*ht*ht;

U2[0,k+1]:=2*aa*ht*ht/(hx*hx)*(U2[1,k]-(1-3*hx)*U2[0,k]-hx*psi1(t[k]))+2*U2[0,k]-U2[0,k-1]+ht*ht*f(0,t[k]);

U2[nx,k+1]:=2*aa*ht*ht/(hx*hx)*(U2[nx-1,k]-(1-hx/2)*U2[nx,k]-hx/2*psi2(t[k]))+2*U2[nx,k]-U2[nx,k-1]+ht*ht*f(0,t[k]);

end;

k:=nt;

Writeln(output,'T= ',t[k]);

Writeln(output,'Tochnoe reshenie');

For j:=0 to nx do

Writeln(output,U0(x[j],t[k]));

Writeln(output);

Writeln(output,'Shislennoe 1-go poryadka');

For j:=0 to nx do

Writeln(output,U1[j,k]);

Writeln(output);

Writeln(output,'Raznost 1-go poryadka s tochnim');

For j:=0 to nx do

Writeln(output,abs(u1[j,k]-U0(x[j],t[k])));

Writeln(output);

Writeln(output,'Shislennoe 2-go poryadka');

For j:=0 to nx do

Writeln(output,U2[j,k]);

Writeln(output);

Writeln(output,'Raznost 2-go poryadka s tochnim');

For j:=0 to nx do

Writeln(output,abs(u2[j,k]-U0(x[j],t[k])));

Writeln(output);

Writeln(output,'-------');

Writeln(output);

{1}

Writeln(output,'maximaln. modul raznosti dlya 1-go poryadka');

k:=nt;

m:=0;

For j:=0 to nx do

begin

sr:=abs(u1[j,k]-U0(x[j],t[k]));

If m<sr

then m:=sr;

end;

Writeln(output,m);

{2}

Writeln(output,'maximaln. modul raznosti dlya 2-go poryadka');

k:=nt;

m:=0;

For j:=0 to nx do

begin

sr:=abs(u2[j,k]-U0(x[j],t[k])) ;

If m<sr

then m:=sr;

end;

Writeln(output,m);

Close(output);

Readln;

end.

Соседние файлы в папке 4. Волновое уравнение. Шаблон-крест