Ім'я файлу: Приклад1.docx
Розширення: docx
Розмір: 1635кб.
Дата: 26.11.2023
скачати

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

СХІДНОУКРАЇНСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ

імені Володимира Даля
Кафедра Інформаційних технологій та програмування

КУРСОВА РОБОТА

З дисципліни: «Чисельні методи»

Тема: метод Рунге-Кути

Студент:




(прізвище, ініціали)

(підпис)


Група:

Керівник роботи доц.






(посада,прізвище, ініціали)

(підпис)

Захищенна з оцінкою:

Комісія: доц.




(посада,прізвище, ініціали)

(підпис)







(посада,прізвище, ініціали)

(підпис)







(посада,прізвище, ініціали)

(підпис)



Дата:


Календарний план




з/п

Найменування етапів

курсового проекту




Термін виконання етапів

Примітка


1.

Постановка завдання




1-й тиждень




2.

Огляд та опрацювання літератури




2-й тиждень




3.

Ознайомлення з середовищем розробки




3-й тиждень




4.

Розробка структури програми




3-10-й тиждень




5.

Відлагодження програми




13-й тиждень




6.

Оформлення пояснювальної записки




14-й тиждень





Зміст


Календарний план 2

Вступ 4

Розділ 1 6

1.1 Суть методу Рунге-Кути 6

1.2.Призначення та сфера застосування 12

Розділ 2 13

2.1 Постановка задачі та розробка алгоритму розв'язання задачі 13

2.2 Програмна реалізація в C# 13

Висновок 17

Cписок використаної літератури 18

Додаток А 19

Програма для знаходження наближеного рішення звичайного диференціального рівняння методом Рунге-Кути 19


Вступ


Актуальність теми в тому, що найпопулярніший метод розв'язання задачі Коші – метод Рунге-Кутта. Цей метод дозволяє будувати формули розрахунку наближеного рішення практично будь-якого порядку точності.

Формально, методом Рунге — Кутти є модифікований та виправлений метод Ейлера, вони є схемами другого порядку точності. Існують стандартні схеми третього порядку, які не набули широкого поширення. Найчастіше використовується та реалізована в різних математичних пакетах (Maple, MathCAD, Maxima) стандартна схема четвертого порядку. Іноді під час виконання розрахунків із підвищеною точністю застосовуються схеми п'ятого і шостого порядків. Побудова схем вищого порядку пов'язані з великими обчислювальними труднощами. Методи сьомого порядку повинні мати щонайменше дев'ять стадій, до схеми восьмого порядку входить 11 стадій. Хоча схеми дев'ятого порядку немає великої практичної значимості, невідомо, скільки стадій необхідно задля досягнення цього порядку точності. Аналогічне завдання існує для схем десятого і вищих порядків.[1]

Метою курсової є: написати програму для знаходження наближеного рішення звичайного диференціального рівняння , методом Рунге-Кути четвертого порядку на відрізку [a,b] із заданим постійним кроком h.

Для досягнення цієї мети необхідно виконати такі завдання:

1. Розглянути суть методу Рунге-Кути.

2. Призначення та сфера застосування.

3. Протестувати програму.

Це завдання відноситься до чисельних методів. Потрібно визначити рішення звичайного диференціального рівняння з постійним кроком h.

Для вирішення завдання буде використовуватися мова програмування C#, так як ця мова дозволяє працювати з математичними формулами, проводити різноманітні математичні операції та дії. У математичних завданнях часто потрібно реалізувати чисельні методи, експериментально досліджувати умову та швидкість збіжності методів. У разі завдання, зазвичай, дається основна ідея кожного методу (Ейлера, Рунге-Кутта тощо.).

Обчислення функції та її похідної, що використовується у задачі, рекомендується оформляти у вигляді підпрограм, так, щоб можна було представляти будь-яку функцію, не змінюючи самої програми. Похибка, початкова умова та параметр алгоритму задаються введенням. Там, де це можливо, рекомендується тестувати алгоритм на прикладах, котрим відомо чи може бути знайдено аналітично точне рішення.

Розділ 1

1.1 Суть методу Рунге-Кути


Метод Рунге-Кути включає кілька інших таких як: метод Ейлера і метод Ейлера - Коші. Методи Рунге-Кути мають такі властивості:

1. Ці методи є одноступінчастими: щоб знайти потрібна інформація про попередню точку

2 Вони узгоджуються з рядом Тейлора аж до членів порядку де ступінь р різна для різних методів і називається порядковим номером або методом

3 Вони не вимагають обчислення похідних від , а вимагають обчислення самої функції[2]

