Методи Рунге-Кутта для значень диференціального рівняння 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.