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

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

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

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

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

«ЧИСЛЕННОЕ РЕШЕНИЕ СМЕШАННОЙ КРАЕВОЙ ЗАДАЧИ ДЛЯ ВОЛНОВОГО УРАВНЕНИЯ»

Программа/

Результат

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

Оценка

Группа: Ф-0

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

Выполнил:

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

Москва 2012 год

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

2. График точного решения для различных мо-ментов времени:

3. Результаты, полученные при выполнении лабораторной работы:

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

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

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

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

Аппроксимация 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

1.683781

1.737853

1.787611

1.832926

1.873658

1.909583

1.940228

1.964828

1.983105

1.996139

2.005045

2.008958

2.007299

2.001049

1.989696

1.973186

1.951995

1.925702

1.894751

1.858976

1.818595

1.689859

1.742139

1.790122

1.833666

1.872678

1.906979

1.936310

1.960252

1.978626

1.991986

2.000864

2.004802

2.003544

1.997593

1.986662

1.970696

1.949938

1.924194

1.893721

1.858470

1.818595

1.682942

1.734846

1.782415

1.825528

1.864078

1.897969

1.927116

1.951447

1.970899

1.985426

1.994990

1.999568

1.999147

1.993730

1.983330

1.967972

1.947695

1.922550

1.892600

1.857919

1.818595

8.39E-04

3.01E-03

5.20E-03

7.40E-03

9.58E-03

1.16E-02

1.31E-02

1.34E-02

1.22E-02

1.07E-02

1.01E-02

9.39E-03

8.15E-03

7.32E-03

6.37E-03

5.21E-03

4.30E-03

3.15E-03

2.15E-03

1.06E-03

0.00E+00

6.92E-03

7.29E-03

7.71E-03

8.14E-03

8.60E-03

9.01E-03

9.19E-03

8.81E-03

7.73E-03

6.56E-03

5.87E-03

5.23E-03

4.40E-03

3.86E-03

3.33E-03

2.72E-03

2.24E-03

1.64E-03

1.12E-03

5.51E-04

0.00E+00

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

при t = 1.0

1.34e-2

9.19e-3

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

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

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

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

Аппроксимация 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

1.785966

1.742720

1.695298

1.644261

1.589128

1.529766

1.467762

1.402988

1.334158

1.261298

1.184304

1.103942

1.020727

0.934848

0.846793

0.756557

0.664554

0.570829

0.475744

0.379456

0.282240

1.817651

1.773946

1.725891

1.673379

1.616878

1.556668

1.493054

1.425625

1.354045

1.278787

1.200032

1.118236

1.033661

0.946468

0.856958

0.765205

0.671543

0.576126

0.479295

0.381257

0.282240

1.818595

1.774725

1.726419

1.673798

1.616993

1.556146

1.491410

1.422947

1.350926

1.275529

1.196944

1.115367

1.031003

0.944061

0.854760

0.763322

0.669976

0.574956

0.478499

0.380845

0.282240

3.26E-02

3.20E-02

3.11E-02

2.95E-02

2.79E-02

2.64E-02

2.36E-02

2.00E-02

1.68E-02

1.42E-02

1.26E-02

1.14E-02

1.03E-02

9.21E-03

7.97E-03

6.76E-03

5.42E-03

4.13E-03

2.75E-03

1.39E-03

0.00E+00

9.44E-04

7.79E-04

5.27E-04

4.18E-04

1.15E-04

5.21E-04

1.64E-03

2.68E-03

3.12E-03

3.26E-03

3.09E-03

2.87E-03

2.66E-03

2.41E-03

2.20E-03

1.88E-03

1.57E-03

1.17E-03

7.97E-04

4.11E-04

0.00E+00

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

при t = 2.0

3.26e-2

3.26e-3

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

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

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

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

Аппроксимация 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.149746

0.048506

-0.052576

-0.153672

-0.253810

-0.353421

-0.451929

-0.548837

-0.644634

-0.738341

-0.829909

-0.919514

-1.006551

-1.090462

-1.171732

-1.249917

-1.323840

-1.393383

-1.458890

-1.520196

-1.577051

0.178771

0.078682

-0.021681

-0.122007

-0.222062

-0.321571

-0.420178

-0.517832

-0.614152

-0.708715

-0.801727

-0.892595

-0.981008

-1.067064

-1.150505

-1.230709

-1.307553

-1.381123

-1.450914

-1.516268

-1.577051

0.182929

0.083161

-0.016814

-0.116748

-0.216390

-0.315491

-0.413804

-0.511082

-0.607083

-0.701566

-0.794296

-0.885041

