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

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

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

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

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

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

Программа/

Результат

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

Оценка

Группа: Ф-03

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

Выполнил: Иванов В.И.

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

Москва 2012 год

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

Для шага h=0.05

Точное решение задачи,

Численное решение задачи с аппроксимацией краевых условий с первым порядком точности,

Численное решение задачи с аппроксимацией краевых условий со вторым порядком точности,

0.000000

0.098749

0.194978

0.288647

0.379697

0.468062

0.553677

0.636480

0.716421

0.793463

0.867582

0.938775

1.007053

1.072445

1.134996

1.194765

1.251823

1.306255

1.358152

1.407612

1.454741

0.0000

0.1017

0.2007

0.2970

0.3905

0.4812

0.5690

0.6538

0.7356

0.8144

0.8901

0.9627

1.0323

1.0989

1.1625

1.2232

1.2811

1.3362

1.3887

1.4387

1.4863

0.000000

0.098776

0.195034

0.288731

0.379809

0.468201

0.553841

0.636667

0.716629

0.793688

0.867823

0.939028

1.007315

1.072714

1.135268

1.195039

1.252097

1.306526

1.358419

1.407874

1.454997

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

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

0.0E+00

2.9E-03

5.7E-03

8.3E-03

1.1E-02

1.3E-02

1.5E-02

1.7E-02

1.9E-02

2.1E-02

2.3E-02

2.4E-02

2.5E-02

2.6E-02

2.7E-02

2.8E-02

2.9E-02

3.0E-02

3.1E-02

3.1E-02

3.2E-02

0.0E+00

2.7E-05

5.6E-05

8.4E-05

1.1E-04

1.4E-04

1.6E-04

1.9E-04

2.1E-04

2.3E-04

2.4E-04

2.5E-04

2.6E-04

2.7E-04

2.7E-04

2.7E-04

2.7E-04

2.7E-04

2.7E-04

2.6E-04

2.6E-04

Для шага h=0.1

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

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

0.0E+00

1.2E-02

2.3E-02

3.2E-02

4.0E-02

4.7E-02

5.3E-02

5.8E-02

6.1E-02

6.4E-02

6.6E-02

0.0E+00

2.0E-04

4.1E-04

5.9E-04

7.5E-04

8.7E-04

9.4E-04

9.7E-04

9.7E-04

9.4E-04

8.9E-04

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

//1 poryadok approximacii

uses math ;

function p(x:real):real; //pered u'

begin

p:= 1/(1+x);

end;

function q(x:real):real; //pered u

begin

q:= 2/cosh(x)/cosh(x);

end;

function f(x:real):real; //posle znaka =

begin

f:= (1/(1+x)+2*ln(1+x)) /cosh(x)/cosh(x) ;

end;

function y0(x:real):real; //to4noe reshenye

begin

y0:= ln(1+x) + tanh(x);

end;

type mat=array[0..100] of real ;

var x,h:real;

n,i:integer;

f1:text;

t,x0,a,b:mat; {zadaem matricy, t - dlya koefficientov

a=t[0],b=t[1],c=t[2],d=t[3]

a,b,c - koefficienty treh diagonal'noy matricy);

x0 - dlya resheniy v tochkah;

a - dlya koefficientov A(i);

b - dlya koefficientov B(i); }

begin

assign(f1,'c:\out3-1.txt');

rewrite(f1);

h:=0.05; //shag

n:=20; // 1/h - chislo tochek

// approximaciya na levoi granice - zapicyvaem

// uravneniye a0*y(-1)+b0*y0+c0*y1=d0

t[0]:= 0.0; // a0 vsegda =0

t[1]:= 1.0; // b0

t[2]:= 0.0; // c0

t[3]:= 0.0; // d0

a[0]:=-t[2]/t[1]; //A(0) i B(0) pered pryamym hodom

b[0]:=t[3]/t[1];

// Pryamoi hod

for i:=1 to n-1 do

begin

t[0]:=(1/(h*h))-p(i*h)/(2*h);

t[1]:=-2/(h*h)+q(i*h);

t[2]:=1/(h*h)+p(i*h)/(2*h);

t[3]:=f(i*h); {ai,bi,ci,di}

a[i]:=-t[2]/(t[1]+t[0]*a[i-1]);{A(i)}

