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

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

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

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

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

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

Программа/

Результат

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

Оценка

Группа: Ф-03

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

Выполнил:

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

Москва 2012 год

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

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

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

Для шага h=0.05

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

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

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

-1.0000000

-1.0487732

-1.0952041

-1.1395008

-1.1819236

-1.2227808

-1.2624218

-1.3012314

-1.3396221

-1.3780279

-1.4168975

-1.4566893

-1.4978671

-1.5408969

-1.5862445

-1.6343742

-1.6857482

-1.7408269

-1.8000695

-1.8639350

-1.9328837

-0.99207

-1.04207

-1.08968

-1.13512

-1.17864

-1.22055

-1.26121

-1.30100

-1.34033

-1.37965

-1.41940

-1.46004

-1.50205

-1.54588

-1.59201

-1.64090

-1.69301

-1.74882

-1.80877

-1.87333

-1.94296

-1.000569

-1.049321

-1.095728

-1.139999

-1.182395

-1.223222

-1.262833

-1.301610

-1.339968

-1.378339

-1.417173

-1.456928

-1.498068

-1.541060

-1.586368

-1.634457

-1.685789

-1.740824

-1.800022

-1.863840

-1.932740

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

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

7.93E-03

6.70E-03

5.52E-03

4.38E-03

3.29E-03

2.23E-03

1.21E-03

2.35E-04

7.09E-04

1.62E-03

2.50E-03

3.35E-03

4.18E-03

4.98E-03

5.76E-03

6.52E-03

7.27E-03

7.99E-03

8.70E-03

9.39E-03

1.01E-02

5.69E-04

5.48E-04

5.24E-04

4.98E-04

4.71E-04

4.42E-04

4.11E-04

3.79E-04

3.45E-04

3.11E-04

2.75E-04

2.39E-04

2.01E-04

1.63E-04

1.23E-04

8.24E-05

4.05E-05

2.95E-06

4.79E-05

9.47E-05

1.43E-04

Для шага h=0.1 приведена только вторая таблица.

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

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

1.52E-02

1.04E-02

5.96E-03

1.88E-03

1.87E-03

5.35E-03

8.59E-03

1.16E-02

1.45E-02

1.72E-02

1.98E-02

2.28E-03

2.10E-03

1.89E-03

1.65E-03

1.39E-03

1.11E-03

8.12E-04

5.01E-04

1.71E-04

1.81E-04

5.62E-04

Код с 1 порядком

#include<stdio.h>

#include<math.h>

#include<conio.h>

double h= 0.10 , lbnd= 0.0, rbnd= 1.0; //шаг и границы отрезка

const int n = 10; // равно 1/h

double p(double x) {

return 2.0*x/(1.0+x*x) ;

}

double q(double x) {

return -2.0/(1.0+x*x) ;

}

double f(double x) {

return (2.0+(1.0-2.0*x-x*x)*exp(x)) / (1.0+x*x) ;

}

double u0(double x) {

return x*atan(x)-exp(x) ;

}

void Progon (double *a, double *b, double *c, double *d, double *y)

{

double A[n], B[n]; //прогоночные коэффициенты

// Прямой ход

A[0]= -c[0]/b[0] ; B[0]= d[0]/b[0] ;

for (int i=1; i< n; i++) {

A[i]= -c[i]/(b[i] + a[i]*A[i-1]) ;

B[i]= (d[i] - a[i]*B[i-1])/(b[i] + a[i]*A[i-1]) ;

}

// Обратный ход

y[n]= (d[n]-a[n]*B[n-1]) / (b[n]+a[n]*A[n-1]) ;

for (int i= n-1; i>= 0; i--) {

y[i]= A[i]*y[i+1] + B[i] ;

}

}

int main()

