
Програмки с отчётами по числакам / 2. Задача Коши для ОДУ 2 порядка / 2. Вар 3
.docxМинистерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение Высшего профессионального образования
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ
Отчет по лабораторной работе № 2
«ЧИСЛЕННОЕ РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ ЛИНЕЙНОГО ОБЫКНОВЕННОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ВТОРОГО ПОРЯДКА»
Программа/ Результат |
Теоретический материал |
Оценка |
|
|
|
Группа: Ф-03
Курс: Численные методы
Выполнил:
Преподаватель: Рябов Павел Николаевич
Москва 2012 год
-
Решаем уравнение
2. График
точного решения
:
3. Ниже приведены результаты, полученные при выполнении лабораторной работы.
Метод Эйлера h = 0,05 |
Метод Рунге-Кутты 4, c h= 0.1 |
Метод Рунге-Кутты 4, c h= 0.05 |
Поправка Рунге ΔuР для метода Рунге –Кутты 4 |
Точное решение u0(x) в узлах сетки |
uЭ0= 1,0 uЭ1= 1,0500 uЭ2= 1,0975 . . . uЭN= 1,4178 |
u1РК0= 1,0
u1РК1= 1,094837637 u1РК2= 1,178736013 . . u1РКN= 1,381773857 |
u2РК0= 1,0 u2РК1= 1,048729431 u2РК2= 1,094837585 . . . u2РКN= 1,38177333 |
Δu0= 0
Δu1= -3.45e-9 Δu2= -6.56e-9
. ΔuN= -3.55e-8
|
u0= 1,000000000 u1= 1,048729430 u2= 1,094837582 . . . uN= 1,381773291 |
Погрешность
метода в каждом узле расчётной области
(шаг
).
Результаты занесены в таблицу.
Модуль разности решения по методу Эйлера и точного решения, |
Модуль
разности решения по методу РК4 с h=0.1
и точного решения, |
Модуль
разности решения по методу РК4 с h=0.05
и точного решения, |
|
||||||||||
0,0 1,27 e-3 2,66 e-3 4,17 e-3 5,77 e-3 7,47 e-3 9,24 e-3 1,11 e-2 1,30 e-2 1,49 e-2 1,69 e-2 1,89 e-2 2,10 e-2 2,30 e-2 2,50 e-2 2,70 e-2 2,89 e-2 3,08 e-2 3,26 e-2 3,44 e-2 3,60 e-2
|
0,0
5,51 e-8
1,05 e-7
1,52 e-7
1,98 e-7
2,46 e-7
2,98 e-7
3,54 e-7
4,18 e-7
4,88 e-7
5,67 e-7 |
0,0 1,73 e-9 3,36 e-9 4,90 e-9 6,39 e-9 7,83 e-9 9,25 e-9 1,07 e-8 1,21 e-8 1,35 e-8 1,50 e-8 1,66 e-8 1,82 e-8 1,99 e-8 2,17 e-8 2,36 e-8 2,55 e-8 2,76 e-8 2,98 e-8 3,22 e-8 3,46 e-8 |
0,0
|
Метод Эйлера
/* Method Eilera */
#include<stdio.h>
#include<math.h>
#include<conio.h>
double p(double x) {
return cos(x) ;
}
double q(double x) {
return sin(x) ;
}
double f(double x) {
return 1-cos(x)-sin(x) ;
}
double u0(double x) {
return sin(x)+cos(x) ;
}
double y_0 =1, y_1 =1; //нач. условия
double h =0.05, lbnd= 0.0, rbnd= 1.0; //шаг и границы отрезка
int main()
{
double xi=lbnd, zi=y_1, zi1, yi=y_0, yi1 ;
printf(" x u0 (x) y(x) |y-u0| \n\n") ;
while (xi < rbnd) {
zi1 = zi + h * (f(xi) - p(xi)*zi - q(xi)*yi) ;
yi1 = yi + h * zi ;
printf("%.3f %.10f %.10f %.2e\n", xi, u0(xi), yi, abs(yi-u0(xi)) ) ;
zi = zi1 ; yi = yi1 ; xi = xi + h ;
} printf("%.3f %.10f %.10f %.2e\n", xi, u0(xi), yi, abs(yi-u0(xi)) ); //на правой границе
getch();
return 0;
}
Метод Рунге–Кутты 4 порядка p
/* Method Runge-Kutty 4 poryadka */
#include<stdio.h>
#include<math.h>
#include<conio.h>
double p(double x) {
return cos(x) ;
}
double q(double x) {
return sin(x) ;
}
double f(double x) {
return (1-cos(x)-sin(x)) ;
}
double u0(double x) {
return sin(x)+cos(x) ;
}
double y_0 =1, y_1 =1; //нач. условия
double h= 0.05, lbnd= 0.0, rbnd= 1.0; //шаг и границы отрезка
int main()
{
double xi=lbnd, yi=y_0, yi1, zi=y_1, zi1 ;
double K1, K2, K3, K4, Q1, Q2, Q3, Q4 ;
printf(" x u0 (x) y(x) |y-u0| \n\n");
while (xi < rbnd) {
// K для ∆y, Q для ∆z
K1= h*zi ;
Q1= h* (f(xi) - p(xi)*zi - q(xi)*yi) ;
K2= h*(zi + Q1/2) ;
Q2= h* ( f(xi+h/2) - p(xi+h/2)*(zi+Q1/2) - q(xi+h/2)*(yi + K1/2) );
K3= h*(zi + Q2/2) ;
Q3= h* ( f(xi+h/2) - p(xi+h/2)*(zi+Q2/2) - q(xi+h/2)*(yi + K2/2) ) ;
K4= h*(zi + Q3) ;
Q4= h* ( f(xi+h) - p(xi+h)*(zi+Q3) - q(xi+h)*(yi+K3) ) ;
yi1= yi + (K1+2*(K2+K3)+K4)/6 ;
zi1 = zi + (Q1+2*(Q2+Q3)+Q4)/6 ;
printf("%.3f %.10f %.10f %.2e\n", xi, u0(xi), yi, abs(yi-u0(xi)) ) ;
zi = zi1 ; yi = yi1 ; xi = xi + h ;
} printf("%.3f %.10f %.10f %.2e\n", xi, u0(xi), yi, abs(yi-u0(xi)) ) ;
getch();
return 0;
}