Метод Эйлера - Euler method

Иллюстрация метода Эйлера. Неизвестная кривая выделена синим цветом, а ее полигональная аппроксимация - красным.

В математике и вычислительной науке , то метод Эйлер (также называемый вперед методом Эйлера ) представляет собой первый порядок численной процедура решения обыкновенных дифференциальных уравнений (ОДУ) с заданным начальным значением . Это самый основной явный метод для численного интегрирования обыкновенных дифференциальных уравнений и является самым простым методом Рунге-Кутта . Метод Эйлера назван в честь Леонхарда Эйлера , который рассмотрел его в своей книге Institutionum Calculi Integratedis (опубликованной в 1768–1870 гг.).

Метод Эйлера - это метод первого порядка, что означает, что локальная ошибка (ошибка на шаг) пропорциональна квадрату размера шага, а глобальная ошибка (ошибка в данный момент времени) пропорциональна размеру шага. Метод Эйлера часто служит основой для построения более сложных методов, например, метода предиктора-корректора .

Неформальное геометрическое описание

Рассмотрим задачу вычисления формы неизвестной кривой, которая начинается в данной точке и удовлетворяет данному дифференциальному уравнению. Здесь, дифференциальное уравнение можно рассматривать как формулу , с помощью которого наклон по касательной к кривой может быть вычислена в любой точке на кривой, после того , как положение этой точки было рассчитано.

Идея состоит в том, что, хотя кривая изначально неизвестна, ее начальная точка, которую мы обозначаем, известна (см. Рисунок вверху справа). Затем из дифференциального уравнения можно вычислить наклон кривой в точке и, таким образом, касательную линию.

Сделайте небольшой шаг по касательной до точки. На этом маленьком шаге наклон не слишком сильно меняется, поэтому он будет близок к кривой. Если мы притворимся, что это все еще на кривой, можно использовать те же рассуждения, что и для пункта выше. После нескольких шагов вычисляется многоугольная кривая . В общем, эта кривая не отклоняется слишком далеко от исходной неизвестной кривой, и ошибку между двумя кривыми можно сделать небольшой, если размер шага достаточно мал и интервал вычислений конечен:

Выберите значение размера каждого шага и установите . Теперь один шаг метода Эйлера от до :

Значение является приближением решения ОДУ в момент времени : . Метод Эйлера является явным , т. Е. Решение является явной функцией для .

Хотя метод Эйлера интегрирует ОДУ первого порядка, любое ОДУ порядка N может быть представлено как система ОДУ первого порядка: для обработки уравнения

,

введем вспомогательные переменные и получим эквивалентное уравнение:

Это система первого порядка по переменной, и ее можно обработать методом Эйлера или, фактически, любой другой схемой для систем первого порядка.

Пример

Учитывая проблему начального значения

мы хотели бы использовать метод Эйлера для аппроксимации .

Используя размер шага равный 1 ( h = 1)

Иллюстрацией численного интегрирования уравнения Блю является метод Эйлера; зеленый - метод средней точки ; красный - точное решение. Размер шага h  = 1.0.

Метод Эйлера

поэтому сначала мы должны вычислить . В этом простом дифференциальном уравнении функция определяется как . У нас есть

Выполнив вышеуказанный шаг, мы нашли наклон линии, касательной к кривой решения в этой точке . Напомним, что наклон определяется как изменение, деленное на изменение , или .

Следующий шаг - умножить указанное выше значение на размер шага , который мы здесь принимаем равным единице:

Поскольку размер шага - это изменение , когда мы умножаем размер шага и наклон касательной, мы получаем изменение значения. Затем это значение добавляется к начальному значению, чтобы получить следующее значение, которое будет использоваться для вычислений.

Вышеуказанные шаги необходимо повторить, чтобы найти , и .

Из-за повторяющегося характера этого алгоритма может быть полезно организовать вычисления в виде диаграммы, как показано ниже, чтобы избежать ошибок.

0 1 0 1 1 1 2
1 2 1 2 1 2 4
2 4 2 4 1 4 8
3 8 3 8 1 8 16

Вывод этого вычисления таков . Точное решение дифференциального уравнения таково . Хотя приближение метода Эйлера не было очень точным в данном конкретном случае, особенно из-за большого размера шага значения , его поведение качественно правильное, как показано на рисунке.

Пример кода MATLAB

clear; clc; close('all');
y0 = 1;
t0 = 0;
h = 1; % try: h = 0.01
tn = 4; % equal to: t0 + h*n, with n the number of steps
[t, y] = Euler(t0, y0, h, tn);
plot(t, y, 'b');

% exact solution (y = e^t):
tt = (t0:0.001:tn);
yy = exp(tt);
hold('on');
plot(tt, yy, 'r');
hold('off');
legend('Euler', 'Exact');

function [t, y] = Euler(t0, y0, h, tn)
    fprintf('%10s%10s%10s%15s\n', 'i', 'yi', 'ti', 'f(yi,ti)');
    fprintf('%10d%+10.2f%+10.2f%+15.2f\n', 0, y0, t0, f(y0, t0));
    t = (t0:h:tn)';
    y = zeros(size(t));
    y(1) = y0;
    for i = 1:1:length(t) - 1
        y(i + 1) = y(i) + h * f(y(i), t(i));
        fprintf('%10d%+10.2f%+10.2f%+15.2f\n', i, y(i + 1), t(i + 1), f(y(i + 1), t(i + 1)));
    end
end

% in this case, f(y,t) = f(y)
function dydt = f(y, t)
    dydt = y;
end

% OUTPUT:
%         i        yi        ti       f(yi,ti)
%         0     +1.00     +0.00          +1.00
%         1     +2.00     +1.00          +2.00
%         2     +4.00     +2.00          +4.00
%         3     +8.00     +3.00          +8.00
%         4    +16.00     +4.00         +16.00
% NOTE: Code also outputs a comparison plot

Пример кода R

Графический вывод кода языка программирования R для поставленного примера

Ниже приведен код примера в языке программирования R .

# ============
# SOLUTION to
#   y' = y,   where y' = f(t,y)
# then:
f <- function(ti,y) y

# INITIAL VALUES:
t0 <- 0
y0 <- 1
h  <- 1
tn <- 4

# Euler's method: function definition
Euler <- function(t0, y0, h, tn, dy.dt) {
  # dy.dt: derivative function
  
  # t sequence:
  tt <- seq(t0, tn, by=h)
  # table with as many rows as tt elements:
  tbl <- data.frame(ti=tt)
  tbl$yi <- y0 # Initializes yi with y0
  tbl$Dy.dt[1] <- dy.dt(tbl$ti[1],y0) # derivative
  for (i in 2:nrow(tbl)) {
    tbl$yi[i] <- tbl$yi[i-1] + h*tbl$Dy.dt[i-1]
    # For next iteration:
    tbl$Dy.dt[i] <- dy.dt(tbl$ti[i],tbl$yi[i])
  }
  return(tbl)
}

# Euler's method: function application
r <- Euler(t0, y0, h, tn, f)
rownames(r) <- 0:(nrow(r)-1) # to coincide with index n

# Exact solution for this case: y = exp(t)
#       added as an additional column to r
r$y <- exp(r$ti)

# TABLE with results:
print(r)

plot(r$ti, r$y, type="l", col="red", lwd=2)
lines(r$ti, r$yi, col="blue", lwd=2)
grid(col="black")
legend("top",  legend = c("Exact", "Euler"), lwd=2,  col = c("red", "blue"))

# OUTPUT:
#
#   ti yi Dy.dt         y
# 0  0  1     1  1.000000
# 1  1  2     2  2.718282
# 2  2  4     4  7.389056
# 3  3  8     8 20.085537
# 4  4 16    16 54.598150
# NOTE: Code also outputs a comparison plot

