Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

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

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

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

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

Рік:
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

Коментарі

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

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

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

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

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини