Метод Эйлера

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

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

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

Содержание
  • 1 Неформальное геометрическое описание
  • 2 Пример
    • 2.1 Использование размера шага, равного 1 ( h = 1)
    • 2.2 Пример кода MATLAB
    • 2.3 Пример кода R
    • 2.4 Использование других размеров шага
  • 3 Деривация
  • 4 Локальная ошибка усечения
  • 5 Глобальная ошибка усечения
  • 6 Числовой стабильность
  • 7 Ошибки округления
  • 8 Модификации и расширения
  • 9 В популярной культуре
  • 10 См. также
  • 11 Примечания
  • 12 Ссылки
  • 13 Внешние ссылки
Неформальное геометрическое описание

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

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

Сделайте небольшой шаг по касательной до точки A 1. {\ displaystyle A_ {1}.}A_ {1}. Вдоль этого небольшого шага наклон не слишком сильно меняется, поэтому A 1 {\ displaystyle A_ {1}}A_ {1} будет близко к кривой. Если мы сделаем вид, что A 1 {\ displaystyle A_ {1}}A_ {1} все еще на кривой, рассуждения будут те же, что и для точки A 0 {\ displaystyle A_ {0}}A_{0}выше можно использовать. После нескольких шагов многоугольная кривая A 0 A 1 A 2 A 3… {\ displaystyle A_ {0} A_ {1} A_ {2} A_ {3} \ dots}A_ {0} A_ {1} A_ {2} A_ {3} \ dots вычисляется. В общем, эта кривая не отклоняется слишком далеко от исходной неизвестной кривой, и ошибку между двумя кривыми можно сделать небольшой, если размер шага достаточно мал и интервал вычислений конечен:

y ′ (t) = f (t, y (t)), y (t 0) = y 0. {\ displaystyle y '(t) = f (t, y (t)), \ qquad y (t_ {0}) = y_ {0}.}{\displaystyle y'(t)=f(t,y(t)),\qquad y(t_{0})=y_{0}.}

Выберите значение h {\ displaystyle h}h для размера каждого шага и установите tn = t 0 + nh {\ displaystyle t_ {n} = t_ {0} + nh}t_{n}=t_{0}+nh. Теперь один шаг метода Эйлера от tn {\ displaystyle t_ {n}}t_ {n} до tn + 1 = tn + h {\ displaystyle t_ {n + 1} = t_ { n} + h}t_{n+1}=t_{n}+h:

yn + 1 = yn + hf (tn, yn). {\ displaystyle y_ {n + 1} = y_ {n} + hf (t_ {n}, y_ {n}).}y_ {n + 1} = y_ {n} + hf (t_ {n }, y_ {n}).

Значение yn {\ displaystyle y_ {n}}y_ {n} - аппроксимация решения ОДУ в момент времени tn {\ displaystyle t_ {n}}t_ {n} : yn ≈ y (tn) {\ displaystyle y_ {n} \ приблизительно y (t_ {n})}y_ {n} \ приблизительно y (t_ {n}) . Метод Эйлера явный, то есть решение yn + 1 {\ displaystyle y_ {n + 1}}y_ { n + 1} является явной функцией от yi {\ displaystyle y_ {i}}y_ {i} для i ≤ ​​n {\ displaystyle i \ leq n}i \ leq n .

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