Использование других размеров шага

Тот же рисунок для h  = 0,25.

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

размер шага результат метода Эйлера ошибка
1 16.00 38,60
0,25 35,53 19.07
0,1 45,26 9,34
0,05 49,56 5,04
0,025 51,98 2,62
0,0125 53,26 1,34

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

Другие методы, такие как метод средней точки, также проиллюстрированный на рисунках, ведут себя более благоприятно: глобальная ошибка метода средней точки примерно пропорциональна квадрату размера шага. По этой причине метод Эйлера называется методом первого порядка, а метод средней точки - методом второго порядка.

Мы можем экстраполировать из приведенной выше таблицы, что размер шага, необходимый для получения ответа, верного с точностью до трех десятичных знаков, составляет приблизительно 0,00001, что означает, что нам нужно 400 000 шагов. Такое большое количество шагов влечет за собой большие вычислительные затраты. По этой причине используются методы более высокого порядка, такие как методы Рунге – Кутта или линейные многоступенчатые методы , особенно если требуется высокая точность.

Вывод

Метод Эйлера может быть получен несколькими способами. Во-первых, геометрическое описание выше.

Другая возможность - рассмотреть разложение функции Тейлора вокруг :

Дифференциальное уравнение утверждает, что . Если это подставить в разложение Тейлора и игнорировать квадратичные члены и члены более высокого порядка, возникает метод Эйлера. Разложение Тейлора используется ниже для анализа ошибок, допущенных методом Эйлера, и его можно расширить для получения методов Рунге – Кутты .

Тесно связанный вывод заключается в замене производной прямой формулой конечных разностей ,

в дифференциальном уравнении . Опять же, это дает метод Эйлера. Аналогичное вычисление приводит к методу средней точки и обратному методу Эйлера .

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

Теперь аппроксимируем интеграл методом левого прямоугольника (только с одним прямоугольником):

Комбинируя оба уравнения, мы снова получаем метод Эйлера. Эту мысль можно продолжить, чтобы прийти к различным линейным многоступенчатым методам .

Ошибка локального усечения

Локальная ошибка усечения метода Эйлера является ошибка сделана в одном шаге. Это разница между численным решением после одного шага , и точным решением во времени . Численное решение дается формулой

Для точного решения мы используем разложение Тейлора, упомянутое в разделе Вывод выше:

Локальная ошибка усечения (LTE), вносимая методом Эйлера, определяется разницей между этими уравнениями:

Этот результат верен, если третья производная ограничена.

Это показывает, что для малых локальная ошибка усечения приблизительно пропорциональна . Это делает метод Эйлера менее точным (для малого ), чем другие методы более высокого порядка, такие как методы Рунге-Кутты и линейные многоступенчатые методы , для которых локальная ошибка усечения пропорциональна большей степени размера шага.

Несколько иную формулировку локальной ошибки усечения можно получить, используя форму Лагранжа для остаточного члена в теореме Тейлора . Если имеет непрерывную вторую производную, то существует такое, что

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

Глобальная ошибка усечения

Глобальная ошибка усечения является ошибка в фиксированный момент времени , после того , как много шагов методы необходимо принять , чтобы достичь этого времени от начального времени. Глобальная ошибка усечения - это совокупный эффект локальных ошибок усечения, совершаемых на каждом шаге. Количество шагов легко определяется как равное , которое пропорционально , а ошибка, совершаемая на каждом шаге, пропорциональна (см. Предыдущий раздел). Таким образом, следует ожидать, что глобальная ошибка усечения будет пропорциональна .

Это интуитивное рассуждение можно уточнить. Если решение имеет ограниченную вторую производную и является липшицевы по второму аргументу, то глобальная ошибка усечения (ГТД) ограничена

где - верхняя граница второй производной функции на заданном интервале, а - константа Липшица функции .

