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

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

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

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

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

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

Программа/

Результат

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

Оценка

Группа: Ф6-0

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

Выполнила:

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

Москва 2012 год

1. Полная постановка задачи:

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

Для шага h=0.05

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

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

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

1.00000

1.00121

1.00469

1.01022

1.01764

1.02677

1.03748

1.04964

1.06315

1.07792

1.09387

1.11093

1.12906

1.14820

1.16833

1.18941

1.21143

1.23438

1.25825

1.28304

1.30876

1.0198

1.0198

1.0222

1.0266

1.0330

1.0411

1.0508

1.0621

1.0747

1.0886

1.1037

1.1200

1.1374

1.1558

1.1752

1.1956

1.2170

1.2393

1.2626

1.2869

1.3121

0.99950

1.00070

1.00420

1.00980

1.01730

1.02640

1.03720

1.04940

1.06290

1.07770

1.09370

1.11070

1.12890

1.14810

1.16820

1.18930

1.21130

1.23430

1.25820

1.28300

1.30870

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

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

1.98E-02

1.86E-02

1.75E-02

1.64E-02

1.53E-02

1.43E-02

1.34E-02

1.24E-02

1.15E-02

1.07E-02

9.85E-03

9.06E-03

8.30E-03

7.57E-03

6.87E-03

6.20E-03

5.56E-03

4.95E-03

4.37E-03

3.82E-03

3.29E-03

5.23E-04

4.83E-04

4.45E-04

4.09E-04

3.75E-04

3.43E-04

3.13E-04

2.84E-04

2.57E-04

2.32E-04

2.08E-04

1.86E-04

1.64E-04

1.45E-04

1.26E-04

1.09E-04

9.30E-05

7.80E-05

6.50E-05

5.20E-05

4.10E-05

Для шага h=0.1

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

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

3.97E-02

3.50E-02

3.07E-02

2.68E-02

2.32E-02

1.98E-02

1.67E-02

1.39E-02

1.12E-02

8.85E-03

6.69E-03

2.09E-03

1.78E-03

1.50E-03

1.25E-03

1.03E-03

8.32E-04

6.57E-04

5.04E-04

3.71E-04

2.58E-04

1.63E-04

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

//1 poryadok approximacii

uses math ;

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

begin

p:= cosh(x);

end;

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

begin

q:= sinh(x);

end;

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

begin

f:= cosh(x)+x*sinh(x) ;

end;

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

begin

y0:= x+exp(-sinh(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);

chto za koefficienty? - smotret' lekcii! }

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; // b0

t[2]:= -1; // c0

t[3]:= 0.0; // d0

// Pryamoi hod

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

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

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]:=-1-6*h ; // bn

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

t[3]:=-8.376104*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,' ',abs(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:= cosh(x);

end;

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

begin

q:= sinh(x);

end;

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

begin

f:= cosh(x)+x*sinh(x) ;

end;

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

begin

y0:= x+exp(-sinh(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);

chto za koefficienty? - smotret' lekcii! }

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-h*h/2*q(0); // b0

t[2]:= -1; // c0

t[3]:= -h*h/2*f(0); // d0

// Pryamoi hod

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

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

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]:=-1-6*h+h*h/2*(q(1)-6*p(1)) ; // bn

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

t[3]:=-8.376104*h+h*h/2*(f(1)-8.376104*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:4,' ',y0(h*i):1:6,' ',abs(x0[i]-y0(h*i)):1:6);

close(f1);

readln;

end.

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