Чисельні методи

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Чисельні методи аналізу автоматичних систем
Варіант:
14

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка” / ЛАБОРАТОРНА РОБОТА № 10 з дисципліни: "Чисельні методи" на тему: «Метод Адамса розв’язання задачі Коші для диференціального рівняння першого порядку» ЛАБОРАТОРНА РОБОТА № 10 Тема роботи: Метод Адамса розв’язання задачі Коші для диференціального рівняння першого порядку. Мета роботи: Вивчити і засвоїти метод розв’язування задачі Коші методом Адамса. Варіант 24: Створити проект на певній мові програмування для розв’язання задачі Коші для диференціального рівняння першого порядку методом Адамса: 1. Розробити проект на певній мові програмування для розв’язання задачі Коші для диференціального рівняння першого порядку методом Адамса. 2. Обчислити розв’язок задачі Коші для диференціального рівняння першого порядку методом Адамса. 3. Порівняти отримані результати з розв’язком задачі Коші за методом Рунге-Кутта та зробити висновки. Визначити абсолютну та відносну похибку обчислення кожного методу. Обґрунтувати досягнення заданої точності.  Код програми: #include <Windows.h> #include <iostream> #include <cmath> using namespace std; double f(double x, double y) {return cos(1.5*x + y) + (x-y) ;} int main() { SetConsoleOutputCP(1251); cout << "ЛАБОРАТОРНА РОБОТА №10" << endl; double x0, y0, xn; double h, h_2; int n, n_2; double k1, k2, k3, k4; cout << "Введіть значення х0 та у0: "; cin >> x0 >> y0; cout << "Введіть xn: "; cin >> xn; cout << "Введіть крок: "; cin >> h; h_2 = h / 2; n = (int)(((xn - x0) / h) + 0.5); n++; n_2 = (int)(((xn - x0) / h_2) + 0.5); n_2++; double* x = new double[n]; double* y = new double[n]; double* x_h2 = new double[n_2]; double* y_h2 = new double[n_2]; for (int i = 0; i < n; i++) x[i] = x0 + h*i; for (int i = 0; i < n_2; i++) x_h2[i] = x0 + h_2*i; y[0] = y_h2[0] = y0; for (int j = 0; j < n - 1; j++) { k1 = f(x[j], y[j]); k2 = f(x[j] + h / 2, y[j] + k1 / 2); k3 = f(x[j] + h / 2, y[j] + k2 / 2); k4 = f(x[j] + h, y[j] + k3); y[j + 1] = y[j] + h / 6 * (k1 + 2 * k2 + 2 * k3 + k4); } for (int j = 0; j < n_2 - 1; j++) { k1 = f(x_h2[j], y_h2[j]); k2 = f(x_h2[j] + h_2 / 2, y_h2[j] + k1 / 2); k3 = f(x_h2[j] + h_2 / 2, y_h2[j] + k2 / 2); k4 = f(x_h2[j] + h_2, y_h2[j] + k3); y_h2[j + 1] = y_h2[j] + h_2 / 6 * (k1 + 2 * k2 + 2 * k3 + k4); } cout << "\nМетод Рунге-Кутта: " << endl; cout << "X\tY" << endl; for (int i = 0; i < n; i++) { cout << x[i] << "\t" << y[i] << endl; } cout << "Похибка методу: " << fabs((y_h2[n_2 - 1] - y[n - 1])) / (16 - 1) << endl << endl; for (int i = 3; i < n - 1; i++) y[i + 1] = y[i] + h / 24 * (55 * f(x[i], y[i]) - 59 * f(x[i - 1], y[i - 1]) + 37 * f(x[i - 2], y[i - 2]) - 9 * f(x[i - 3], y[i - 3])); for (int i = 3; i < n_2 - 1; i++) y_h2[i + 1] = y_h2[i] + h_2 / 24 * (55 * f(x_h2[i], y_h2[i]) - 59 * f(x_h2[i - 1], y_h2[i - 1]) + 37 * f(x_h2[i - 2], y_h2[i - 2]) - 9 * f(x_h2[i - 3], y_h2[i - 3])); cout << "\nМетод Адамса для: " << endl; cout << "X\tY" << endl; for (int i = 0; i < n; i++) { cout << x[i] << "\t" << y[i] << endl; } cout << "Похибка методу: " << fabs((y_h2[n_2 - 1] - y[n - 1])) / (16 - 1) << endl; delete[] y; delete[] x; delete[] x_h2; delete[] y_h2; system("pause>>void"); return 0; } Результат: // Висновок: В результаті виконання лабораторної роботи було вивчено метод Адамса для розв’язання задачі Коші для диференціальних рівнянь першого порядку. Було знайдено розв’язок диференційного рівняння:  На проміжку Х є [0;1]. Наприклад при х = 0.9 , у = 0.3115.
Антиботан аватар за замовчуванням

08.11.2018 17:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!