Содержание

§ 8. Обыкновенные дифференциальные уравнения

Математическая постановка задачи

Обыкновенными дифференциальными уравнениями (ОДУ) называются уравнения, содержащие неизвестную функцию и ее производные. В общем виде ОДУ порядка nn записывается как

F(x,y,y,,y(n))=0.F\left(x,y,y',\ldots,y^{(n)}\right)=0.

Здесь y=f(x)y=f(x) — неизвестная функция, вид которой требуется определить, y(n)=f(n)(x)y^{(n)}=f^{(n)}(x) — ее производная по xx порядка nn, а xx — аргумент этой функции.

Линейными ОДУ называются уравнения вида

an(x)y(n)+an1y(n1)++a1y+a0y=g(x).a_n(x)y^{(n)} + a_{n-1}y^{(n-1)} + \ldots + a_1y' + a_0y = g(x).

Однородными называются линейные ОДУ, в которых правая часть равна нулю: g(x)=0g(x)=0.

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

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

Далее мы рассмотрим ОДУ, разрешимые относительно старшей производной:

y(n)=F(x,y,y,,y(n1)),F(x0)=F0.y^{(n)} = F(x,y,y',\ldots,y^{(n-1)}), \quad F(x_0) = F_0.

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

Метод Эйлера

Этот метод является аналогом метода прямоугольников для численного интегрирования. Будем искать решение следующего уравнения при известных начальных условиях:

f(t)=F(t,f(t)),f(t0)=f0.f'(t) = F(t,f(t)), \quad f(t_0) = f_0.

Здесь ff — искомая функция, которая зависит от tt, FF — правая часть уравнения, а f0f_0 — значение искомой функции в момент времени t0t_0. Один шаг метода Эйлера описывается как

ti+1=ti+Δt,fi+1=fi+ΔtF(ti,fi).t_{i+1} = t_i + \Delta t, \\ f_{i+1} = f_i + \Delta t \, F(t_i,f_i).

Переписав второе уравнение, получаем fi=fi+1fiΔtf_i' = \frac{f_{i+1}-f_i}{\Delta t}, то есть метод Эйлера аппроксимирует производную искомой функции тангенсом угла наклона касательной к функции. Чем меньше шаг по времени, тем точнее получается аппроксимация, а при Δt0\Delta t \rightarrow 0 превращается в точное определение производной.

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

fi+1=fi+ΔtF(ti+Δt2,fi+Δt2F(ti,fi)).f_{i+1} = f_i + \Delta t \, F(t_i + \frac{\Delta t}{2},f_i + \frac{\Delta t}{2} F(t_i,f_i)).

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

fi+1=fi+j=0n1bjF(tij,fij).f_{i+1} = f_{i} + \sum\limits_{j=0}^{n-1} b_j F(t_{i-j},f_{i-j}).

Здесь nn — количество точек, которые используются для аппроксимации производной, bjb_j — коэффициенты. Коэффициенты вычисляются путем решения системы уравнений

p(ti+j)=F(ti+j,fi+j),j=0,,n1.p(t_{i+j}) = F(t_{i+j},f_{i+j}), \quad j=0,\ldots,n-1.

Здесь pp — полином степени nn с коэффициентами bkb_k. Эта система уравнений решается аналитически и получаются следующие коэффициенты. При n=1n=1 получается метод Эйлера. При n=2n=2 получается

fi+1=fi+Δt2(3FiFi1),f_{i+1} = f_{i} + \frac{\Delta t}{2} \left(3 F_{i} - F_{i-1}\right),

где Fi=F(ti,fi)F_i=F(t_i,f_i). При n=3n=3 получается

fi+1=fi+Δt12(23Fi16Fi1+5Fi2),f_{i+1} = f_{i} + \frac{\Delta t}{12} \left(23 F_{i} -16 F_{i-1} + 5 F_{i-2}\right),

и так далее. Этот метод является аналогом формул Ньютона—Котеса для численного интегрирования. Для первых n1n-1 шагов используются методы более низких порядков: для первого шага — метод Эйлера, для второго шага — двухшаговый метод и так далее, пока не дойдем до шага nn.

Метод Рунге—Кутта

Этот метод является наиболее распространенным методом решения ОДУ. В общем виде шаг этого метода записывается как

fi+1=fi+Δtj=1nbjkj,f_{i+1} = f_{i} + \Delta t \sum\limits_{j=1}^{n} b_j k_j,

где

k1=F(ti,fi),kn=F(ti+cnΔt,fi+Δtj=1n1an,jkj),n>1.k_1 = F(t_i,f_i), \\ k_n = F(t_i + c_n \Delta t, f_i + \Delta t \sum\limits_{j=1}^{n-1} a_{n,j} k_j), \quad n > 1. \\

Коэффициенты kjk_j интерпретируются как тангенс угла наклона касательной искомой функции в некоторой точке интервала. На остальные коэффициенты накладыюватся следующие ограничения.

j=1nbj=1,j=1i1ai,j=cj,i=2,,n.\sum\limits_{j=1}^{n} b_j = 1, \qquad \sum\limits_{j=1}^{i-1} a_{i,j} = c_j, \quad i=2,\ldots,n.

Общего способа вычисления коэффициентов a,b,ca,b,c не существует, поэтому на практике используются готовые наборы этих коэффициентов, найденные различными учеными и различными способами.

Метод Рунге—Кутта—Фельберга

Этот метод является наиболее совершенной модификацией, поскольку содержит формулу для вычисления оптимального размера шага, а также формулу для проверки точности метода. Сокращенно метод называется РКФ45. Один шаг метода записывается как

fi+1=fi+Δt(25216k1+14082565k3+21974101k415k5),gi+1=gi+Δt(16135k1+665612825k3+2856156430k4950k5+255k6),k1=f(ti,xi),k2=f(ti+14Δt,xi+14k1),k3=f(ti+38Δt,xi+332k1+932k2),k4=f(ti+1213Δt,xi+19322197k172002197k2+72962197k3),k5=f(ti+Δt,xi+439216k18k2+3680513k38454104k4),k6=f(ti+12Δt,xi827k1+2k235442565k3+18594104k41140k5).f_{i+1} = f_i + \Delta t \left( \frac{25}{216}k_1 + \frac{1408}{2565}k_3 + \frac{2197}{4101}k_4 - \frac{1}{5}k_5 \right), \\ g_{i+1} = g_i + \Delta t \left( \frac{16}{135}k_1 + \frac{6656}{12825}k_3 + \frac{28561}{56430}k_4 - \frac{9}{50}k_5 + \frac{2}{55}k_6 \right) , \\ k_1 = f\left(t_i, x_i\right), \\ k_2 = f\left( t_i + \frac{1}{4}\Delta t, x_i + \frac{1}{4}k_1 \right), \\ k_3 = f\left( t_i + \frac{3}{8}\Delta t, x_i + \frac{3}{32}k_1 + \frac{9}{32}k_2 \right), \\ k_4 = f\left( t_i + \frac{12}{13}\Delta t, x_i + \frac{1932}{2197}k_1 - \frac{7200}{2197}k_2 + \frac{7296}{2197}k_3 \right), \\ k_5 = f\left( t_i + \Delta t, x_i + \frac{439}{216}k_1 - 8 k_2 + \frac{3680}{513}k_3 - \frac{845}{4104}k_4 \right), \\ k_6 = f\left( t_i + \frac{1}{2}\Delta t, x_i - \frac{8}{27}k_1 + 2 k_2 - \frac{3544}{2565}k_3 + \frac{1859}{4104}k_4 - \frac{11}{40}k_5 \right).

Здесь fi+1f_{i+1} является решением, вычисленным по методу РК4, а gi+1g_{i+1} — по методу РК5. Это делается, для того чтобы оценить точность интегрирования с помощью метода более высокого порядка.

Шаг по времени можно выбрать автоматически по следующей формуле.

Δtоптимальный=0.90Δt(ϵmaxϵ)15,ϵ=fi+1gi+1.\Delta t_{\text{оптимальный}} = 0.90 \Delta t \left(\frac{\epsilon_\text{max}}{\epsilon}\right)^{\frac{1}{5}}, \quad \epsilon = |f_{i+1}-g_{i+1}| .

Если ϵ>ϵmax\epsilon > \epsilon_\text{max}, то текущая итерация метода повторяется для Δt=Δtоптимальный\Delta t = \Delta t_\text{оптимальный}, в противном случае следующая итерация выполняется с шагом Δtоптимальный\Delta t_\text{оптимальный}.

Формула работает следующим образом. Текущая итерация метода повторяется до тех пор, пока погрешность не станет меньше максимально допустимой. При этом на каждой попытке шаг уменьшается пропорционально корню пятой степени от отношения максимально допустимой погрешности к текущей. Например, если погрешность превышает допустимую в два раза, то шаг уменьшается примерно на 20%. Если же погрешность становится меньше допустимой, то формула увеличивает размер шага. Например, если погрешность меньше допустимой в два раза, то шаг увеличивается примерно на 3%. Если погрешности равны, то шаг уменьшается на 10%.

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

Неявные методы

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

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

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

Неявный метод Эйлера записывается как

fi+1=fi+ΔtF(ti+1,fi+1).f_{i+1} = f_i + \Delta t \, F(t_{i+1},f_{i+1}).

В неявных метода Рунге—Кутта коэффициенты an,ja_{n,j} определены не только для j<nj<n, но и для j=nj=n. Как мы уже говорили ранее, единого способа определения значений коэффициентов не существует, поэтому проще всего взять готовые неявные варианты метода.

🌊🌊🌊

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

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

Задания

Уравнение хищник-жертва1 балл

Решите явным методом Эйлера систему уравнений хищник-жертва. Подберите максимальный шаг, при котором решение не расходится. Система имеет вид

dxdt=αxβxy,dydt=δxyγy.\frac{dx}{dt} = \alpha x - \beta x y, \\ \frac{dy}{dt} = \delta x y - \gamma y.

Здесь x(t)x(t) — количество жертв, y(t)y(t) — количество хищников, α\alpha — коэффициент естественного роста популяции жертв, β\beta — коэффициент убыли популяции жертв из-за хищников, δ\delta — коэффициент роста популяции хищников, γ\gamma — коэффициент естественной убыли популяции хищников. Начальные значения xx и yy произвольные.

Уравнение второго порядка2 балла

Решите явным методом Эйлера уравнение второго порядка. Подберите шаг, при котором решение не расходится. Уравнение имеет вид

d2f(t)dt2+αf(t)=0.\frac{d^2 f(t)}{dt^2} + \alpha f(t) = 0.

Значение функции ff при t=0t=0 произвольное.

Уравнение движения3 балла

Решите явным методом РКФ45 уравнение поступательного движения. Уравнение имеет вид

dxdt=υ,dυdt=Fm.\frac{d\vec{x}}{dt} = \vec\upsilon, \\ \frac{d\vec\upsilon}{dt} = \frac{\vec{F}}{m}.

Здесь x\vec{x} — координата тела, υ\vec\upsilon — вектор скорости, F\vec{F} — вектор внешних сил. Начальные значения координаты и скорости произвольны. В качестве внешних сил можно взять силу тяжести F=mg\vec{F} = m\vec{g}, где g=(0,0,g)\vec{g} = (0,0,-g) — ускорение свободного падения.

Видео

2023

  • 00:00 Введение.
  • 01:50 Уравнение хищник-жертва.
  • 15:15 Определения.
  • 23:37 Метод Эйлера.
  • 34:40 Метод Рунге—Кутта.
  • 41:46 Метод Рунге—Кутта—Фельберга.
  • 49:40 Неявные методы.
  • 57:29 Задания.
Запись лекции 07.04.2023.

2022

  • 00:00:00 Введение.
  • 00:01:35 Уравнение хищник-жертва и метод Эйлера.
  • 00:21:14 Определения ОДЕ.
  • 00:37:25 Метод Рунге—Кутта.
  • 00:48:30 Метод Рунге—Кутта—Фельберга.
  • 00:57:03 Неявные методы.
  • 01:00:12 Вопросы.
  • 01:10:55 Производные второго порядка.
  • 01:19:00 Задания.
Запись лекции 07.04.2022.

Доска

2023

ordinary-differential-equations-2023 thumbnail.
Запись доски 07.04.2023.

2022

ordinary-differential-equations thumbnail.
Запись доски 07.04.2022.