Метод Адамса розв’язання задачі Коші для диференціального рівняння першого порядку

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ <<ЛЬВІВСЬКА ПОЛІТЕХНІКА>> Інститут ІКНІ Кафедра автоматизовані системи управління ГРАФІКО-РОЗРАХУНКОВА РОБОТА на тему “Метод Адамса розв’язання задачі Коші для диференціального рівняння першого порядку” З курсу “Чисельні методи” ЗАВДАННЯ: Створити проект на певній мові програмування для розв’язання задачі Коші для диференціального рівняння першого порядку методом Адамса: 1. Розробити проект на певній мові програмування для розв’язання задачі Коші для диференціального рівняння першого порядку методом Адамса. 2. Обчислити розв’язок задачі Коші для диференціального рівняння першого порядку методом Адамса. 3. Порівняти отримані результати з розв’язком задачі Коші за методом Рунге-Кутта та зробити висновки. Визначити абсолютну та відносну похибку обчислення кожного методу. Обґрунтувати досягнення заданої точності. 4. Оформити звіт. Оскільки я 27 варіант, але завдань хватає лише на 25, тому я взяв завдання з другого варіанту. 2.  Відомості та алгоритм Метод Адамса — група методів чисельного інтегрування звичайних диференційних рівнянь, які дозволяють обчислювати таблицю наближених значень розв'язку за даними в початкових точках. Він є багатокроковим. В однокрокових методах для обчислення значения уn+1 використовується значения тільки уn і для підвищення точності при фіксованому кроці необхідно проводити обчислення великої кількості допоміжних величин. Це є причиною того, що для багатьох задач застосування формул Рунге-Кутти неможливе внаслідок надто великого обсягу обчислень. Тому часто раціональніше переходити до багатокрокових методів, які дають можливість, використовуючи значення f(xi,yi), що обчислені на попередніх кроках, отримати прийнятну точність. Проте для обчислення задачі цим алгоритмом, нам потрібно як мінімум два початкових значень, тож зазвичай за цими значеннями звертаються до методу Рунге-Кутта або методу Ейлера. Після чого йде багатокроковий алгоритм, який є точнішим. / Де h – крок, f – наша функція. Текст програми #include <iostream> #include <cmath> #include <iomanip> using namespace std; double eps = 0.001; double h = 0.1; double masY[10]; double func(double x, double y) { return x * x + 0.25 * y * y; } double x1[10] = { 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1 }; double rounge[10] = { 1.026, 1.055, 1.09, 1.134, 1.188, 1.255, 1.340, 1.444, 1.573, 1.732 }; void print(double x, double y, int n) { double z = abs(y - rounge[n - 1]); if (n == 1) cout << setprecision(4) << n << " |" << x << "\t| " << y << " | " << rounge[n - 1] << "\t| " << z << "\t| " << z / y * 100 << "%" << endl; else cout << setprecision(4) << n << " |" << x << "\t| " << y << " | " << rounge[n - 1] << "\t| " << z << "\t| " << z / y * 100 << "%" << endl; } double Adams(double x, double y0, int count) { while (count < 11) { x += h; double yn = y0 + h * func(x, y0); print(x, yn, count); y0 = yn; masY[count - 1] = y0; count++; } return y0; } double adams(double y0, int count) { double y[10]; y[0] = 1.026; print(x1[0], y[0], 1); y[1] = rounge[1]; print(x1[1], y[1], 2); for (int i = 2; i < 10; i++) { y[i] = y[i - 1] + 1.5 * h * func(x1[i - 1], y[i - 1]) - 0.5 * h * func(x1[i - 2], y[i - 2]); masY[i] = y[i]; print(x1[i], y[i], i+1); } return 0; } int main() { system("chcp 1251"); system("cls"); double y0 = 1; double x = 0; double y1 = y0 + h * func(0.1, y0); cout << "Метод Адамса\tМетод Рунге-Кутта\n"; cout << "n | x |y(Адамс) |y(РунгеКутта)| abs похибка |відносна\n0 | 0 | 1 | 1 |\n"; adams(y0, 1); cout << "\n\nОтже, наближене значення y(Адамса) = " <<masY[9] << ", y(Рунге - Кутта) = " << rounge[9] << endl; cout << "Абсолютна похибка = " << abs(masY[9] - rounge[9]) << ", Відносна похибка = " << (abs(masY[9] - rounge[9])) / masY[9] * 100 << "%\n\n"; return 0; } Результат виконання програми / Висновок Я програмно реалізував алгоритм розв’язання задачі Коші для диференціального рівняння першого порядку методом Адамса та порівняв результати з методом Рунге-Кутта, різниця між ними була мінімальна, проте реалізація цих методів зовсім різна, навідміну від методу Рунге-Кутта, метод Адамса значень функції, які вже були вирахувані в минулих точках.
Антиботан аватар за замовчуванням

26.05.2021 22:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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