Розглянемо спочатку геометричну побудову і виведемо деякі формули на основі геометричних аналогій. Після цього ми підтвердимо отримані результати аналітично (Аналітичний метод, застосовується якого дає рішення диференціального рівняння у вигляді аналітичного виразу; Графічний метод, що дає наближене рішення у вигляді графіка; Чисельний потрібна функція виходить у вигляді таблиці.)

Припустимо нам відома точка на кривій, що шукається. Тоді ми можемо провести пряму лінію з тангенсом кута нахилу , яка пройде через точку . Ця побудова показана на рис.1.1 де крива являє собою точне, але звичайно невідоме рішення рівняння, а пряма лінія L1 побудована так як це щойно описано:

(рис.1.1)

Тоді наступною точкою рішення можна вважати ту, де пряма L1 перетне ординату, проведену через точку .

Рівняння прямої L1 виглядає так: так як і крім того тоді рівняння набуде вигляду

(1.1)

Помилка при показана у вигляді відрізка е. Очевидно, знайдене таким чином наближене значення узгоджується з розкладанням у ряд Тейлора аж до членів порядку h, так що помилка обмеження дорівнює .

Зауважимо, що хоча точка на рис.1 була показана на кривій насправді є наближеним значенням і не лежить точно на кривій.

Формула 1.1 описує метод Ейлера один з найстаріших і широко відомих методів чисельного інтегрування диференціальних рівнянь. Зазначимо, що метод Ейлера є одним з методів Рунге-Кути першого порядку.[1]

Розглянемо виправлений метод Ейлера та модифікаційний метод Ейлера. У виправленому методі Ейлера ми знаходимо середній тангенс кута нахилу дотичної для двох точок: і . Остання точка є та сама, яка в методі Ейлера позначалася . За допомогою методу Ейлера знаходиться точка лежача на прямій L1. У цій точці знову обчислюється тангенс дає пряму . Нарешті через точку ми проводимо пряму паралельну . Точка в якій пряма перетнеться з ординатою відновленою і буде шуканою точкою .

Тангенс кута нахилу прямої та прямої дорівнює

(1.2)

Де (1.3)

Рівняння лінії у своїй записується як

так що

(1.4)

Співвідношення (1.2), (1.3), (1.4) описують виправлений метод Ейлера

(рис.2)

Щоб з'ясувати, наскільки добре цей метод узгоджується з розкладанням в ряд Тейлора, пригадаємо, що розкладання в ряд функції можна записати так:

(1.5)

де приватні похідні обчислюються при та .

Підставляючи у формулу (1.5) та і використовуючи вираз (1.3) для отримуємо



де знову функція та її похідні обчислюються в точці . Підставляючи результат у (1.2) і роблячи необхідні перетворення отримуємо



Підставимо отриманий вираз у 1.4 і порівняємо з рядом Тейлора

.

Як бачимо, виправлений метод Ейлера узгоджується з розкладанням в ряд Тейлора аж до членів ступеня , будучи, таким чином, методом Рунге-Кутти другого порядку.

Розглянемо модифікаційний метод Ейлера. Розглянемо рис.3 де початкова побудова зроблена так само, як і на рис.2. Але цього разу ми беремо точку, що лежить на перетині цієї прямої та ординатою . На рисунку ця точка утворена через Р, та її ордината дорівнює . Обчислимо тангенс кута нахилу дотичної в цій точці

, (1.6)

де (1.7)

Пряма з таким нахилом проходить через позначена через . Після цього, ми проводимо через точку пряму паралельну і позначаємо її через . Перетин цієї прямої з ординатою і дасть точку , що шукається, Рівняння прямої можна записати в вигляді



де F задається формулою (1.6). Тому



Співвідношення (1.6), (1.7), (1.8) описують так званий модифікаційний метод Ейлера і є ще одним методом Рунге-Кути другого порядку.

(1.9)

і в обох випадках F має вигляд

(1.10)

Де (1.11)

Зокрема для виправленого методу Ейлера





рис.3

У той час як для модифікаційного методу Ейлера



.

Формули (1.9), (1.10), (1.11) описують деякий метод типу Рунге-Кути. Подивимося, якого порядку метод можна розраховувати отримати в кращому випадку і які допустимі значення параметрів .

Щоб отримати відповідність ряду Тейлора аж до членів ступеня h у загальному випадку достатньо одного параметра Щоб отримати узгодження аж до членів ступеня h2, потрібно ще два параметри, оскільки необхідно враховувати члени і . Так як у нас є всього чотири параметри, три з яких будуть потрібні для створення узгодження з рядом Тейлора аж до членів порядку h2, те найкраще, що тут можна розраховувати - це метод другого порядку.

