Русская Википедия:Метод Эйлера

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Метод Эйлера — простейший численный метод решения систем обыкновенных дифференциальных уравнений. Впервые описан Леонардом Эйлером в 1768 году в работе «Интегральное исчисление»[1]. Метод Эйлера является явным, одношаговым методом первого порядка точности. Он основан на аппроксимации интегральной кривой кусочно-линейной функцией — так называемой ломаной Эйлера.

Файл:Euler method.svg
Ломаная Эйлера (красная линия) — приближённое решение в пяти узлах задачи Коши — и точное решение этой задачи (выделено синим цветом)

Описание метода

Пусть дана задача Коши для уравнения первого порядка:

<math>

\frac{dy}{dx}=f(x,y), </math>

<math>

y_{|_{x=x_0}}=y_0, </math> где функция <math>f</math> определена на некоторой области <math>D\subset \mathbb{R}^2</math>. Решение ищется на полуинтервале <math>(x_0,b]</math>. На этом промежутке введём узлы <math>x_0<x_1<\dots<x_n\le b.</math> Приближенное решение в узлах <math>x_i</math>, которое обозначим через <math>y_i</math>, определяется по формуле

<math>

y_i=y_{i-1}+(x_i-x_{i-1})f(x_{i-1},y_{i-1}),\quad i=1,2,3,\dots,n. </math> Эти формулы непосредственно обобщаются на случай систем обыкновенных дифференциальных уравнений.

Оценка погрешности метода на шаге и в целом

Погрешность на шаге, или локальная погрешность, — это разность между численным решением после одного шага вычисления <math>y_i</math> и точным решением в точке <math>x_i = x_{i-1}+h</math>. Численное решение задаётся формулой

<math> y_i = y_{i-1} + h f(x_{i-1}, y_{i-1}). \quad</math>

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

<math> y(x_{i-1} + h) = y(x_{i-1}) + h y'(x_{i-1}) + O(h^2). </math>

Локальную ошибку <math>L</math> получаем, вычитая из второго равенства первое:

<math> L = y(x_{i-1} + h) - y_i = O(h^2) . </math>

Это справедливо, если <math>y</math> имеет непрерывную вторую производную[2]. Другим достаточным условием справедливости этой оценки, из которого вытекает предыдущее и которое обычно может быть легко проверено, является непрерывная дифференцируемость <math> f(x, y)</math> по обоим аргументам[3].

Погрешность в целом, глобальная или накопленная погрешность — это погрешность в последней точке произвольного конечного отрезка интегрирования уравнения. Для вычисления решения в этой точке требуется <math> S/h </math> шагов, где <math> S</math>  — длина отрезка. Поэтому глобальная погрешность метода <math>G = O(h^2S/h)=O(h)</math>.

Таким образом, метод Эйлера является методом первого порядка — имеет погрешность на шаге <math> O(h^2) </math> и погрешность в целом <math>O(h)</math>[3].

Значение метода Эйлера

Метод Эйлера являлся исторически первым методом численного решения задачи Коши. О. Коши использовал этот метод для доказательства существования решения задачи Коши. Ввиду невысокой точности и вычислительной неустойчивости для практического нахождения решений задачи Коши метод Эйлера применяется редко. Однако в виду своей простоты метод Эйлера находит своё применение в теоретических исследованиях дифференциальных уравнений, задач вариационного исчисления и ряда других математических проблем.

Модификации и обобщения

Модифицированный метод Эйлера с пересчетом

Повысить точность и устойчивость вычисления решения можно с помощью явного метода Эйлера следующего вида.

Прогноз:

<math>\tilde y_i=y_{i-1}+(x_i-x_{i-1})f(x_{i-1},y_{i-1})</math>.

Коррекция:

<math>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}</math>.

Для повышения точности корректирующую итерацию можно повторить, подставляя <math>\tilde y_i=y_i</math> .

Модифицированный метод Эйлера с пересчетом имеет второй порядок точности, однако для его реализации необходимо как минимум дважды вычислять <math>f(x, y)</math>. Метод Эйлера с пересчетом представляет собой разновидность методов Рунге-Кутты (предиктор-корректор).

Двухшаговый метод Адамса — Башфорта

Другой способ повысить точность метода заключается в использовании не одного, а нескольких вычисленных ранее значений функции:

<math> y_{i+1} = y_i + \tfrac32 h f(x_{i}, y_{i}) - \tfrac12 h f(x_{i-1}, y_{i-1}). </math>

Это линейный многошаговый метод.

Реализации на языках программирования

Реализация на языке Си для функции<math> f(x,y)=6x^2+5xy

</math>.

#include <stdio.h>  // printf()
#include <stdlib.h> // EXIT_SUCCESS
// функция первой производной
double f( double const x, double const y ) { return 6 * x * x + 5 * x * y; }
// точка входа
int main()
{
	double	const	h = .01;    // размер шага
	double			x = 1;      // x_0
	double			y = 1;      // y_0
	int             n = 10;     // количество итераций
    // итерации по методу Эйлера
    for ( ; n--; y += h * f( x, y ), x += h );
	// печать результата
	printf( "x:\t%-5.7lf\ny:\t%-5.7lf", x, y );
    // выход
    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())

Реализация на языке Lua:

n, h, x, y = 10, 0.01, 1, 1 -- количество итераций, шаг, координаты начальной точки
function f (x, y) return 6*x^2+5*x*y end -- функция первой производной
for i = 1, n do
  x, y = x + h, y + h * f(x, y)
end
print('x: '..x..' y: '..y)

См. также

Примечания

Шаблон:Примечания

Литература

  • Эйлер Л. Интегральное исчисление. Том 1. — М.: ГИТТЛ. 1956. [1]
  • Бабенко К. И. Основы численного анализа. — М.: Наука. 1986.

Шаблон:ВС Шаблон:Метод конечных разностей

  1. Эйлер Л. Интегральное исчисление, том 1, раздел 2, гл. 7.
  2. Шаблон:Citation
  3. 3,0 3,1 Шаблон:Книга