DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

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

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

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

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

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

Про що ця робота

У роботі розроблено проект мовою програмування для розв'язання задачі Коші за методом Адамса. Отримані результати порівняно з методом Рунге-Кутта та обчислено похибки.

У роботі розглядаються

  • Чисельні методи
  • Задача Коші
  • Метод Адамса
  • Метод Рунге-Кутта
  • Диференціальні рівняння
  • Програмування C++
  • Похибки обчислень

Зміст і розділи

  1. Завдання
  2. Відомості та алгоритм
  3. Текст програми
  4. Результат виконання програми та висновок
Для кого:Студенти технічних спеціальностей та викладачі чисельних методів
Викладачі:Дронюк І.М.

Ключові поняття

метод Адамсазадача Кошідиференціальне рівнянняметод Рунге-Куттаабсолютна похибкавідносна похибкакрок інтегруваннябагатокроковий методчисельне інтегрування

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ <<ЛЬВІВСЬКА ПОЛІТЕХНІКА>> Інститут ІКНІ Кафедра автоматизовані системи управління ГРАФІКО-РОЗРАХУНКОВА РОБОТА на тему “Метод Адамса розв’язання задачі Коші для диференціального рівняння першого порядку” З курсу “Чисельні методи” ЗАВДАННЯ: Створити проект на певній мові програмування для розв’язання задачі Коші для диференціального рівняння першого порядку методом Адамса: 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; } Результат виконання програми / Висновок Я програмно реалізував алгоритм розв’язання задачі Коші для диференціального рівняння першого порядку методом Адамса та порівняв результати з методом Рунге-Кутта, різниця між ними була мінімальна, проте реалізація цих методів зовсім різна, навідміну від методу Рунге-Кутта, метод Адамса значень функції, які вже були вирахувані в минулих точках.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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