У розкладанні в ряд (1.5) в околиці точки покладемо

, .

Тоді , де функція та похідні у правій частині рівності обчислені у точці

Тоді (1.9) можна переписати у вигляді



Порівнявши цю формулу з розкладанням у ряд Тейлора можна переписати у вигляді



Якщо вимагати збігу членів .

Порівнюючи члени, що містять .

Порівнюючи члени містять .

Так як ми дійшли трьох рівнянь для визначення чотирьох невідомих то одне з цих невідомих можна задати довільно виключаючи може бути нуль залежно від того який параметр взяти в якості довільного

Покладемо наприклад тоді і співвідношення (1.9), (1.10), (1.11) зведуть до

(1.12)

Це найбільш загальна форма запису методу Рунге-Кутта другого порядку При ми отримуємо виправлений метод Ейлера при отримуємо модифікаційний метод Ейлера

(1.13)

Методи Рунге-Кути третього та четвертого порядків можна вивести абсолютно аналогічно тому, як це робилося під час виведення методів першого та другого порядків. Ми не відтворюватимемо викладки, а обмежимося тим, що наведемо формули, що описують метод четвертого порядку, один із найбільш уживаних методів інтегрування диференціальних рівнянь. Цей класичний метод Рунге-Кути описується системою наступних п'яти співвідношень.[4]

(1.14)

Де , (1.15)

(1.16)

(1.17)

(1.18)

Помилка обмеження цього методу дорівнює

отже, формули 1.14-1.18 описують метод четвертого порядку. Зауважимо, що при використанні цього методу функцію необхідно обчислювати чотири рази.

1.2.Призначення та сфера застосування


Це завдання може застосовуватися в математичних дисциплінах, таких як чисельні методи, математичні методи і т.д. Широке сімейство методів наближеного розв'язання диференціальних рівнянь ґрунтується на веденні сітки та заміні похідних. Даний крок дозволяє позбутися такого незручного для комп'ютера об'єкта, як похідна, замінивши вихідне завдання алгебраїчним завданням. У загальному випадку метод Рунге-Кути є n-кроковим методом. На інтервалі [t0, t1] є послідовність точок, і для цих точок обчислюються нахили дотичних до графіку функції. Отримавши кілька значень, використовуємо зважене середнє для побудови відрізка лінії, що йде з початкової точки. Робиться це для того, щоб обчислити оцінку рішення у наступній точці. Потім обчислюється нахил у цій точці тощо. Це геометричне тлумачення методів Рунге-Кута. Числові коефіцієнти вибираються з міркувань точності; Способи Рунге-Кута різняться методом вибору цих коефіцієнтів. Методи Рунге – Кути при m>5 не використовуються.[3]

Розділ 2

2.1 Постановка задачі та розробка алгоритму розв'язання задачі


Знайти наближене рішення звичайного диференціального рівняння методом Рунге-Кутта четвертого порядку на відрізку [a,b] із постійним кроком h. Значення функції y(x) у вузлових точках обчислюються за такою формулою:










2.2 Програмна реалізація в C#


Перед тим, як розв’язати систему в мові програмування С#, дослідимо це середовище та дізнаємося трохи теоретичного матеріалу. Попереднє було сказано про цю мову, але варто розповісти детальніше.

Не буде зайвим перерахувати переваги та недоліки С#

Переваги:

  • Велика безпека

  • Зручний для написання та перевірки

  • Можливість писати узагальнений код за допомогою шаблонів

  • Можливість використовувати об'єктно-орієнтований підхід

  • Спрощення коду за рахунок перевантаження функцій та операторів

  • Простіша обробка помилок за рахунок винятків[8]

Універсальність C# - ще одна значна перевага даної мови програмування. Оволодівши основами, розробник зможе писати на C# прості десктопні програми для Windows за допомогою Windows Forms, складніші програми для Windows та Linux, ігри для різних платформ (включаючи Windows та Android), серверну частину сайтів (back-end), програмне забеспечення з поєднанням бази даних, тощо.

Недоліки:

  • Довга компіляція

  • Більший обсяг згенерованого машинного коду.[7]

Реалізування цього методу відбудеться в середовищі програмування Microsoft Visual Studio «(Зображення 1)».



Зображення 2.1 – Інтерфейс Microsoft Visual Studio

Перейдемо до коду програмування:



Зображення 2.2 – Код програми



Зображення 2.3 – Продовження