b[i]:=(t[3]-t[0]*b[i-1])/(t[1]+t[0]*a[i-1]);{B(i)}

end;

// approximaciya na pravoi granice - zapicyvaem

// uravneniye an*y(n-1)+bn*yn+cn*y(n+1)=dn

t[0]:= 1.0 ; // an

t[1]:= h-1 ; // bn

t[2]:= 0.0 ; // cn = 0

t[3]:=0.5348*h; // dn

//Obratny hod

a[n]:=0; {A(n)=0! iz lekcii}

b[n]:=(t[3]-t[0]*b[n-1])/(t[1]+t[0]*a[n-1]);

x0[n]:=b[n];

for i:=n-1 downto 0 do

x0[i]:=a[i]*x0[i+1]+b[i];

// Vyvod polychennyh znacheny

writeln(f1,' y u0 y[i]-u0[i]');

writeln(f1,' ') ;

for i:=0 to n do

writeln(f1,x0[i]:1:4,' ',y0(h*i):1:6,' ',(x0[i]-y0(h*i)):1:6);

close(f1);

readln;

end.

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

//2 poryadok approximacii

uses math ;

function p(x:real):real; //pered u'

begin

p:= 1/(1+x);

end;

function q(x:real):real; //pered u

begin

q:= 2/cosh(x)/cosh(x);

end;

function f(x:real):real; //posle znaka =

begin

f:= (1/(1+x)+2*ln(1+x)) /cosh(x)/cosh(x) ;

end;

function y0(x:real):real; //to4noe reshenye

begin

y0:= ln(1+x) + tanh(x);

end;

type mat=array[0..100] of real ;

var x,h:real;

n,i:integer;

f1:text;

t,x0,a,b:mat; {zadaem matricy, t - dlya koefficientov

a=t[0],b=t[1],c=t[2],d=t[3]

(a,b,c - koefficienty treh diagonal'noy matricy);

x0 - dlya resheniy v tochkah;

a - dlya koefficientov A(i);

b - dlya koefficientov B(i); }

begin

assign(f1,'c:\out3-2.txt');

rewrite(f1);

h:=0.05; //shag

n:=20; // 1/h - chislo tochek

// approximaciya na levoi granice - zapicyvaem

// uravneniye a0*y(-1)+b0*y0+c0*y1=d0

t[0]:= 0.0; // a0 vsegda =0

t[1]:= 1.0; // b0

t[2]:= 0.0; // c0

t[3]:= 0.0; // d0

a[0]:=-t[2]/t[1]; //A(0) i B(0) pered pryamym hodom

b[0]:=t[3]/t[1];

// Pryamoi hod

for i:=1 to n-1 do

begin

t[0]:=(1/(h*h))-p(i*h)/(2*h);

t[1]:=-2/(h*h)+q(i*h);

t[2]:=1/(h*h)+p(i*h)/(2*h);

t[3]:=f(i*h); {ai,bi,ci,di}

a[i]:=-t[2]/(t[1]+t[0]*a[i-1]);{A(i)}

b[i]:=(t[3]-t[0]*b[i-1])/(t[1]+t[0]*a[i-1]);{B(i)}

end;

// approximaciya na pravoi granice - zapicyvaem

// uravneniye an*y(n-1)+bn*yn+cn*y(n+1)=dn

t[0]:= 1.0 ; // an

t[1]:= h*h/2*(p(1)+q(1)) + h-1; // bn

t[2]:= 0.0 ; // cn = 0

t[3]:=0.5348*h + h*h/2*(f(1)+0.5348*p(1)) ; // dn

//Obratny hod

a[n]:=0; {A(n)=0! iz lekcii}

b[n]:=(t[3]-t[0]*b[n-1])/(t[1]+t[0]*a[n-1]);

x0[n]:=b[n];

for i:=n-1 downto 0 do

x0[i]:=a[i]*x0[i+1]+b[i];

// Vyvod polychennyh znacheny

writeln(f1,' y u0 y[i]-u0[i]');

writeln(f1,' ') ;

for i:=0 to n do

writeln(f1,x0[i]:1:6,' ',y0(h*i):1:6,' ',(x0[i]-y0(h*i)):1:6);

close(f1);

readln;

end.

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