{

double xi, y[n], a[n], b[n], c[n], d[n] ;

//Производная во внутренних точках аппроксимирована со 2 порядком точности (не менять)

xi= lbnd + h ;

for (int i= 1; i< n; i++) {

a[i]= 1/h/h - p(xi)/2/h ;

b[i]= q(xi) - 2/h/h ;

c[i]= 1/h/h + p(xi)/2/h ;

d[i]= f(xi) ;

xi += h ;

}

//Коэффициенты для левой границы аппроксимированы с 1ой точностью, a[0]=0:

a[0]=0.0; b[0]= 1.0 ;

c[0]=-1.0; d[0]= h ;

//Коэффициенты для правой границы аппроксимированы с 1ой точностью, c[n]=0:

a[n]= 1.0; b[n]=-1.0-4.0*h ;

c[n]= 0.0; d[n]= 9.1644*h ;

Progon(a, b, c, d, y) ; //в массиве y окажутся численные значения решения

FILE *file;

file = fopen("c:/3-1Vova.txt", "w");

xi= lbnd;

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

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

for (int i= 0; i<= n; i++) {

printf("%.2f %.10f %.10f %.2e\n", xi, u0(xi), y[i], abs(y[i]-u0(xi)) ) ;

fprintf(file, "%.2f %.10f %.10f %.2e\n", xi, u0(xi), y[i], abs(y[i]-u0(xi)) ) ;

xi += h ;

}

getch();

return 0;

}

Код со 2 порядком

#include<stdio.h>

#include<math.h>

#include<conio.h>

double h= 0.10 , lbnd= 0.0, rbnd= 1.0; //шаг и границы отрезка

const int n = 10; // равно (rbnd-lbnd)/h

double p(double x) {

return 2.0*x/(1.0+x*x) ;

}

double q(double x) {

return -2.0/(1.0+x*x) ;

}

double f(double x) {

return (2.0+(1.0-2.0*x-x*x)*exp(x)) / (1.0+x*x) ;

}

double u0(double x) {

return x*atan(x)-exp(x) ;

}

void Progon (double *a, double *b, double *c, double *d, double *y)

{

double A[n], B[n]; //прогоночные коэффициенты

// Прямой ход

A[0]= -c[0]/b[0] ; B[0]= d[0]/b[0] ;

for (int i=1; i< n; i++) {

A[i]= -c[i]/(b[i] + a[i]*A[i-1]) ;

B[i]= (d[i] - a[i]*B[i-1])/(b[i] + a[i]*A[i-1]) ;

}

// Обратный ход

y[n]= (d[n]-a[n]*B[n-1]) / (b[n]+a[n]*A[n-1]) ;

for (int i= n-1; i>= 0; i--) {

y[i]= A[i]*y[i+1] + B[i] ;

}

}

int main()

{

double xi, y[n], a[n], b[n], c[n], d[n] ;

xi= lbnd + h ;

for (int i= 1; i< n; i++) {

a[i]= 1/h/h - p(xi)/2/h ;

b[i]= q(xi) - 2/h/h ;

c[i]= 1/h/h + p(xi)/2/h ;

d[i]= f(xi) ;

xi += h ;

}

//Коэффициенты для левой границы аппроксимированы с 2ой точностью, a[0]=0:

a[0]=0.0; b[0]=1.0+h*h;

c[0]=-1.0; d[0]=h-1.5*h*h;

//Коэффициенты для правой границы аппроксимированы с 2ой точностью, c[n]=0:

a[n]=1.0; b[n]=-1.0-4.0*h-2.5*h*h;

c[n]=0.0; d[n]=9.1644*h+h*h/2.0*7.4461;

Progon(a, b, c, d, y) ; //в массиве y окажутся численные значения решения

FILE *file;

file = fopen("c:/3-2Vova.txt", "w");

xi= lbnd;

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

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

for (int i= 0; i<= n; i++) {

printf("%.2f %.10f %.10f %.2e\n", xi, u0(xi), y[i], abs(y[i]-u0(xi)) ) ;

fprintf(file, "%.2f %.10f %.10f %.2e\n", xi, u0(xi), y[i], abs(y[i]-u0(xi)) ) ;

xi += h ;

}

getch();

return 0;

}

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