В математике и вычислительной технике используется метод Эйлера (также называемый прямой метод Эйлера ) - это числовая процедура первого порядка для решения обыкновенных дифференциальных уравнений (ОДУ) с заданным начальным значением. Это самый простой явный метод для численного интегрирования обыкновенных дифференциальных уравнений и простейший метод Рунге – Кутта. Метод Эйлера назван в честь Леонарда Эйлера, который рассмотрел его в своей книге Institutionum Calculi Integratedis (опубликовано в 1768–1870 гг.).
Метод Эйлера является первым порядок, что означает, что локальная ошибка (ошибка на шаг) пропорциональна квадрату размера шага, а глобальная ошибка (ошибка в данный момент времени) пропорциональна размеру шага. Метод Эйлера часто служит основой для построения более сложных методов, например, метод предиктора – корректора.
Рассмотрим задачу вычисления формы неизвестной кривой, которая начинается в заданной точке и удовлетворяет заданному дифференциальному уравнению. Здесь дифференциальное уравнение можно представить как формулу, по которой угол наклона касательной линии к кривой может быть вычислен в любой точке кривой, если положение этой точка была рассчитана.
Идея состоит в том, что, хотя кривая изначально неизвестна, ее начальная точка, которую мы обозначаем , известна (см. рисунок вверху справа). Затем из дифференциального уравнения можно вычислить наклон кривой в и, следовательно, касательную.
Сделайте небольшой шаг по касательной до точки Вдоль этого небольшого шага наклон не слишком сильно меняется, поэтому будет близко к кривой. Если мы сделаем вид, что все еще на кривой, рассуждения будут те же, что и для точки выше можно использовать. После нескольких шагов многоугольная кривая вычисляется. В общем, эта кривая не отклоняется слишком далеко от исходной неизвестной кривой, и ошибку между двумя кривыми можно сделать небольшой, если размер шага достаточно мал и интервал вычислений конечен:
Выберите значение для размера каждого шага и установите . Теперь один шаг метода Эйлера от до :
Значение - аппроксимация решения ОДУ в момент времени : . Метод Эйлера явный, то есть решение является явной функцией от для .
Хотя метод Эйлера интегрирует ОДУ первого порядка, любое ОДУ порядка N может быть представлено как система ОДУ первого порядка: для обработки уравнения
вводим вспомогательные переменные и получим эквивалентное уравнение:
Это система первого порядка по переменной и может обрабатываться методом Эйлера или, фактически, любой другой схемой для систем первого порядка.
Учитывая начальное проблема стоимости
мы хотели бы использовать метод Эйлера для аппроксимации .
Метод Эйлера:
поэтому сначала мы должны вычислить . В этом простом дифференциальном уравнении функция определяется как . У нас есть
Выполнив описанный выше шаг, мы нашли наклон прямой, касательной к кривой решения в точке . Напомним, что наклон определяется как изменение в , деленное на изменение в или .
Следующий шаг - умножить указанное выше значение на размер шага , который мы приравняйте к единице здесь:
Так как размер шага - это изменение , когда мы умножаем размер шага и наклон касательной, мы получаем изменение значение. Затем это значение добавляется к начальному значению , чтобы получить следующее значение, которое будет использоваться для вычислений.
Чтобы найти , <243, необходимо повторить описанные выше действия.>и .
Из-за повторяющегося характера этого алгоритма может быть полезно организовать вычисления в виде диаграммы, как показано ниже, чтобы избежать ошибок.
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 |
Результат этого вычисления состоит в том, что . Точное решение дифференциального уравнения: , поэтому . Хотя приближение метода Эйлера не было очень точным в этом конкретном случае, особенно из-за большого размера шага , его поведение качественно правильное, как показано на рисунке.
clear; clc; закрыть все'); y0 = 1; t0 = 0; h = 1; % try: h = 0,01 tn = 4; % равно: t0 + h * n, где n число шагов [t, y] = Эйлера (t0, y0, h, tn); сюжет (t, y, 'b'); % точное решение (y = e ^ t): tt = (t0: 0,001: tn); yy = ехр (tt); Оставайтесь на линии'); сюжет (tt, yy, 'r'); откладывать'); легенда ('Эйлер', 'Точный'); функция [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 = нули (размер (t)); у (1) = у0; для 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% в этом случае f (y, t) = f (y) function dydt = f (y, t) dydt = y; конец% ВЫХОД:% 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% ПРИМЕЧАНИЕ: Код также выводит график сравнения
Ниже приведен код примера в R язык программирования.
# ============ # РЕШЕНИЕ # y '= y, где y' = f (t, y) # затем: 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
Как предлагается во введении, метод Эйлера более точен, если размер шага меньше. В таблице ниже показан результат с разными размерами шага. Верхняя строка соответствует примеру из предыдущего раздела, а вторая строка проиллюстрирована на рисунке.
размер шага | результат метода Эйлера | ошибка |
---|---|---|
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), вносимая методом Эйлера, определяется разницей между этими уравнениями:
Этот результат действителен, если имеет ограниченную третью производную.
Это показывает, что для малых , локальная ошибка усечения приблизительно пропорциональна . Это делает метод Эйлера менее точным (для малых ), чем другие методы более высокого порядка, такие как методы Рунге-Кутты и линейный многоступенчатый методы, для которых локальная ошибка усечения пропорциональна большей степени размера шага.
Несколько иную формулировку локальной ошибки усечения можно получить, используя форму Лагранжа для остаточного члена в теореме Тейлора. Если имеет непрерывную вторую производную, то существует такие, что
В приведенных выше выражениях для ошибки вторую производную неизвестного точного решения можно заменить выражением, содержащим правую часть дифференциального уравнения. Действительно, из уравнения следует
Глобальная ошибка усечения - это ошибка в фиксированное время , после того, сколько шагов необходимо предпринять методам, чтобы достичь этого времени из начального момента. Глобальная ошибка усечения - это совокупный эффект локальных ошибок усечения, совершаемых на каждом шаге. Количество шагов легко определяется как , что пропорционально , а ошибка, совершаемая на каждом этапе, пропорциональна (см. предыдущий раздел). Таким образом, следует ожидать, что глобальная ошибка усечения будет пропорциональна .
. Это интуитивное рассуждение можно сделать точным. Если решение имеет ограниченную вторую производную и является непрерывным по Липшицу в своем второй аргумент, то глобальная ошибка усечения (GTE) ограничена
где - верхняя граница второй производной от на данном интервале, а - константа Липшица для .
Точная форма этой границы: имеет небольшое практическое значение, так как в большинстве случаев граница значительно переоценивает действительную ошибку, допущенную методом Эйлера. Важно то, что он показывает, что глобальная ошибка усечения (приблизительно) пропорциональна . По этой причине метод Эйлера считается методом первого порядка.
Метод Эйлера также может быть численно нестабильным, особенно для жестких уравнений, что означает, что численное решение становится очень большим для уравнений, в которых точное решение нет. Это можно проиллюстрировать с помощью линейного уравнения
Точное решением является , которое убывает до нуля при . Однако, если к этому уравнению применить метод Эйлера с размером шага , то численное решение качественно неверно: оно колеблется и растет (см. Рисунок). Вот что значит быть нестабильным. Если используется меньший размер шага, например , численное решение действительно затухает до нуля.
Розовый диск показывает область устойчивости для метода Эйлера.Если метод Эйлера применяется к линейному уравнению , тогда численное решение будет неустойчивым, если произведение находится за пределами области
показано справа. Эта область называется (линейной) областью устойчивости. В этом примере равно −2,3, поэтому, если , то , который находится за пределами области стабильности, и, следовательно, численное решение нестабильно.
Это ограничение - наряду с медленной сходимостью ошибки с h - означает, что метод Эйлера используется нечасто, за исключением простого примера численного интегрирования.
В ходе обсуждения до сих пор игнорировались последствия ошибки округления. На шаге n метода Эйлера ошибка округления примерно равна величине εy n, где ε - машинный эпсилон. Предполагая, что все ошибки округления имеют примерно одинаковый размер, общая ошибка округления за N шагов будет примерно Nεy 0, если все ошибки указывают в одном направлении. Поскольку количество шагов обратно пропорционально размеру шага h, общая ошибка округления пропорциональна ε / h. В действительности, однако, крайне маловероятно, что все ошибки округления указывают в одном направлении. Если вместо этого предполагается, что ошибки округления являются независимыми случайными величинами, то ожидаемая общая ошибка округления пропорциональна .
Таким образом, для чрезвычайно При малых значениях размера шага ошибка усечения будет небольшой, но влияние ошибки округления может быть большим. Большей части эффекта ошибки округления можно легко избежать, если использовать компенсированное суммирование в формуле для метода Эйлера.
Простая модификация Метод Эйлера, который устраняет проблемы устойчивости, отмеченные в предыдущем разделе, - это обратный метод Эйлера :
Он отличается от (стандартного или прямого) метода Эйлера тем, что функция оценивается в конечной точке шага, а не в начальной точке. Обратный метод Эйлера - это неявный метод, что означает, что формула обратного метода Эйлера имеет с обеих сторон, поэтому при применении обратного метода Эйлера мы должны решить уравнение. Это удорожает реализацию.
Другие модификации метода Эйлера, которые помогают с устойчивостью, дают экспоненциальный метод Эйлера или полунеявный метод Эйлера.
Более сложные методы позволяют достичь более высокого порядка (и больше точности). Одна из возможностей - использовать больше функциональных оценок. Это иллюстрируется методом средней точки, который уже упоминался в этой статье:
Это приводит к семейству методов Рунге – Кутта.
Другая возможность - использовать больше прошлых значений, так как иллюстрируется двухэтапным методом Адамса – Башфорта:
Это приводит к семейству линейных многоступенчатых методов. Существуют и другие модификации, которые используют методы сжатия данных для минимизации использования памяти
В фильме Скрытые фигуры, Кэтрин Гобл прибегает к методу Эйлера при вычислении входа в атмосферу космонавта Джона Гленна с околоземной орбиты.
Викибук Исчисление имеет страницу по теме: Метод Эйлера |