-0.973573

-1.059672

-1.143123

-1.223716

-1.301250

-1.375532

-1.446376

-1.513605

-1.577051

3.32E-02

3.47E-02

3.58E-02

3.69E-02

3.74E-02

3.79E-02

3.81E-02

3.78E-02

3.76E-02

3.68E-02

3.56E-02

3.45E-02

3.30E-02

3.08E-02

2.86E-02

2.62E-02

2.26E-02

1.79E-02

1.25E-02

6.59E-03

0.00E+00

4.16E-03

4.48E-03

4.87E-03

5.26E-03

5.67E-03

6.08E-03

6.37E-03

6.75E-03

7.07E-03

7.15E-03

7.43E-03

7.55E-03

7.43E-03

7.39E-03

7.38E-03

6.99E-03

6.30E-03

5.59E-03

4.54E-03

2.66E-03

0.00E+00

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

при t = 3.0

3.81e-2

7.55e-3

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

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

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

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

Аппроксимация 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

-1.817226

-1.780609

-1.739422

-1.694650

-1.646767

-1.594752

-1.538983

-1.479601

-1.417123

-1.352154

-1.285043

-1.215228

-1.141826

-1.065444

-0.986053

-0.903548

-0.819046

-0.732371

-0.643657

-0.553737

-0.462156

-1.878195

-1.842359

-1.802061

-1.757473

-1.708582

-1.655387

-1.598138

-1.537436

-1.473575

-1.405960

-1.334675

-1.259845

-1.181531

-1.099917

-1.015427

-0.928402

-0.838841

-0.747255

-0.653875

-0.558642

-0.462156

-1.887097

-1.851629

-1.811533

-1.766909

-1.717869

-1.664535

-1.607040

-1.545529

-1.480155

-1.411081

-1.338480

-1.262533

-1.183431

-1.101371

-1.016558

-0.929204

-0.839528

-0.747753

-0.654110

-0.558831

-0.462156

6.99E-02

7.10E-02

7.21E-02

7.23E-02

7.11E-02

6.98E-02

6.81E-02

6.59E-02

6.30E-02

5.89E-02

5.34E-02

4.73E-02

4.16E-02

3.59E-02

3.05E-02

2.57E-02

2.05E-02

1.54E-02

1.05E-02

5.09E-03

0.00E+00

8.90E-03

9.27E-03

9.47E-03

9.44E-03

9.29E-03

9.15E-03

8.90E-03

8.09E-03

6.58E-03

5.12E-03

3.80E-03

2.69E-03

1.90E-03

1.45E-03

1.13E-03

8.02E-04

6.87E-04

4.98E-04

2.34E-04

1.89E-04

0.00E+00

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

при t = 5.0

7.23e-2

9.47e-3

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

(Синий – 1 порядок; красный – 2 порядок)

На графиках:

  • Синий – 1 порядок аппроксимации;

  • Красный – 2 порядок;

  • зелёный– точное значение.

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

#include<stdio.h>

#include<math.h>

#include<conio.h>

double aa=0.5, a1=1.0, b1=-1.0, a2=1.0, b2=0.0 ; //коэффициенты в уравнениях

double h=.05, tau=.05, T=5.0 ; //шаг по x и по t, T - макс. знач. времени

const int N=20 ; //количество шагов по X, равно 1/h

double f(double x, double t) {

return -sin(x+t) ;

}

double v1(double x) {

return 2.0*sin(x) ;

}

double v2(double x) {

return 2.0*cos(x) ;

}

double w1(double t) {

return 2.0*(sin(t)-cos(t)) ;

}

double w2(double t) {

return 2.0*sin(1+t) ;

}

double u0(double x, double t) {

return 2.0*sin(x+t) ;

}

