Метод Эйлера — простейший численный метод решения систем обыкновенных дифференциальных уравнений. Впервые описан Леонардом Эйлером в 1768 году в работе «Интегральное исчисление»[1]. Метод Эйлера является явным, одношаговым методом первого порядка точности. Он основан на аппроксимации интегральной кривой кусочно-линейной функцией, так называемой ломаной Эйлера.
Пусть дана задача Коши для уравнения первого порядка:
где функция определена на некоторой области . Решение ищется на интервале . На этом интервале введем узлы:
Приближенное решение в узлах , которое обозначим через , определяется по формуле:
Эти формулы непосредственно обобщаются на случай систем обыкновенных дифференциальных уравнений.
Погрешность на шаге или локальная погрешность — это разность между численным решением после одного шага вычисления и точным решением в точке . Численное решение задаётся формулой
Точное решение можно разложить в ряд Тейлора:
Локальную ошибку получаем, вычитая из второго равенства первое:
Это справедливо, если имеет непрерывную вторую производную[2]. Другим достаточным условием справедливости этой оценки, из которого вытекает предыдущее и которое обычно может быть легко проверено, является непрерывная дифференцируемость по обоим аргументам[3].
Погрешность в целом, глобальная или накопленная погрешность — это погрешность в последней точке произвольного конечного отрезка интегрирования уравнения. Для вычисления решения в этой точке требуется шагов, где длина отрезка. Поэтому глобальная погрешность метода .
Таким образом, метод Эйлера является методом первого порядка — имеет погрешность на шаге и погрешность в целом [3].
Метод Эйлера являлся исторически первым методом численного решения задачи Коши. О. Коши использовал этот метод для доказательства существования решения задачи Коши. Ввиду невысокой точности и вычислительной неустойчивости для практического нахождения решений задачи Коши метод Эйлера применяется редко. Однако в виду своей простоты метод Эйлера находит своё применение в теоретических исследованиях дифференциальных уравнений, задач вариационного исчисления и ряда других математических проблем.
Повысить точность и устойчивость вычисления решения можно с помощью неявного метода Эйлера следующего вида.
Прогноз:
.
Коррекция:
.
Для повышения точности корректирующую итерацию можно повторить, подставляя .
Модифицированный метод Эйлера с пересчетом имеет второй порядок точности, однако для его реализации необходимо как минимум дважды вычислять . Метод Эйлера с пересчетом представляет собой разновидность методов Рунге-Кутты (предиктор-корректор).
Другой способ повысить точность метода заключается в использовании не одного, а нескольких вычисленных ранее значений функции:
Реализация на языке Си для функции .
#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())
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .