Метод Рунге-Кутта 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 с.
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

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

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

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

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

Admin

26.02.2019 12:38

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

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

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

Останні оголошення

Новини