Методи Рунге-Кутта для значень диференціального рівняння 1-го порядку
Способи вдосконалення методу Ейлера. Розгляд принципу побудови модифікованого методу Ейлера, його суть в обчисленні значень диференціального рівняння (ДР). Значення методу Рунге-Кутта для розв’язання ДР першого порядку, розв’язання задачі Коші для нього.
Рубрика | Математика |
Вид | контрольная работа |
Язык | украинский |
Дата добавления | 30.04.2018 |
Размер файла | 794,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Міністерство освіти і науки України
Сумський державний університет
Курсова робота
з предмету «Методи обчислень»
на тему «Методи Рунге-Кутта для ЗДР 1-го порядку»
Виконав:
студент групи ІН-52/2 Ульянік Олександр
Перевірила: Назаренко Л.Д.
Суми 2017
План
- Теоретична частина
- «Модифікований» метод Ейлера
- Метод Рунге - Кутта четвертого порядку
- Правило Рунге
- Практична частина
- Висновок
- Використана література
Теоретична частина
Метод Ейлера.
Найбільш простим однокроковим методом, який потребує мінімальних затрат обчислювальних ресурсів, але дає змогу обчислювати результат із порівняно низькою точністю, є метод Ейлера.
В цьому методі для оцінки наступної точки на кривій y=f(x) використовується лише один лінійний член в формулі Тейлора,
де yў (x0) визначається з початкового рівняння.
Цей процес можна розповсюдити на наступні кроки:
.
Метод Ейлера є методом першого порядку
,
де
,
M0 , M1, M2 - визначаються як
для всіх
i .
Метод Ейлера, крім значної похибки зрізання часто буває нестійким (малі локальні помилки призводять до значного збільшення глобальної).
Цей метод можна вдосконалити різними способами. Найбільш відомі два з них: виправлений метод Ейлера і модифікований метод Ейлера (в літературі зустрічаються інші назви цих методів, наприклад, модифікований метод Ейлера й удосконалений метод ламаних).
Ітераційні формули для цих методів мають вигляд, відповідно:
і ,
де
Геометрична інтерпретація зображена на рисунках 4.2., 4.3.
Це методи другого порядку, їх похибка має третій степінь, що досягається покращенням апроксимації похідної. Ідея полягає у спробі зберегти або оцінити член другого порядку у формулі Тейлора. Однак збільшення точності вимагає додаткових витрат машинного часу на обчислення . Ще більш висока точність може бути досягнута при обчисленні вищих похідних і збереженні більшої кількості членів ряду Тейлора. Такими методами є методи Рунге - Кутта.
Принцип, на якому побудований модифікований метод Ейлера, можна пояснити, користуючись рядом Тейлора і зберігаючи в ньому член з . Апроксимація другої похідної здійснюється кінцевою різницею
.
Аналогічно обчисленню другої похідної в кінцево-різницевому вигляді можна обчислити більш високі похідні: значення n-ї за значеннями попередньої (n-1)-ї.
Метод Рунге-Кутта дає набір формул для обчислення координат внутрішніх точок, які потрібні для реалізації цієї ідеї. Оскільки існує ряд способів знаходження цих точок, то метод Рунге-Кутта об'єднує цілий клас методів для розв'язання диференціальних рівнянь першого порядку.
Найбільш розповсюджений класичний метод четвертого порядку точності:
,
де
Метод Ейлера і його модифікації ще називають методами Рунге - Кутта першого і другого порядку
«Модифікований» метод Ейлера
Модифікований метод Ейлера - це чисельний метод отримання рішення диференціального рівняння.
Суть модифікованого методу Ейлера в покроковому обчисленні значень рішення
y = y (x)
диференціального рівняння виду
y '= f (x, y)
з початковою умовою (x0; y0).Виправлений метод Ейлера є методом 2-го порядку точності і називається методом «предиктор-коректор».
Формула для обчислення:
Метод Рунге - Кутта четвертого порядку
Метод Рунге-Кутта об'єднує ціле сімейство методів розв'язування диференціальних рівнянь першого порядку. Найбільш часто використовується метод четвертого порядку.
В методі Рунге-Кутта значення функції , як і в методі Ейлера, визначається за формулою
Якщо розкласти функцію в ряд Тейлора і обмежитись членами до включно, то приріст можна записати у вигляді
Замість того, щоб обчислювати члени ряду за формулою (11) в методі Рунге-Кутта використовують наступні формули.
Це метод четвертого порядку точності.
Похибка на кожному кроці має порядок . Таким чином метод Рунге-Кутта забезпечує значно вищу точність ніж метод Ейлера, однак вимагає більшого об'єму обчислень в порівнянні з методом Ейлера. Це досить часто дозволяє збільшити крок .
Деколи зустрічається інша форма представлення методу Рунге-Кутта 4-го порядку точності.
В більшості стандартних програм ЕОМ найчастіше використовується (схема) метод четвертого порядку (Рунге-Кутта).
Правило Рунге
Правило Рунге - правило оцінки похибки чисельних методів, було запропоновано К. Рунге на початку 20 століття.
Одним із найбільш простих і досить ефективних методів оцінки похибки й уточнення отриманих результатів є правило Рунге. Для оцінки похибки за правилом Рунге порівнюють наближені розв'язки, отримані при різних кроках сітки. При цьому використовується наступне припущення: глобальна похибка методу порядку p у точці хi подається у вигляді:
.
За формулою Рунге:
.
Таким чином, із точністю до (величина більш високого порядку малості) при h>0 похибка методу має вигляд:
де yi - наближене значення, отримане в точці з кроком h; y2i - із кроком h/2; p - порядок методу; y(x2i) - точний розв'язок задачі.
Формула методу Рунге для четвертого порядку
.
Обчислювальна схема методу Рунге-Кутта.
Вибираємо початковий крок h на відрізку [a,b], задаємо точність .
Створюємо множину рівновіддалених точок (вузлів)
Знаходимо розв'язок yi+1 за формулами при кроку h і при кроку
h/2, 0 ? i ? n-1.
Перевіряємо нерівність
.
Якщо ця нерівність виконується, то приймаємо
і продовжуємо обчислення з тим же кроком, якщо ні, то зменшуємо початковий крок h у два рази і переходимо до пункту 3.
Практична частина
Я спробую чисельно розв'язати задачу Коші для диференціального рівняння першого порядку з точністю =0,00001, використовуючи метод Ейлера( Рунге-Кутта 1-го порядку) та Рунге- Кутта 4-го порядку та порівняти результат
1) Розв'язання за методом Ейлера на С++:
#include <iostream>
#include <cmath>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
double a = 0, b = 1;//проміжок
double eps = 0.1;//точність
struct point { double x, y; };
double function(double x, double y)
{
return y + 3 * sin(2 * x) + cos(x);
}//функція
void Eiler1(struct point p[], int n)
{
double h = (b - a) / n;
p[0].x = 0;
p[0].y = 1;
for (int i = 0; i + 1 <= n; i++)
{
p[i + 1].y = p[i].y + h*function(p[i].x, p[i].y);
p[i + 1].x = p[i].x + h;
}
}//метод рунге-кутта 1
float check(struct point p[], struct point p2[], int size)
{
float min = 0;
for (int i = 1; i<size; i++)
{
if (fabs(p[i].y - p2[2 * i].y)/15>min) min = fabs(p[i].y - p2[2 * i].y)/15 ;
}
return min;
}//похибка
int main()
{
int n = 20;//кільк точок
float min;
struct point *p1;
struct point *p2;
do
{
p1 = new struct point[n + 1];
Eiler1(p1, n);
n = n * 2;
p2 = new struct point[n + 1];
Eiler1(p2, n);
min = check(p1, p2, (n / 2));
} while (min > eps);
for (int i = 0; i <= n; i++)
{
printf(«x[%d] = %7.5lf, y[%d] =%7.5lf\n», i, p2[i].x, i, p2[i].y);
}
printf(«n = %d\nh = %5.3lf\n», n, (b - a) / n);
system(«pause»);
return 0;
}
Результат програми
(додаток)якщо збільшити точність до 0.00001
Проміжний висновок:
Неважко помітити, що в нашому випадку похибка збільшується в міру віддалення від точки, в якій поставлено початкова умова задачі Коші, і це справедливо для більшості завдань.
2)Розв'язання за методом Рунге- Кутта 2-го порядку на С++;
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
double a = 0, b = 1;//проміжок
double eps = 0.01;//точність
struct point { double x, y; };
double function(double x, double y)
{
return y + 3 * sin(2 * x) + cos(x);
}//функція
void Eiler2(struct point p[], int n)
{
double h = (b - a) / n;
double delt = 0;
double k[2];
p[0].x = 0;
p[0].y = 1;
for (int i = 0; i + 1 <= n; i++)
{
k[0] = function(p[i].x, p[i].y)*h;
k[1] = function(p[i].x + h, p[i].y + h)*h;
delt = (k[0] + k[1]) / 2;
p[i + 1].y = p[i].y+delt;
p[i + 1].x = h + p[i].x;
}
}//метод рунге-кутта 2
float check(struct point p[], struct point p2[], int size)
{
float min = 0;
for (int i = 1; i<size; i++)
{
if (fabs(p[i].y - p2[2 * i].y)/15>min) min = fabs(p[i].y - p2[2 * i].y)/15 ;
}
return min;
}//похибка
int main()
{
int n = 10;//кільк точок
float min;
struct point *p1;
struct point *p2;
do
{
p1 = new struct point[n + 1];
Eiler2(p1, n);
n = n * 2;
p2 = new struct point[n + 1];
Eiler2(p2, n);
min = check(p1, p2, (n / 2));
} while (min > eps);
for (int i = 0; i <= n; i++)
{
printf(«x[%d] = %7.5lf, y[%d] =%7.5lf\n», i, p2[i].x, i, p2[i].y);
}
printf(«n = %d\nh = %5.3lf\n», n, (b - a) / n);
system(«pause»);
return 0;
}
Результат програми:
(додаток)якщо збільшити точність до 0.00001
(кiлькiсть кроків зменшилась в 2 рази)
Проміжний висновок:
Як можна бачити,точність результату значно збільшилась і не сильно зменшуеться при віддаленні від початкової умови.
2)Розв'язання за методом Рунге- Кутта 4-го порядку на С++:
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
double a = 0, b = 1;//проміжок
double eps = 0.00001;//точність
struct point { double x, y; };
double function(double x, double y)
{return y + 3 * sin(2 * x) + cos(x);
}//функція
void RungeKuta(struct point p[], int n)
{
double k[4];
double h = (b - a) / n;
p[0].x = 0;
p[0].y = 1;
for (int i = 0; i + 1 <= n; i++)
{
k[0] = function(p[i].x, p[i].y);
k[1] = function(p[i].x + 0.5*h, p[i].y + 0.5*h*k[0]);
k[2] = function(p[i].x + 0.5*h, p[i].y + 0.5*h*k[1]);
k[3] = function(p[i].x + h, p[i].y + h*k[2]);
p[i + 1].x = p[i].x + h;
p[i + 1].y = p[i].y + h*(k[0] + 2 * k[1] + 2 * k[2] + k[3]) / 6;
}
}//метод рунге-кутта 4
float check(struct point p[], struct point p2[], int size)
{
float min = 0;
for (int i = 1; i<size; i++)
{
if (fabs(p[i].y - p2[2 * i].y) / 15 >min) min = fabs(p[i].y - p2[2 * i].y) / 15;
}
return min;
}//похибка
int main()
{
int n = 10;//кільк точок
float min;
struct point *p1;
struct point *p2;
do
{
p1 = new struct point[n + 1];
RungeKuta(p1, n);
n = n * 2;
p2 = new struct point[n + 1];
RungeKuta(p2, n);
min = check(p1, p2, (n / 2));
} while (min > eps);
for (int i = 0; i <= n; i++)
{
printf(«x[%d] = %7.5lf, y[%d] =%7.5lf\n», i, p2[i].x, i, p2[i].y);
}
printf(«n = %d\nh = %5.3lf\n», n, (b - a) / n);
system(«pause»);
return 0;}
Результат програми:
Проміжний висновок:
Вже можна бачити,що результат має меншу похибку і метод Рунге-Кутта дає вже 4-5 правильних знака після коми в порівнянні з 2 правильними знаками вдосконаленого методу Ейлера!.
3) Пакетна реалізація алгоритму в MAPPLE 18
>
>
>
>
>
>
Висновок
Отже, перевіривши результат у програмі Mapple 18, я можу зробити висновок, що результат ,отриманий за допомогою методу Рунге-Кутта 4-го порядку, дає набагато точніше результат у порівнянні із методом модифікованого Ейлера та особливо із методом Рунге-Кутта 1-го порядку при віддаленні від початкової задачі Коші. Це пов'язано із похибкою у цих методах. Так похибка «звичайного» методу Ейлера не перевищує кроку розбиття, що і говорить нам про точність h(0)= 0,1. Модифікований метод Ейлера гарантує точність: h(0^2)=0.01. І, нарешті, метод Рунге-Кутта 4-го порядку забезпечує точність h(0^4)=0.0001. Але чим більшого метод порядку, тим більшого ступеня потрібні неперервні похiднi.
Так, для методу Ейлера потрібна лише похiдна 1-го порядку, а для методу Рунге-Кутта 4-го порядку вже похідна аж 4-го порядку.
ейлер диференціальний рівняння коші
Використана література
Ляшко И.И., Макаров В.Л., Скоробагатько А.А. Методы вычислений.
Гаврилюк І.П., Макаров В.Л. Методи обчислень.
В.О.Любчак, Л.Д. Назаренко методи та алгоритми обчислень
http://www.simumath.net/library/book.html?code=Dif_Ur_method_RK
http://mathprofi.ru/metody_eilera_i_runge_kutty.html
http://www.programmersforum.ru/showthread.php?t=152827
http://itnovella.ru/itnovella/2016/05/30/eulercpp.html
Размещено на Allbest.ru
Подобные документы
Умови та особливості використання модифікованого методу Ейлера для отримання другої похідної в кінцево-різницевій формі. Два обчислення функції за крок. Метод Ейлера-Коші як частковий випадок методу Рунге-Кутта. Метод четвертого порядку точності.
презентация [171,0 K], добавлен 06.02.2014Класифікація методів для задачі Коші. Лінійні багатокрокові методи. Походження формул Адамса. Різницевий вигляд методу Адамса. Метод Рунге-Кутта четвертого порядку. Підвищення точності обчислень методу за рахунок подвійного обчислення значення функції.
презентация [1,6 M], добавлен 06.02.2014Поняття диференціальних рівнянь. Задача Коші і крайова задача. Класифікація методів для задачі Коші. Похибка методу Ейлера. Модифікований метод Ейлера-Коші. Пошук рішення задачі однокроковим методом Ейлера. Порівняння чисельного рішення з точним рішенням.
презентация [294,4 K], добавлен 06.02.2014Диференціальні рівняння другого порядку, які допускають пониження порядку. Лінійні диференціальні рівняння II порядку зі сталими коефіцієнтами. Метод варіації довільних сталих як загальний метод розв’язування та й приклад розв’язання задачі Коші.
лекция [202,1 K], добавлен 30.04.2014Задача Коші і крайова задача. Двоточкова крайова задача для диференціального рівняння другого порядку. Види граничних умов. Метод, заснований на заміні розв’язку крайової задачі розв’язком декількох задач Коші. Розв'язування систем нелінійних рівнянь.
презентация [86,2 K], добавлен 06.02.2014Етапи розв'язування задачі дослідження певного фізичного явища чи процесу, зведення її до диференціального рівняння. Методика та схема складання диференціальних рівнянь. Приклади розв'язування прикладних задач за допомогою диференціального рівняння.
контрольная работа [723,3 K], добавлен 07.01.2016Розгляд крайової задачі для нелінійного рівняння другого порядку. Вивчення різницевого методу розв'язання крайових задач для звичайних диференціальних рівнянь. Метод прогонки - окремий випадок методу Гауса. Програма на алгоритмічній мові Turbo Pascal.
курсовая работа [49,7 K], добавлен 10.04.2011Крайова задача для звичайного диференціального рівняння. Метод Рунге-Кутта, метод прогнозу і корекції та метод кінцевих різниць для розв’язання лінійних крайових задач. Реалізація пакетом Maple. Оцінка похибки й уточнення отриманих результатів.
контрольная работа [340,6 K], добавлен 14.08.2010Вивчення методів розв'язання лінійної крайової задачі комбінуванням двох задач Коші. Переваги та недоліки інших методів: прицілювання, колокацій, Гальоркіна, найменших квадратів та ін. Пошук єдиного розв'язку звичайного диференціального рівняння.
курсовая работа [419,2 K], добавлен 29.08.2010Розгляд найбільш відомих скінченно-різнецевих методів рішення рівнянь руху з непереривною силою: чисельна ітерація рівнянь Ньютона; алгоритм Бімана і Шофілда; метод Рунге-Кутта; методи Адамса, Крилова, Чаплигіна. Програма Рунге-Кутта на мові С#.
курсовая работа [359,5 K], добавлен 27.01.2011