Зображення 2.4 – Продовження



Зображення 2.5 – Результат

Висновок


У ході виконання курсової роботи виконана мета: знайти наближене рішення звичайного диференціального рівняння методом Рунге-Кути четвертого порядку на відрізку [a,b] із постійним кроком h. Значення функції y(x) у вузлових точках обчислюються за такою формулою:











З використанням мови програмування C# було знайдено рішення звичайного диференціального рівняння. Обчислення функції, що використовується в задачі, оформив у вигляді підпрограми так, щоб можна було уявити будь-яку функцію, не змінюючи самої програми.

Cписок використаної літератури


  1. Бахвалов Н.С. Численные методы учебник для ВЗУов М., Наука, 1978

  2. Воробьева Г.Н. Данилова А.Н. Практикум по численным методам: М., учебник 1987

  3. Демидович Б.П. и Марон И.А. Основы вычислительной математики учебник для ВЗУов издание четвертое М., Наука, 1970

  4. Каханер Дэвид. Численные методы и программное обеспечение учебник для ВЗУов М., Мир, 1998

  5. Новикова Ф.А Дискретная математика для программистов. С.-П., издание Питер 2001.

  6. Турчак Л.И. Основы численных методов учебник для ВЗУов М., Знание, 1987

  7. Скит. C# для профессионалов. Тонкости программирования

  8. Албахари. C# 7.0. Карманный справочник


Додаток А

Програма для знаходження наближеного рішення звичайного диференціального рівняння методом Рунге-Кути


using System;

namespace RungeKutta

{

class Program

{

static void Main(string[] args)

{

//Incrementers to pass into the known solution

double t = 0.0;

double T = 10.0;

double dt = 0.1;
// Assign the number of elements needed for the arrays

int n = (int)(((T - t) / dt)) + 1;
// Initialize the arrays for the time index 's' and estimates 'y' at each index 'i'

double[] y = new double[n];

double[] s = new double[n];
// RK4 Variables

double dy1;

double dy2;

double dy3;

double dy4;
// RK4 Initializations

int i = 0;

s[i] = 0.0;

y[i] = 1.0;
Console.WriteLine(" ===================================== ");

Console.WriteLine(" Beging 4th Order Runge Kutta Method ");

Console.WriteLine(" ===================================== ");
Console.WriteLine();

Console.WriteLine(" Given the example Differential equation: \n");

Console.WriteLine(" y' = t*sqrt(y) \n");

Console.WriteLine(" With the initial conditions: \n");

Console.WriteLine(" t0 = 0" + ", y(0) = 1.0 \n");

Console.WriteLine(" Whose exact solution is known to be: \n");

Console.WriteLine(" y(t) = 1/16*(t^2 + 4)^2 \n");

Console.WriteLine(" Solve the given equations over the range t = 0...10 with a step value dt = 0.1 \n");

Console.WriteLine(" Print the calculated values of y at whole numbered t's (0.0,1.0,...10.0) along with the error \n");

Console.WriteLine();
Console.WriteLine(" y(t) " + "RK4" + " ".PadRight(18) + "Absolute Error");

Console.WriteLine(" -------------------------------------------------");

Console.WriteLine(" y(0) " + y[i] + " ".PadRight(20) + (y[i] - solution(s[i])));
// Iterate and implement the Rk4 Algorithm

while (i < y.Length - 1)

{
dy1 = dt * equation(s[i], y[i]);

dy2 = dt * equation(s[i] + dt / 2, y[i] + dy1 / 2);

dy3 = dt * equation(s[i] + dt / 2, y[i] + dy2 / 2);

dy4 = dt * equation(s[i] + dt, y[i] + dy3);
s[i + 1] = s[i] + dt;

y[i + 1] = y[i] + (dy1 + 2 * dy2 + 2 * dy3 + dy4) / 6;
double error = Math.Abs(y[i + 1] - solution(s[i + 1]));

double t_rounded = Math.Round(t + dt, 2);
if (t_rounded % 1 == 0)

{

Console.WriteLine(" y(" + t_rounded + ")" + " " + y[i + 1] + " ".PadRight(5) + (error));

}
i++;

t += dt;
};//End Rk4
Console.ReadLine();

}
// Differential Equation

public static double equation(double t, double y)

{

double y_prime;

return y_prime = t * Math.Sqrt(y);

}
// Exact Solution

public static double solution(double t)

{

double actual;

actual = Math.Pow((Math.Pow(t, 2) + 4), 2) / 16;

return actual;

}

}

}


скачати

© Усі права захищені
написати до нас