y (N) (t) = f (t, y (t), y ′ (t),…, y (N - 1) (t)) {\ displaystyle y ^ {(N)} (t) = f (t, y (t), y '(t), \ ldots, y ^ {(N-1)} (t))}y^{(N)}(t)=f(t,y(t),y'(t),\ldots,y^{(N-1)}(t)),

вводим вспомогательные переменные z 1 (t) = y (t), z 2 (t) = y ′ (t),…, z N (t) = y (N - 1) (t) {\ displaystyle z_ {1 } (t) = y (t), z_ {2} (t) = y '(t), \ ldots, z_ {N} (t) = y ^ {(N-1)} (t)}z_{1}(t)=y(t),z_{2}(t)=y'(t),\ldots,z_{N}(t)=y^{(N-1)}(t)и получим эквивалентное уравнение:

z ′ (t) = (z 1 ′ (t) ⋮ z N - 1 ′ (t) z N ′ (t)) = (y ′ (t) ⋮ y (N - 1) (t) y (N) (t)) = (z 2 (t) ⋮ z N (t) f (t, z 1 (t),…, z N (t))) { \ Displaystyle \ mathbf {z} '(t) = {\ begin {pmatrix} z_ {1}' (t) \\\ vdots \\ z_ {N-1} '(t) \\ z_ {N} '(t) \ end {pmatrix}} = {\ begin {pmatrix} y' (t) \\\ vdots \\ y ^ {(N-1)} (t) \\ y ^ {(N)} (t) \ end {pmatrix}} = {\ begin {pmatrix} z_ {2} (t) \\\ vdots \\ z_ {N} (t) \\ f (t, z_ { 1} (t), \ ldots, z_ {N} (t)) \ end {pmatrix}}}\mathbf {z} '(t)={\begin{pmatrix}z_{1}'(t)\\\vdots \\z_{N-1}'(t)\\z_{N}'(t)\end{pmatrix}}={\begin{pmatrix}y'(t)\\\vdots \\y^{(N-1)}(t)\\y^{(N)}(t)\end{pmatrix}}={\begin{pmatrix}z_{2}(t)\\\vdots \\z_{N}(t)\\f(t,z_{1}(t),\ldots,z_{N}(t))\end{pmatrix}}

Это система первого порядка по переменной z (t) {\ displaystyle \ mathbf { z} (t)}\ mathbf {z} (t) и может обрабатываться методом Эйлера или, фактически, любой другой схемой для систем первого порядка.

Пример

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

y ′ = y, y (0) = 1, {\ displaystyle y '= y, \ quad y (0) = 1,}y'=y,\quad y(0)=1,

мы хотели бы использовать метод Эйлера для аппроксимации y (4) {\ displaystyle y (4)}y(4).

Использование размера шага, равного 1 (h = 1)

Иллюстрация численного интегрирования для уравнения y ′ = y, y (0) = 1. {\ displaystyle y '= y, y (0) = 1.}y'=y,y(0)=1.Синий - метод Эйлера; зеленый - метод средней точки ; красный, точное решение, y = e t. {\ displaystyle y = e ^ {t}.}y=e^{t}.Размер шага h = 1,0.

Метод Эйлера:

y n + 1 = y n + h f (t n, y n). {\ displaystyle y_ {n + 1} = y_ {n} + hf (t_ {n}, y_ {n}). \ qquad \ qquad}y_ {n + 1} = y_ {n} + hf (t_ {n}, y_ {n}). \ Qquad \ qquad

поэтому сначала мы должны вычислить f (t 0, y 0) {\ displaystyle f (t_ {0}, y_ {0})}f(t_{0},y_{0}). В этом простом дифференциальном уравнении функция f {\ displaystyle f}fопределяется как f (t, y) = y {\ displaystyle f (t, y) = y}f(t,y)=y. У нас есть

f (t 0, y 0) = f (0, 1) = 1. {\ displaystyle f (t_ {0}, y_ {0}) = f (0,1) = 1. \ Qquad \ qquad}f (t_ {0}, y_ {0}) = f (0,1) = 1. \ qquad \ qquad

Выполнив описанный выше шаг, мы нашли наклон прямой, касательной к кривой решения в точке (0, 1) {\ displaystyle (0,1)}(0,1). Напомним, что наклон определяется как изменение в y {\ displaystyle y}y , деленное на изменение в t {\ displaystyle t}t или Δ y / Δ t {\ displaystyle \ Delta y / \ Delta t}\ Delta y / \ Delta t .

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

час ⋅ е (y 0) = 1 ⋅ 1 = 1. {\ displaystyle h \ cdot f (y_ {0}) = 1 \ cdot 1 = 1. \ qquad \ qquad}h \ cdot f (y_ {0}) = 1 \ cdot 1 = 1. \ qquad \ qquad

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

y 0 + hf (y 0) = y 1 = 1 + 1 ⋅ 1 = 2. {\ displaystyle y_ {0} + hf (y_ {0}) = y_ {1} = 1 + 1 \ cdot 1 = 2. \ Qquad \ qquad}y_ {0} + hf (y_ {0}) = y_ {1} = 1 + 1 \ cdot 1 = 2. \ qquad \ qquad

Чтобы найти y 2 {\ displaystyle y_ {2}}y_ {2} , y 3 {\ displaystyle y_ {3}}<243, необходимо повторить описанные выше действия.>и y 4 {\ displaystyle y_ {4}}y_ {4 } .

y 2 = y 1 + hf (y 1) = 2 + 1 ⋅ 2 = 4, y 3 = y 2 + hf (y 2) = 4 + 1 ⋅ 4 = 8, y 4 = y 3 + hf (y 3) = 8 + 1 ⋅ 8 = 16. {\ displaystyle {\ begin {align} y_ {2} = y_ {1} + hf ( y_ {1}) = 2 + 1 \ cdot 2 = 4, \\ y_ {3} = y_ {2} + hf (y_ {2}) = 4 + 1 \ cdot 4 = 8, \\ y_ {4 } = y_ {3} + hf (y_ {3}) = 8 + 1 \ cdot 8 = 16. \ end {align}}}{\ begin {выровнено } y_ {2} = y_ {1} + hf (y_ {1}) = 2 + 1 \ cdot 2 = 4, \\ y_ {3} = y_ {2} + hf (y_ {2}) = 4 + 1 \ cdot 4 = 8, \\ y_ {4} = y_ {3} + hf (y_ {3}) = 8 + 1 \ cdot 8 = 16. \ End {align}}

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

n {\ displaystyle n}nyn {\ displaystyle y_ {n}}y_ {n} tn {\ displaystyle t_ {n}}t_ {n} f (tn, yn) {\ displaystyle f (t_ {n) }, y_ {n})}f (t_ {n}, y_ {n}) h {\ displaystyle h}h Δ y {\ displaystyle \ Delta y}\ Delta y yn + 1 {\ displaystyle y_ {n + 1}}y_ { n + 1}
0101112
1212124
2424148
38381816

Результат этого вычисления состоит в том, что y 4 = 16 {\ displaystyle y_ {4} = 16}y_ {4} = 16 . Точное решение дифференциального уравнения: y (t) = et {\ displaystyle y (t) = e ^ {t}}y (t) = e ^ {t} , поэтому y (4) = e 4 ≈ 54,598 {\ displaystyle y (4) = e ^ {4} \ приблизительно 54,598}y (4) = e ^ {4} \ приблизительно 54,598 . Хотя приближение метода Эйлера не было очень точным в этом конкретном случае, особенно из-за большого размера шага h {\ displaystyle h}h , его поведение качественно правильное, как показано на рисунке.

пример кода MATLAB

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

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

Ниже приведен код примера в 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

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

Та же иллюстрация для h = 0,25.

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

размер шагарезультат метода Эйлераошибка
116.0038.60
0.2535.5319,07
0,145,269,34
0,0549,565,04
0,02551,982,62
0,012553,261,34

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

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

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

Вывод

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

Другая возможность - рассмотреть разложение Тейлора функции y {\ displaystyle y}y около t 0 {\ displaystyle t_ {0 }}t_ {0} :

y (t 0 + h) = y (t 0) + hy ′ (t 0) + 1 2 h 2 y ″ (t 0) + O (h 3). {\ displaystyle y (t_ {0} + h) = y (t_ {0}) + hy '(t_ {0}) + {\ frac {1} {2}} h ^ {2} y' '(t_ {0}) + O (h ^ {3}).}y(t_{0}+h)=y(t_{0})+hy'(t_{0})+{\frac {1}{2}}h^{2}y''(t_{0})+O(h^{3}).

Дифференциальное уравнение утверждает, что y ′ = f (t, y) {\ displaystyle y '= f (t, y)}y'=f(t,y). Если это подставить в разложение Тейлора и игнорировать квадратичные члены и члены более высокого порядка, возникает метод Эйлера. Расширение Тейлора используется ниже для анализа ошибки, допущенной методом Эйлера, и его можно расширить для получения методов Рунге – Кутты.

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

y ′ (t 0) ≈ y (t 0 + h) - y (t 0) h {\ displaystyle y '(t_ {0}) \ приблизительно {\ frac {y (t_ { 0} + h) -y (t_ {0})} {h}}}y'(t_{0})\approx {\frac {y(t_{0}+h)-y(t_{0})}{h}}

в дифференциальном уравнении y ′ = f (t, y) {\ displaystyle y '= f (t, y) }y'=f(t,y). Опять же, это дает метод Эйлера. Аналогичное вычисление приводит к методу средней точки и обратному методу Эйлера.

Наконец, можно интегрировать дифференциальное уравнение из t 0 {\ displaystyle t_ {0}}От t_ {0} до t 0 + h {\ displaystyle t_ {0} + h}t_ {0} + h и примените фундаментальную теорему исчисления, чтобы получить:

y (t 0 + h) - y (t 0) знак равно ∫ t 0 t 0 + hf (t, y (t)) dt. {\ displaystyle y (t_ {0} + h) -y (t_ {0}) = \ int _ {t_ {0}} ^ {t_ {0} + h} f (t, y (t)) \, \ mathrm {d} t.}y (t_ {0} + h) -y (t_ {0}) = \ int _ {t_ {0}} ^ {t_ {0} + h} f (t, y (t)) \, \ mathrm {d} t.

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

∫ t 0 t 0 + hf (t, y ( t)) dt ≈ hf (t 0, y (t 0)). {\ displaystyle \ int _ {t_ {0}} ^ {t_ {0} + h} f (t, y (t)) \, \ mathrm {d} t \ приблизительно hf (t_ {0}, y (t_ {0})).}\ int _ {t_ { 0}} ^ {t_ {0} + h} f (t, y (t)) \, \ mathrm {d} t \ приблизительно hf (t_ {0}, y (t_ {0})).

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

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

ошибка локального усечения метода Эйлера - это ошибка, сделанная за один шаг. Это разница между численным решением после одного шага, y 1 {\ displaystyle y_ {1}}y_ {1} , и точным решением в момент времени t 1 = t 0 + h {\ стиль отображения t_ {1} = t_ {0} + h}t_ {1} = t_ {0} + h . Численное решение дается формулой

y 1 = y 0 + h f (t 0, y 0). {\ displaystyle y_ {1} = y_ {0} + hf (t_ {0}, y_ {0}). \ quad}y_ {1} = y_ {0} + hf (t_ {0}, y_ {0}). \ Quad

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

y (t 0 + h) = y (t 0) + hy '(t 0) + 1 2 h 2 y ″ (t 0) + O (h 3). {\ displaystyle y (t_ {0} + h) = y (t_ {0}) + hy '(t_ {0}) + {\ frac {1} {2}} h ^ {2} y' '(t_ {0}) + O (h ^ {3}).}y(t_{0}+h)=y(t_{0})+hy'(t_{0})+{\frac {1}{2}}h^{2}y''(t_{0})+O(h^{3}).

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

LTE = y (t 0 + h) - y 1 = 1 2 h 2 y ″ (t 0) + O (h 3). {\ displaystyle \ mathrm {LTE} = y (t_ {0} + h) -y_ {1} = {\ frac {1} {2}} h ^ {2} y '' (t_ {0}) + O (h ^ {3}).}\mathrm {LTE} =y(t_{0}+h)-y_{1}={\frac {1}{2}}h^{2}y''(t_{0})+O(h^{3}).

Этот результат действителен, если y {\ displaystyle y}y имеет ограниченную третью производную.

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

Несколько иную формулировку локальной ошибки усечения можно получить, используя форму Лагранжа для остаточного члена в теореме Тейлора. Если y {\ displaystyle y}y имеет непрерывную вторую производную, то существует ξ ∈ [t 0, t 0 + h] {\ displaystyle \ xi \ in [t_ { 0}, t_ {0} + h]}\ xi \ in [t_ {0}, t_ {0} + h ] такие, что

LTE = y (t 0 + h) - y 1 = 1 2 h 2 y ″ (ξ). {\ displaystyle \ mathrm {LTE} = y (t_ {0} + h) -y_ {1} = {\ frac {1} {2}} h ^ {2} y '' (\ xi).}\mathrm {LTE} =y(t_{0}+h)-y_{1}={\frac {1}{2}}h^{2}y''(\xi).

В приведенных выше выражениях для ошибки вторую производную неизвестного точного решения y {\ displaystyle y}y можно заменить выражением, содержащим правую часть дифференциального уравнения. Действительно, из уравнения y ′ = f (t, y) {\ displaystyle y '= f (t, y)}y'=f(t,y)следует

y ″ (t 0) = ∂ f ∂ t (t 0, y (t 0)) + ∂ f ∂ y (t 0, y (t 0)) f (t 0, y (t 0)). {\ displaystyle y '' (t_ {0}) = {\ partial f \ over \ partial t} (t_ {0}, y (t_ {0})) + {\ partial f \ over \ partial y} (t_ {0}, y (t_ {0})) \, f (t_ {0}, y (t_ {0})).}y''(t_{0})={\partial f \over \partial t}(t_{0},y(t_{0}))+{\partial f \over \partial y}(t_{0},y(t_{0}))\,f(t_{0},y(t_{0})).
Глобальная ошибка усечения

Глобальная ошибка усечения - это ошибка в фиксированное время t {\ displaystyle t}t , после того, сколько шагов необходимо предпринять методам, чтобы достичь этого времени из начального момента. Глобальная ошибка усечения - это совокупный эффект локальных ошибок усечения, совершаемых на каждом шаге. Количество шагов легко определяется как (t - t 0) / h {\ displaystyle (t-t_ {0}) / h}(t-t_ {0}) / h , что пропорционально 1 / h {\ displaystyle 1 / h}1 / h , а ошибка, совершаемая на каждом этапе, пропорциональна h 2 {\ displaystyle h ^ {2}}h ^ {2} (см. предыдущий раздел). Таким образом, следует ожидать, что глобальная ошибка усечения будет пропорциональна h {\ displaystyle h}h .

. Это интуитивное рассуждение можно сделать точным. Если решение y {\ displaystyle y}y имеет ограниченную вторую производную и f {\ displaystyle f}fявляется непрерывным по Липшицу в своем второй аргумент, то глобальная ошибка усечения (GTE) ограничена

| GTE | ≤ час M 2 L (е L (t - t 0) - 1) {\ displaystyle | {\ text {GTE}} | \ leq {\ frac {hM} {2L}} (e ^ {L (t-t_ {0})} - 1) \ qquad \ qquad}| {\ text {GTE}} | \ leq {\ frac {hM} {2L}} (e ^ {L (t-t_ {0})} - 1) \ qquad \ qquad

где M {\ displaystyle M}M - верхняя граница второй производной от y {\ displaystyle y}.y на данном интервале, а L {\ displaystyle L}L - константа Липшица для f {\ displaystyle f}f.

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

Числовая устойчивость
Решение y ′ = - 2.3 y {\ displaystyle y '= - 2.3y}y'=-2.3yвычислено методом Эйлера с размером шага h = 1 {\ displaystyle h = 1}h = 1 (синие квадраты) и h = 0,7 {\ displaystyle h = 0,7}h=0.7(красные кружки). Черная кривая показывает точное решение.

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

y ′ = - 2.3 y, y (0) = 1. {\ displaystyle y '= - 2.3y, \ qquad y (0) = 1.}y'=-2.3y,\qquad y(0)=1.

Точное решением является y (t) = e - 2.3 t {\ displaystyle y (t) = e ^ {- 2.3t}}y (t) = e ^ {- 2.3t} , которое убывает до нуля при t → ∞ {\ displaystyle t \ to \ infty}t \ to \ infty . Однако, если к этому уравнению применить метод Эйлера с размером шага h = 1 {\ displaystyle h = 1}h = 1 , то численное решение качественно неверно: оно колеблется и растет (см. Рисунок). Вот что значит быть нестабильным. Если используется меньший размер шага, например h = 0,7 {\ displaystyle h = 0,7}{\ displaystyle h = 0.7} , численное решение действительно затухает до нуля.

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

Если метод Эйлера применяется к линейному уравнению y ′ = ky {\ displaystyle y '= ky}y'=ky, тогда численное решение будет неустойчивым, если произведение hk {\ displaystyle hk}hkнаходится за пределами области

{z ∈ C ∣ | z + 1 | ≤ 1}, {\ displaystyle \ {z \ in \ mathbf {C} \ mid | z + 1 | \ leq 1 \},}\ {z \ in \ mathbf {C} \ mid | z + 1 | \ leq 1 \},

показано справа. Эта область называется (линейной) областью устойчивости. В этом примере k {\ displaystyle k}kравно −2,3, поэтому, если h = 1 {\ displaystyle h = 1}h = 1 , то hk = - 2.3 {\ displaystyle hk = -2.3}hk = -2,3 , который находится за пределами области стабильности, и, следовательно, численное решение нестабильно.

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

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

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

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

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

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

yn + 1 = yn + hf (tn + 1, yn + 1). {\ displaystyle y_ {n + 1} = y_ {n} + hf (t_ {n + 1}, y_ {n + 1}).}y_ {n + 1} = y_ {n} + hf (t_ {n + 1}, y_ {n + 1}).

Он отличается от (стандартного или прямого) метода Эйлера тем, что функция f {\ displaystyle f}fоценивается в конечной точке шага, а не в начальной точке. Обратный метод Эйлера - это неявный метод, что означает, что формула обратного метода Эйлера имеет yn + 1 {\ displaystyle y_ {n + 1}}y_ { n + 1} с обеих сторон, поэтому при применении обратного метода Эйлера мы должны решить уравнение. Это удорожает реализацию.

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

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

yn + 1 = yn + hf (tn + 1 2 h, yn + 1 2 hf (tn, yn)) { \ displaystyle y_ {n + 1} = y_ {n} + hf {\ Big (} t_ {n} + {\ tfrac {1} {2}} h, y_ {n} + {\ tfrac {1} {2 }} hf (t_ {n}, y_ {n}) {\ Big)}}{\ displaystyle y_ {n + 1} = y_ {n} + hf {\ Big (} t_ {n} + {\ tfrac {1} {2}} h, y_ {n} + {\ tfrac {1} { 2}} hf (t_ {n}, y_ {n}) {\ Big)}} .

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

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

yn + 1 = yn + 3 2 hf (tn, yn) - 1 2 hf (tn - 1, yn - 1). {\ displaystyle y_ {n + 1} = y_ {n} + {\ tfrac {3} {2}} hf (t_ {n}, y_ {n}) - {\ tfrac {1} {2}} hf ( t_ {n-1}, y_ {n-1}).}y_ {n + 1} = y_ {n} + {\ tfrac {3} {2}} hf (t_ {n}, y_ {n}) - {\ tfrac {1} {2}} hf (t_ {n-1}, y_ { n-1}).

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

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

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

См. также
Примечания
Ссылки
Внешние ссылки
Викибук Исчисление имеет страницу по теме: Метод Эйлера
Последняя правка сделана 2021-05-19 06:32:23
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте