WikiZero - Метод Ейлера

  1. Оцінка похибки методу на етапі і в цілому [ правити | правити код ]
  2. Модифікований метод Ейлера з перерахунком [ правити | правити код ]
  3. Двокроковий метод Адамса - Башфорта [ правити | правити код ]
  4. Реалізації на мовах програмування [ правити | правити код ]

open wikipedia design.

Метод Ейлера - найпростіший чисельний метод рішення систем звичайних диференціальних рівнянь . вперше описаний Леонардом Ейлером в 1768 році в роботі «Інтегральне числення» [1] . Метод Ейлера є явним, однокроковим методом першого порядку точності. Він заснований на апроксимації інтегральної кривої кусочно-лінійною функцією, так званої ламаної Ейлера.

нехай дана задача Коші для рівняння першого порядку:

d y d x = f (x, y), {\ displaystyle {\ frac {dy} {dx}} = f (x, y),} 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},} y |  x = x 0 = y 0, {\ displaystyle y_ {| _ {x = x_ {0}}} = y_ {0},}

де функція f {\ displaystyle f} де функція f {\ displaystyle f}   визначена на деякій області D ⊂ R 2 {\ displaystyle D \ subset \ mathbb {R} ^ {2}} визначена на деякій області 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 0 <x 1 <⋯ <x n ≤ b

Наближене рішення у вузлах x i {\ displaystyle x_ {i}} Наближене рішення у вузлах x i {\ displaystyle x_ {i}}   , Яке позначимо через y i {\ displaystyle y_ {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 = y i - 1 + (x i - x i - 1) f (x i - 1, y i - 1), i = 1, 2, 3,

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

Оцінка похибки методу на етапі і в цілому [ правити | правити код ]

Похибка на кроці або локальна похибка - це різниця між чисельним рішенням після одного кроку обчислення y i {\ displaystyle y_ {i}} Похибка на кроці або локальна похибка - це різниця між чисельним рішенням після одного кроку обчислення y i {\ displaystyle y_ {i}}   і точним рішенням в точці x i = x i - 1 + h {\ displaystyle x_ {i} = x_ {i-1} + h} і точним рішенням в точці 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 i = y i - 1 + h f (x i - 1, y i - 1)

Точне рішення можна розкласти в ряд Тейлора :

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}).} y (x i - 1 + h) = y (x i - 1) + h y '(x i - 1) + O (h 2)

Локальну помилку L {\ displaystyle L} Локальну помилку 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}).} L = y (x i - 1 + h) - y i = O (h 2)

Це справедливо, якщо y {\ displaystyle y} Це справедливо, якщо y {\ displaystyle y}   має безперервну другу похідну   [2] має безперервну другу похідну [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 2) {\ displaystyle O (h ^ {2})}   і похибка в цілому O (h) {\ displaystyle O (h)}   [3] і похибка в цілому 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})} 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}}} 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}} Для підвищення точності коригувальну ітерацію можна повторити, підставляючи y ~ i = y i {\ displaystyle {\ tilde {y}} _ {i} = y_ {i}} .

Модифікований метод Ейлера з перерахунком має другий порядок точності, однак для його реалізації необхідно як мінімум двічі обчислювати f (x, y) {\ displaystyle f (x, y)} Модифікований метод Ейлера з перерахунком має другий порядок точності, однак для його реалізації необхідно як мінімум двічі обчислювати 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}).} y i + 1 = y i + 3 2 h f (x i, y i) - 1 | 2 h f (x i - 1, y i - 1)

це лінійний багатокроковий метод .

Реалізації на мовах програмування [ правити | правити код ]

Реалізація на мові Сі для функції f (x, y) = 6 x 2 + 5 x y {\ displaystyle f (x, y) = 6x ^ {2} + 5xy} Реалізація на мові   Сі   для функції 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.

Новости