WikiZero - Метод Ейлера
- Оцінка похибки методу на етапі і в цілому [ правити | правити код ]
- Модифікований метод Ейлера з перерахунком [ правити | правити код ]
- Двокроковий метод Адамса - Башфорта [ правити | правити код ]
- Реалізації на мовах програмування [ правити | правити код ]
open wikipedia design.
Метод Ейлера - найпростіший чисельний метод рішення систем звичайних диференціальних рівнянь . вперше описаний Леонардом Ейлером в 1768 році в роботі «Інтегральне числення» [1] . Метод Ейлера є явним, однокроковим методом першого порядку точності. Він заснований на апроксимації інтегральної кривої кусочно-лінійною функцією, так званої ламаної Ейлера.
нехай дана задача Коші для рівняння першого порядку:
d y d x = f (x, y), {\ displaystyle {\ frac {dy} {dx}} = f (x, y),}
y | x = x 0 = y 0, {\ displaystyle y_ {| _ {x = x_ {0}}} = y_ {0},}
де функція f {\ displaystyle f} визначена на деякій області D ⊂ R 2 {\ displaystyle D \ subset \ mathbb {R} ^ {2}} . Рішення шукається на інтервалі (x 0, b] {\ displaystyle (x_ {0}, b]} . На цьому інтервалі введемо вузли:
x 0 <x 1 <⋯ <x n ≤ b. {\ Displaystyle x_ {0} <x_ {1} <\ dots <x_ {n} \ leq b.}
Наближене рішення у вузлах x i {\ displaystyle x_ {i}} , Яке позначимо через y i {\ displaystyle y_ {i}} , Визначається за формулою:
y i = y i - 1 + (x i - x i - 1) f (x i - 1, y i - 1), i = 1, 2, 3, ..., n. {\ Displaystyle y_ {i} = y_ {i-1} + (x_ {i} -x_ {i-1}) f (x_ {i-1}, y_ {i-1}), \ quad i = 1 , 2,3, \ dots, n.}
Ці формули безпосередньо узагальнюються на випадок систем звичайних диференціальних рівнянь.
Оцінка похибки методу на етапі і в цілому [ правити | правити код ]
Похибка на кроці або локальна похибка - це різниця між чисельним рішенням після одного кроку обчислення y i {\ displaystyle y_ {i}} і точним рішенням в точці x i = x i - 1 + h {\ displaystyle x_ {i} = x_ {i-1} + h} . Чисельне рішення задається формулою
y i = y i - 1 + h f (x i - 1, y i - 1). {\ Displaystyle y_ {i} = y_ {i-1} + hf (x_ {i-1}, y_ {i-1}). \ Quad}
Точне рішення можна розкласти в ряд Тейлора :
y (x i - 1 + h) = y (x i - 1) + h y '(x i - 1) + O (h 2). {\ Displaystyle y (x_ {i-1} + h) = y (x_ {i-1}) + hy '(x_ {i-1}) + O (h ^ {2}).}
Локальну помилку L {\ displaystyle L} отримуємо, віднімаючи з другого рівності перша:
L = y (x i - 1 + h) - y i = O (h 2). {\ Displaystyle L = y (x_ {i-1} + h) -y_ {i} = O (h ^ {2}).}
Це справедливо, якщо y {\ displaystyle y} має безперервну другу похідну [2] . Іншим достатньою умовою справедливості цієї оцінки, з якого випливає попереднє і яке зазвичай може бути легко перевірено, є безперервна дифференцируемость f (x, y) {\ displaystyle f (x, y)} по обом аргументів [3] .
Похибка в цілому, глобальна або накопичена похибка - це похибка в останній точці довільного кінцевого відрізка інтегрування рівняння. Для обчислення рішення в цій точці потрібно S / h {\ displaystyle S / h} кроків, де S {\ displaystyle S} довжина відрізка. Тому глобальна похибка методу G = O (h 2 S / h) = O (h) {\ displaystyle G = O (h ^ {2} S / h) = O (h)} .
Таким чином, метод Ейлера є методом першого порядку - має похибку на кроці O (h 2) {\ displaystyle O (h ^ {2})} і похибка в цілому O (h) {\ displaystyle O (h)} [3] .
Метод Ейлера був історично першим методом чисельного розв'язання задачі Коші. О. Коші використовував цей метод для доказу існування рішення задачі Коші. Зважаючи на невисоку точності і обчислювальної нестійкості для практичного знаходження розв'язків задачі Коші метод Ейлера застосовується рідко. Однак на увазі свою простоту метод Ейлера знаходить своє застосування в теоретичних дослідженнях диференціальних рівнянь, задач варіаційного числення і ряду інших математичних проблем.
Модифікований метод Ейлера з перерахунком [ правити | правити код ]
Підвищити точність і стійкість обчислення рішення можна за допомогою неявного методу Ейлера такого вигляду.
прогноз:
y ~ i = yi - 1 + (xi - xi - 1) f (xi - 1, yi - 1) {\ displaystyle {\ tilde {y}} _ {i} = y_ {i-1} + (x_ { i} -x_ {i-1}) f (x_ {i-1}, y_ {i-1})} .
корекція:
yi = yi - 1 + (xi - xi - 1) f (xi - 1, yi - 1) + f (xi, y ~ i) 2 {\ displaystyle y_ {i} = y_ {i-1} + (x_ {i} -x_ {i-1}) {\ frac {f (x_ {i-1}, y_ {i-1}) + f (x_ {i}, {\ tilde {y}} _ {i} )} {2}}} .
Для підвищення точності коригувальну ітерацію можна повторити, підставляючи y ~ i = y i {\ displaystyle {\ tilde {y}} _ {i} = y_ {i}} .
Модифікований метод Ейлера з перерахунком має другий порядок точності, однак для його реалізації необхідно як мінімум двічі обчислювати f (x, y) {\ displaystyle f (x, y)} . Метод Ейлера з перерахунком є різновидом методів Рунге-Кутта (Предиктор-коректор).
Двокроковий метод Адамса - Башфорта [ правити | правити код ]
Інший спосіб підвищити точність методу полягає у використанні не одного, а декількох обчислених раніше значень функції:
y i + 1 = y i + 3 2 h f (x i, y i) - 1 | 2 h f (x i - 1, y i - 1). {\ Displaystyle y_ {i + 1} = y_ {i} + {\ tfrac {3} {2}} hf (x_ {i}, y_ {i}) - {\ tfrac {1} {2}} hf ( x_ {i-1}, y_ {i-1}).}
це лінійний багатокроковий метод .
Реалізації на мовах програмування [ правити | правити код ]
Реалізація на мові Сі для функції f (x, y) = 6 x 2 + 5 x y {\ displaystyle f (x, y) = 6x ^ {2} + 5xy} .
#include <stdio.h> double func (double x, double y) {return 6 * x * x + 5 * x * y; // функція першої похідної} int main (int argc, char ** argv) {int i, n; double x, y, h; h = 0.01; // крок n = 10; // кількість ітерацій x = 1; // x0 y = 1; // y0 for (i = 0; i <n; i ++) {y + = h * func (x, y); // обчислення yi x + = h; } Return EXIT_SUCCESS; }
Реалізація на мові Python 3.7 :
# N - кількість ітерацій, h - крок, (x, y) - початкова точка def Euler (n = 10, h = 0.01, x = 1, y = 1): for i in range (n): y + = h * function (x, y) x + = h return x, y # рішення def function (x, y): return 6 * x ** 2 + 5 * x * y # функція першої похідної print (Euler ())
- Ейлер Л. Інтегральне числення. Том 1. - М .: ГІТТЛ. Тисяча дев'ятсот п'ятьдесят-шість. [1]
- Бабенко К. І. Основи чисельного аналізу. - М .: Наука. 1986.