Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
/
ЛАБОРАТОРНА РОБОТА № 8
з дисципліни:
"Чисельні методи"
на тему:
«Розв’язування задачі Коші методом Рунге-Кутта »
ЛАБОРАТОРНА РОБОТА № 8
Тема роботи:
Розв’язування задачі Коші методом Рунге-Кутта.
Мета роботи:
Вивчити і засвоїти постановку та методи розв’язування задачі Коші. Навчитися досліджувати розв’язок , використовуючи метод Рунге-Кутта.
Варіант 24:
Застосовуючи чисельні методи розв’язування задачі Кошi, розв’язати диференцiальне рівняння першого порядку з точністю є =0.0001 на відрізку із кроком h= 0.05 i заданими початковими умовами , а також порівняти отриманий розв’язок із точним розв’язком y*, використовуючи правило Рунге. Провести дослідження точності обчислень від кількості кроків. Дослідити не менше 10 випадків. Використовуючи точний розв’язок, обґрунтувати необхідну кількість кроків для досягнення заданої точності на заданому у завданні проміжку.
/
Код програми:
#define _USE_MATH_DEFINES
#include <Windows.h>
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double f(double x, double y) { return y*y*pow(M_E,x) - 2*y ;}
double f1(double x, double y) {return 1/(pow(M_E,x) + pow(M_E,2*x));}
int main() {
SetConsoleOutputCP(1251);
cout << "ЛАБОРАТОРНА РОБОТА №8" << endl;
double x_n1, y_n1;
double x_n, y_n;
double x0, y0;
double h = 0.054, n;
double k1, k2, k3, k4;
double val_func;
cout << "Введіть значення х0 та у0: ";
cin >> x0 >> y0;
cout << "Крок\tX\t\tY\t\tІстинне значення\tПохибка" << endl;
for (int i = 0; i <= 10; i++) {
x_n = x0; y_n = y0;
h -= 0.004;
n = (int)((0.5 / h) + 0.5);
for (int j = 0; j < n; j++) {
k1 = f(x_n, y_n);
k2 = f(x_n + h / 2, y_n + k1 / 2);
k3 = f(x_n + h / 2, y_n + k2 / 2);
k4 = f(x_n + h, y_n + k3);
x_n1 = x_n + h;
y_n1 = y_n + h / 6 * (k1 + 2 * k2 + 2 * k3 + k4);
x_n = x_n1; y_n = y_n1;
}
val_func = f1(x_n, y_n);
cout << fixed << setprecision(3)<< h << setprecision(10) << "\t" << x_n << "\t" << y_n << "\t" << val_func << "\t\t";
cout << scientific <<fabs(val_func - y_n) << endl;
}
system("pause>>void");
return 0;
}
Результат:
/
Графік:
/
/
Висновок:
В результаті виконання лабораторної роботи було вивчено метод Рунге-Кутта для розв’язання задачі Коші диференціальних рівнянь. Також приведено графік залежності точності обчислень від кроку. З результатів роботи програми видно, що точність обчислень при різних кроках є
10
−2
.
Було знайдено розв’язок диференційного рівняння /у точці X = 0,5, Y = 0.345.