int main() {

double t=0, K,L ; //K,L - константы

double xk[N+1], xk0[N+1], xk1[N+1] ;

int j ;

//Начальные условия аппрокс. до 1 порядка

for (j=0; j<=N; j++) { //рассчитываем 1 и 2 строчки вдоль X, чтобы

xk0[j]= v1(j*h) ; // запустить основной цикл

xk[j]= xk0[j] + tau*v2(j*h) ;

} xk[N]= w2(tau); //кр. условие справа I рода

t=tau ; K=aa*tau*tau/h/h; L=tau*tau ;

while (t<T) { //основной цикл - сечение функции u(x;t) в фикс. моменты времени

//t - момент времени, соответств. k-ой строке

for (j=1; j<N; j++) { // точки с x=0 и x=1 не покрываются верхушкой креста

// Основная формула для элемента u^(k+1)_j, j=1,..,N-1

xk1[j]= K*xk[j+1] + 2*(1-K)*xk[j] + K*xk[j-1] - xk0[j] + L*f(j*h,t) ; } //f считается в центре креста

t += tau ; //t - время на k+1 слое

// Краевые условия аппроксимированы до 1 порядка

xk1[0]= (xk1[1]+h*w1(t))/(1.0+h) ;

xk1[N]= w2(t) ;

for (j=0; j<=N; j++) {

xk0[j]= xk[j] ;

xk[j]= xk1[j] ;

}

}

FILE *file ;

file = fopen("c:/4.txt", "w");

printf(" x y(x) u0 |y-u0| \n") ;

fprintf(file," x y(x) u0 |y-u0| \n") ;

for (j=0; j<=N; j++) { //значения по X в конечный момент времени

printf("%.2f %.6f %.6f %.2e\n", j*h, xk1[j], u0(j*h,t), abs(xk1[j]-u0(j*h,t)) ) ;

fprintf(file,"%.2f %.6f %.6f %.2e\n", j*h, xk1[j], u0(j*h,t), abs(xk1[j]-u0(j*h,t)) ) ;

}

fclose(file) ;

getch();

return 0;

}

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

/* Шаблон - крест, явная схема. */

#include<stdio.h>

#include<math.h>

#include<conio.h>

double aa=0.5, a0=1.0, b0=-1.0, a1=1.0, b1=0.0 ; //коэффициенты в уравнениях

double h=.05, tau=.05, T=5.0 ; //шаг по x и по t, T - макс. знач. времени

const int N= 20 ; //количество шагов по X, равно 1/h

double f(double x, double t) {

return -sin(x+t) ;

}

double v1(double x) {

return 2.0*sin(x) ;

}

double v2(double x) {

return 2.0*cos(x) ;

}

double w0(double t) {

return 2.0*(sin(t)-cos(t)) ;

}

double w1(double t) {

return 2.0*sin(1+t) ;

}

double u0(double x, double t) {

return 2.0*sin(x+t) ;

}

double p2v1(double x) { //Вторая производная u(x;0)

return -2.0*sin(x) ;

}

int main() {

double t=0, C,L ; //C,L - константы

double xk[N+1], xk0[N+1], xk1[N+1] ;

int j ;

//Начальное условие аппрокс. до 2 порядка

for (j=0; j<=N; j++) { //рассчитываем 1 и 2 строчки вдоль X, чтобы

xk0[j]= v1(j*h) ; // запустить основной цикл

xk[j]= xk0[j] + tau*v2(j*h) + tau*tau/2.0*(aa*p2v1(j*h)+f(j*h,0));

} xk[N]= w1(tau);//кр. условие справа I рода

t= tau ; C= aa*tau*tau/h/h; L= tau*tau ;

while (t<T) { //основной цикл - сечение функции u(x;t) в фикс. моменты времени

//t - момент времени, соответств. k-ой строке

for (j=1; j<N; j++) { // точки с x=0 и x=1 не покрываются верхушкой креста

// Основная формула для элемента u^(k+1)_j, j=1,..,N-1

xk1[j]= C*xk[j+1] + 2*(1-C)*xk[j] + C*xk[j-1] - xk0[j] + L*f(j*h,t) ; } //f считается в центре креста

t += tau ; //время на (k+1) слое

// Краевые условия аппроксимированы до 2 порядка

xk1[0]= tau*tau/h/h*(xk[1]-(1.0+h)*xk[0])+tau*tau/h*w0(t-tau)+2.0*xk[0]-xk0[0]+tau*tau*f(0,t-tau);

// 2.0*(1.0+C*(a0/b0*h-1.0))*xk[0]-xk0[0]+2.0*C*xk[1]+L*f(0,t)-2.0*C*h/b0*w0(t);

xk1[N]= w1(t) ;

for (j=0; j<=N; j++) {

xk0[j]= xk[j] ;

xk[j]= xk1[j] ;

}

}

FILE *file ;

file = fopen("c:/4.txt", "w");

printf(" x y(x) u0 |y-u0| \n") ;

fprintf(file," x y(x) u0 |y-u0| \n") ;

for (j=0; j<=N; j++) { //значения по X в конечный момент времени

printf("%.2f %.6f %.6f %.2e\n", j*h, xk1[j], u0(j*h,t), abs(xk1[j]-u0(j*h,t)) ) ;

fprintf(file,"%.2f %.6f %.6f %.2e\n", j*h, xk1[j], u0(j*h,t), abs(xk1[j]-u0(j*h,t)) ) ;

}

fclose(file);

getch();

return 0;

}

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