Точная форма этой границы не имеет большого практического значения, так как в большинстве случаев граница значительно переоценивает фактическую ошибку, допущенную методом Эйлера. Важно то, что он показывает, что глобальная ошибка усечения (приблизительно) пропорциональна . По этой причине метод Эйлера называется методом первого порядка.

Численная стабильность

Решение вычислено методом Эйлера с размером шага (синие квадраты) и (красные кружки). Черная кривая показывает точное решение.

Метод Эйлера также может быть численно нестабильным , особенно для жестких уравнений , что означает, что численное решение становится очень большим для уравнений, для которых нет точного решения. Это можно проиллюстрировать с помощью линейного уравнения

Точное решение равно нулю при . Однако, если к этому уравнению с размером шага применить метод Эйлера , то численное решение качественно неверно: оно колеблется и растет (см. Рисунок). Вот что значит быть нестабильным. Если, например , используется меньший размер шага , численное решение действительно уменьшается до нуля.

Розовый диск показывает область устойчивости метода Эйлера.

Если к линейному уравнению применяется метод Эйлера , то численное решение неустойчиво, если продукт находится за пределами области

показано справа. Эта область называется (линейной) областью устойчивости . В примере это −2,3, значит, если then, который находится за пределами области стабильности, и, следовательно, численное решение является нестабильным.

Это ограничение - наряду с медленной сходимостью ошибки с h - означает, что метод Эйлера используется нечасто, за исключением простого примера численного интегрирования.

Ошибки округления

При обсуждении до сих пор игнорировались последствия ошибки округления . На шаге n метода Эйлера ошибка округления примерно равна величине ε y n, где ε - машинный эпсилон . Предполагая, что все ошибки округления имеют примерно одинаковый размер, объединенная ошибка округления за N шагов составляет примерно N ε y 0, если все ошибки указывают в одном направлении. Поскольку количество шагов обратно пропорционально размеру шага h , общая ошибка округления пропорциональна ε / h . В действительности, однако, крайне маловероятно, что все ошибки округления указывают в одном и том же направлении. Если вместо этого предполагается, что ошибки округления являются независимыми случайными величинами, то ожидаемая общая ошибка округления пропорциональна .

Таким образом, для чрезвычайно малых значений размера шага ошибка усечения будет небольшой, но эффект ошибки округления может быть большим. Большей части эффекта ошибки округления можно легко избежать, если использовать компенсированное суммирование в формуле для метода Эйлера.

Модификации и расширения

Простая модификация метода Эйлера, которая устраняет проблемы устойчивости, отмеченные в предыдущем разделе, - это обратный метод Эйлера :

Он отличается от (стандартного или прямого) метода Эйлера тем, что функция вычисляется в конечной точке шага, а не в начальной точке. Обратный метод Эйлера является неявным методом , что означает, что формула обратного метода Эйлера имеет обе стороны, поэтому при применении обратного метода Эйлера мы должны решить уравнение. Это удорожает реализацию.

Другие модификации метода Эйлера, которые помогают с устойчивостью, дают экспоненциальный метод Эйлера или полунеявный метод Эйлера .

Более сложные методы позволяют достичь более высокого порядка (и большей точности). Одна из возможностей - использовать больше вычислений функций. Это иллюстрируется методом средней точки, который уже упоминался в этой статье:

.

Это приводит к семейству методов Рунге – Кутты .

Другая возможность - использовать больше прошлых значений, как показано на двухэтапном методе Адамса – Башфорта:

Это приводит к семейству линейных многоступенчатых методов . Существуют и другие модификации, в которых используются методы сжатия данных для минимизации использования памяти.

В популярной культуре

В фильме Скрытых Цифр , Кэтрин гоблены прибегает к методу Эйлера в расчете повторного ввода астронавт Джон Гленн с околоземной орбиты.

Смотрите также

Примечания

использованная литература

внешние ссылки