Дискретизация Задачи Коши. Частный случай, общий подход

Дискретизация Задачи Коши. Частный случай, общий подход#

Рассмотрим общий подход к численному решению ОДУ.

Задача Коши ставится следующим образом:

\[\begin{split} \left\{\begin{array}{l} \dfrac{d u}{d t}=f(t, u), \quad t \in [0, T] \\ u(0)=u_{0} \end{array}\right. \end{split}\]

Далее будем полагать, что решение существует и единственно.

В общем случае аналитически не решается - а решать-то хочется.

Понятное дело, на компьютере не можем работать с континуумом значений. Необходимо произвести дискретизацию задачи.

Зададим сетку с равным шагом:

\[ 0=t_0<t_1<t_2<\cdots<t_{n-1}<t_N=T \]
\[ \tau=t_{n+1}-t_n \]

Также зададим дискретную функцию \(y_n\) на этой сетке, от которой хотим

\[ y_n \approx u\left(t_n\right), \quad n=0,1, \cdots, N \]

Таким образом, \(y_n\) - это значения решения дискретизованного ОДУ на заданной сетке.

Важно. Заметьте, \(u(t)\) - истинное (математическое) решение ОДУ, а \(y_n\) - это сеточно-заданная функция. Таки разные вещи.

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

\[ \left.\frac{d u}{d t}\right|_{t_n} =\lim _{\tau \rightarrow 0} \frac{u(t_n+\tau)-u(t_n)}{\tau} \approx \frac{y_{n+1}-y_n}{\tau} \]

Подставляя это в изначальное уравнение, мы получаем дискретизованную Задачу Коши или разностная задача:

\[\begin{split} \left\{\begin{array}{l} \cfrac{y_{n+1}-y_n}{\tau}=f(t_n, y_n), \quad t \in [0, T] \\ y_0=u_{0} \end{array}\right. \end{split}\]

Примечание. Конкретно такой вид дискретизации называется явная схема Эйлера. Естественно, дискретизовывать можно по разному, выбирая различные разностные схемы и правые части, которые формально стремятся к истинной задаче Коши при \(\tau \rightarrow 0\).

Явную схему Эйлера уже понятно, как решать. Это же просто реккурента:

\[ y_{n+1}=y_n+\tau \cdot f\left(t_n, y_n\right), \quad n \geqslant 1 \]

Далее постараемся обобщить этот подход.

Hide code cell source
from bokeh.io import output_notebook
from bokeh.resources import INLINE
output_notebook(INLINE)
Loading BokehJS ...