Метод Рунге-Кутта 4 порядку. Метод Рунге-Кутта 3 порядку (з фіксованою ціною)

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

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

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

Рік:
2018
Тип роботи:
Курсова робота
Предмет:
Комп’ютерні методи дослідження інформаційних процесів та систем

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Курсова робота з курсу: "Комп'ютерні методи дослідження інформаційних процесів і систем" на тему: "Метод Рунге-Кутта 4 порядку. Метод Рунге-Кутта 3 порядку" Тема 6, варіант 8 ЛЬВІВ 2018 Зміст 1. Постановка задачі 3 2.Теоретичні відомості 5 2.1.Метод Рунге-Кутта четвертого порядку 5 2.2.Метод Рунге-Кутта третього порядку 7 3.Код програми 8 3.1.Метод Рунге-Кутта четвертого порядку 8 3.2.Метод Рунге-Кутта третього порядку 10 4.Результати виконання програми 14 4.1.Метод Рунге-Кутта четвертого порядку 14 4.2.Метод Рунге-Кутта третього порядку 17 5.Графік зміни величини у3(t) 23 5.1.Метод Рунге-Кутта четвертого порядку 23 5.2.Метод Рунге-Кутта третього порядку 23 Висновки 24 Список літератури: 25 1. Постановка задачі При початкових параметрах Параметри 8  TМ. 0.3  TЕ 0.03  С 3  KU 102  S 1  i 12   Система рівнянь у нормальній формі:    Початкові умови: y1(0)=0 y2(0)=0 y3(0)=0 1. Навести таблицю значень.  2. Побудувати графік зміни величини  2.Теоретичні відомості 2.1.Метод Рунге-Кутта четвертого порядку В методі Рунге-Кутта значення  функції , як і в методі Ейлера, визначається за формулою  Якщо розкласти функцію  в ряд Тейлора і обмежитись членами до  включно, то приріст  можна записати у вигляді  (10) Замість того, щоб обчислювати члени ряду за формулою (10) в методі Рунге-Кутта використовують наступні формули.      Похибка на кожному кроці має порядок . Таким чином метод Рунге-Кутта забезпечує значно вищу точність ніж метод Ейлера, однак вимагає більшого об’єму обчислень. Деколи зустрічається інша форма представлення методу Рунге-Кутта 4-го порядку точності.      Після обчислення  з кроком  всі обчислення виконуються повторно з кроком . Після цього порівнюються результати, отримані в точці хn+1 з кроком  і . Якщо модуль різниці менший , то обчислення продовжуються з кроком , в іншому випадку крок зменшують. Якщо нерівність дуже сильна, то крок збільшують.  Маємо   - значення незалежної змінної в точці  - значення функції в точці - значення функції в точці , обчислене з кроком  - значення функції в точці , обчислене з кроком   - значення функції , обчислене з кроком  1) Якщо  обчислення повторюються з кроком  і т.д., доки не виконається умова . 2) Якщо виконується ця умова, то можливі два варіанти, в залежності від значення K, де K – ознака поділу кроку. Початкове значенняі залишається таким після першого поділу кроку на два. Надалі, якщо крок ділиться, то K приймає значення одиниці. а) Якщо , то навіть коли виконалась умова , крок не змінюється, тобто лишається тим самим (обчислення далі проводяться з попереднім кроком). б) Якщо  і виконалась умова , тоді . В обох випадках а) і б) результат виводиться на друк. 2.2.Метод Рунге-Кутта третього порядку Метод Рунге-Кутта третього порядку схожу до методу Рунге-Кутта четвертого порядку. Якщо розкласти функцію  в ряд Тейлора і обмежитись членами до  включно, то приріст  можна записати у вигляді  (10) Замість того, щоб обчислювати члени ряду за формулою (10) в методі Рунге-Кутта використовують наступні формули.     3.Код програми 3.1.Метод Рунге-Кутта четвертого порядку using System; using System.IO; namespace РК4 { class Realization { static void Main() { Method method = new Method(); method.Equation(); method.RK4(); method.OutputResult(); } } class Method { const int n = 3; const int a = 0; double b = 10; double h = 0.01; double e = 0.001; double Tm = 0.3, Te = 0.03; int Ku = 100, S = 1, i = 12, C = 3; double[] y = new double[n]; double[] Y = new double[n]; double[] dy = new double[n]; double[] k1 = new double[n]; double[] k2 = new double[n]; double[] k3 = new double[n]; double[] k4 = new double[n]; double[] z = new double[n]; double x; public void Equation() { dy[0] = y[1]; dy[1] = (C * S * Ku * (1 - y[2]) - y[0] - Tm * y[1]) / (Tm * Te); dy[2] = y[0] / i; } public void RK4() { Equation(); for (int i = 0; i < n; i++) { k1[i] = dy[i]; z[i] = y[i]; y[i] = z[i] + 0.5 * h * k1[i]; } x += 0.5 * h; Equation(); for (int i = 0; i < n; i++) { k2[i] = dy[i]; y[i] = z[i] + 0.5 * h * k2[i]; } Equation(); for (int i = 0; i < n; i++) { k3[i] = dy[i]; y[i] = z[i] + h * k3[i]; } x += 0.5 * h; Equation(); for (int i = 0; i < n; i++) { k4[i] = dy[i]; y[i] = z[i] + h * (k1[i] + k4[i] + 2 * (k2[i] + k3[i])) / 6; } } public void Firts() { for (int i = 0; i < n; i++) { Y[i] = y[i]; } } public void Second() { for (int i = 0; i < n; i++) { y[i] = Y[i]; } } public void OutputResult() { for (int i = 0; i < n; i++) { y[i] = 0.0; } x = a; StreamWriter result = new StreamWriter("ResultРК4.txt"); result.WriteLine("t\ty3(t)"); do { Firts(); RK4(); double y1 = y[2]; Second(); x -= h; h /= 2.0; RK4(); double y2 = y[2]; RK4(); bool P = true; bool K = false; do { if (Math.Abs(y[2] - y1) <= e) { P = false; if (K) { RK4(); Console.WriteLine($"{x:0.#####}\t{y[2]:0.###}"); result.WriteLine($"{x:0.#####}\t{y[2]:0.###}"); } else { h *= 2; RK4(); Console.WriteLine($"{x:0.#####}\t{y[2]:0.###}"); result.WriteLine($"{x:0.#####}\t{y[2]:0.###}"); } } else { x -= 2 * h; h /= 2.0; K = true; Second(); y1 = y2; RK4(); y2 = y[1]; RK4(); } } while (P); } while (x < b); result.Close(); } } } 3.2.Метод Рунге-Кутта третього порядку using System; using System.IO; namespace РК3 { class Realization { static void Main() { Method method = new Method(); method.Equation(); method.RK3(); method.OutputResult(); } } class Method { const int n = 3; const int a = 0; double b = 10; double h = 0.01; double e = 0.001; double Tm = 0.3, Te = 0.03; int Ku = 100, S = 1, i = 12, C = 3; double[] y = new double[n]; double[] Y = new double[n]; double[] dy = new double[n]; double[] k1 = new double[n]; double[] k2 = new double[n]; double[] k3 = new double[n]; double[] z = new double[n]; double x; public void Equation() { dy[0] = y[1]; dy[1] = (C * S * Ku * (1 - y[2]) - y[0] - Tm * y[1]) / (Tm * Te); dy[2] = y[0] / i; } public void RK3() { Equation(); for (int i = 0; i < n; i++) { k1[i] = dy[i]; z[i] = y[i]; y[i] = z[i] + 0.5 * h * k1[i]; } x += 0.5 * h; Equation(); for (int i = 0; i < n; i++) { k2[i] = dy[i]; y[i] = z[i] + h * k2[i]; } x += 0.5 * h; Equation(); for (int i = 0; i < n; i++) { k3[i] = dy[i]; y[i] = z[i] + h * (k1[i] + 4 * k2[i] + k3[i]) / 6; } } public void Firts() { for (int i = 0; i < n; i++) { Y[i] = y[i]; } } public void Second() { for (int i = 0; i < n; i++) { y[i] = Y[i]; } } public void OutputResult() { for (int i = 0; i < n; i++) { y[i] = 0.0; } x = a; StreamWriter result = new StreamWriter("ResultРК3.txt"); result.WriteLine("t\ty3(t)"); do { Firts(); RK3(); double y1 = y[2]; Second(); x -= h; h /= 2.0; RK3(); double y2 = y[2]; RK3(); bool P = true; bool K = false; do { if (Math.Abs(y[2] - y1) <= e) { P = false; if (K) { RK3(); Console.WriteLine($"{x:0.#####}\t{y[2]:0.###}"); result.WriteLine($"{x:0.#####}\t{y[2]:0.###}"); } else { h *= 2; RK3(); Console.WriteLine($"{x:0.#####}\t{y[2]:0.###}"); result.WriteLine($"{x:0.#####}\t{y[2]:0.###}"); } } else { x -= 2 * h; h /= 2.0; K = true; Second(); y1 = y2; RK3(); y2 = y[1]; RK3(); } } while (P); } while (x < b); result.Close(); } } } 4.Результати виконання програми Метод Рунге-Кутта третього порядку Метод Рунге-Кутта четвертого порядку  t y3(t) t y3(t)  0,02 0,003 0,02 0,003  0,4 1,809 0,4 1,81  0,8 0,497 0,8 0,495  1,2 1,142 1,2 1,145  1,6 ,161 1,6 1,157  2 0,663 2 0,666  2,4 1,372 2,4 1,372  2,8 0,704 2,8 0,703  3,2 1,159 3,2 1,162  3,6 0,985 3,6 0,981  4 0,906 4 0,909  4,4 1,147 4,4 1,146  4,8 0,855 4,8 0,854  5,2 1,104 5,2 1,106  5,6 0,954 5,6 0,952  6 0,99 6 0,992  6,4 1,047 6,4 1,046  6,8 0,938 6,8 0,939  7,2 1,055 7,2 1,056  7,6 0,965 7,6 0,964  7,8 1,038 7,8 1,037  8 1,011 8 1,012  8,4 1,01 8,4 1,009  8,8 0,978 8,8 0,979  9,2 1,025 9,2 1,025  9,6 0,98 9,6 0,979  10 1,011 10 1,012   5.Графік зміни величини у3(t) 5.1.Метод Рунге-Кутта четвертого порядку / 5.2.Метод Рунге-Кутта третього порядку / Висновки В даній роботі розглянуто застосування методів Рунге-Кутта четвертого та третього порядків з автоматичною зміною для дослідження системи диференціальних рівнянь. Можна зробити висновок, що метод Рунге-Кутта четвертого порядку забезпечує значно вищу точність ніж метод Рунге-Кутта третього порядку, однак вимагає більшого об’єму обчислень, а завдяки автоматичній змінні кроку можна досягти зменшення загального числа кроків в декілька разів. Розв’язок поставленої задачі представлений мовою С#. Графіки уточнень побудовані в середовищі MS Excel. Список літератури: 1. Шаповаленко В. А. Чисельні методи моделювання об’єктів: метод. вказів- ки для лаб. та практ. занять. Модуль 2. / Шаповаленко В. А., Буката Л. М., Тро- фименко О. Г. – Одеса: ВЦ ОНАЗ, 2011. – Ч. 2. – 72 с. 2. Шаповаленко В. А. Чисельне обчислення функцій, характеристик матриць і розв’язування нелінійних рівнянь та систем рівнянь: Навч. посібник / Шапо- валенко В. А., Буката Л. М., Трофименко О. Г. – Одеса: ВЦ ОНАЗ, 2010. – Ч. 1. –88 с. 3. Гаврилюк І. П., Макаров В. Методи обчислень: Підручник 1995. 4. Каханер Д., Моулер К., Нэш С. Численные методы и программное обеспечение. – М.: Мир, 1998. –570 с. 5. Коссак О., Тумашова О., Коссак О. Методи наближених обчислень: Навч.посібн. – Львів: Бак, 2003. – 168 с.
Антиботан аватар за замовчуванням

19.06.2019 05:06-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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