Решение задачи коши для обыкновенных дифференциальных уравнений

Решение задачи коши для обыкновенных дифференциальных уравнений

Данко П. Е., Попов А. Г., Кожевникова Т. Я. Высшая математика в упражнениях и задачах…
Часть II. Глава IV. Обыкновенные дифференциальные уравнения

§ 1. Дифференциальные уравнения первого порядка

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

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

1) х²у’ + 5xy = у² – обыкновенное дифференциальное уравнение первого порядка;

2) – обыкновенное дифференциальное уравнение второго порядка;

3) y’³ + y»y»’ = х – обыкновенное дифференциальное уравнение третьего порядка;

4) F (х, у, у’, у») = 0 – общий вид обыкновенного дифференциального уравнения второго порядка;

5) – уравнение в частных производных первого порядка.

В этом параграфе рассматриваются обыкновенные дифференциальные уравнения первого порядка, т. е. уравнения вида F (х, у, у’) = 0 или (в разрешенном относительно у’ виде) y’ = f(х, у).

Решением дифференциального уравнения называется такая дифференцируемая функция у = φ (x), которая при подстановке в уравнение вместо неизвестной функции обращает его в тождество. Процесс нахождения решения дифференциального уравнения называется интегрированием дифференциального уравнения.

Общим решением дифференциального уравнения первого порядка у’ = f(x, у) в области D называется функция у = φ(x, C), обладающая следующими свойствами: 1) она является решением данного уравнения при любых значениях произвольной постоянной С, принадлежащих некоторому множеству; 2) для любого начального условия у(х0) = у0 такого, что (x0; y0) ∈ 0, существует единственное значение С = С0, при котором решение у = φ(x, C0) удовлетворяет заданному начальному условию.

Всякое решение у = φ(x, C0), получающееся из общего решения у = φ (x, C) при конкретном значении С = С0, называется частным решением.

Задача, в которой требуется найти частное решение уравнения y’ = f(х, у) удовлетворяющее начальному условию у(х0) = y0, называется задачей Коши.

Построенный на плоскости хОу график всякого решения у = φ(х) дифференциального уравнения называется интегральной кривой этого уравнения. Таким образом, общему решению у = φ(х, С) на плоскости хОу соответствует семейство интегральных кривых, зависящее от одного параметра – произвольной постоянной С, а частному решению, удовлетворяющему начальному условию y(x0) = y0, – кривая этого семейства, проходящая через заданную точку М0(x0; у0).

Если функция f(х, у) непрерывна и имеет непрерывную производную в области D, то решение дифференциального уравнения у’= f (х, у) при начальном условии у(х0) = у0 существует и единственно, т. е. через точку (x0; y0) проходит единственная интегральная кривая данного уравнения (теорема Коши).

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

Особые решения не получаются из общего решения дифференциального управления ни при каких значениях произвольной постоянной С (в том числе и при С = ± ∞).

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

Например, общее решение уравнения записывается в виде у = sin (х + С). Это семейство интегральных кривых имеет две огибающие: у = 1 и у = -1, которые и будут особыми решениями.

2. Дифференциальные уравнения с разделяющимися переменными. Дифференциальное уравнение вида

относится к типу уравнений с разделяющимися переменными. Если ни одна из функций f1(x), f2(y), φ1(x), φ2(y) не равна тождественно нулю, то в результате деления исходного уравнения на f2 (x) φ1 (y) оно приводится к виду

Почленное интегрирование последнего уравнения приводит к соотношению

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

507. Решить уравнение х(у²-4)dx + y dy = 0.

△ Разделив обе части уравнения на у² – 4 ≠ 0, имеем

x² + ln|у² – 4| = ln|C|, или у² – 4 = Сe -λ²

Это общее решение данного дифференциального уравнения.

Пусть теперь у² – 4 = 0, т. е. у = ± 2. Непосредственной подстановкой убеждаемся, что у = ±2 – решение исходного уравнения. Но оно не будет особым решением, так как его можно получить из общего решения при С = 0. ▲

508. Найти частный интеграл уравнения у’ cos х = у / ln у, удовлетворяющий начальному условию y(0) = l.

△ Полагая , перепишем данное уравнение в виде

Проинтегрируем обе части уравнения:

, или

Используя начальное условие у = 1 при х = 0, находим С = 0. Окончательно получаем

509. Найти общий интеграл уравнения у’ = tg x tg y.

△ Полагая и разделяя переменные, приходим к уравнению ctg у dy = tg х dx. Интегрируя, имеем

, или ln|sin у| = -ln|cos x| + ln С.

Отсюда находим sin y = C/cos x, или sin y / cos x = С (общий интеграл). ▲

510. Найти частное решение дифференциального уравнения (l + x²)dy + y dx = 0 при начальном условии у(1) = 1.

△ Преобразуем данное уравнение к виду . Интегрируя, получим

, или ln |y| = – arctg x + С

Это и есть общий интеграл данного уравнения.

Теперь, используя начальное условие, найдем произвольную постоянную С; имеем ln 1 = — arctg 1 + С, т. е. С = π/4. Следовательно,

ln у = – arctg х + π/4,

откуда получаем искомое частное решение y = e π/4 – arctg x . ▲

Данко П. Е., Попов А. Г., Кожевникова Т. Я. Высшая математика в упражнениях и задачах… Ч. II. Стр. 117-119.

Задачи с начальными условиями для систем обыкновенных дифференциальных уравнений

Рассмотрим задачу Коши для системы обыкновенных дифференциальных уравнений $$ \begin \tag <1>\frac &= f_i (t, u_1, u_2, \ldots, u_n), \quad t > 0\\ \tag <2>u_i(0) &= u_i^0, \quad i = 1, 2, \ldots, m. \end $$

Используя векторные обозначения, задачу (1), (2) можно записать как задачу Коши $$ \begin \tag <3>\frac> &= \pmb(t, \pmb), \quad t > 0, \\ \tag <4>\pmb(0) &= \pmb_0 \end $$ В задаче Коши необходимо по известному решению в точке \( t = 0 \) необходимо найти из уравнения (3) решение при других \( t \).

Численные методы решения задачи Коши

Существует большое количество методов численного решения задачи (3), (4). Вначале рассмотрим простейший явный метод Эйлера и его программную реализацию. Затем будут представлены методы Рунге—Кутта и многошаговые методы.

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

Идея численных методов решения задачи (3), (4) состоит из четырех частей:

1. Вводится расчетная сетка по переменной \( t \) (время) из \( N_t + 1 \) точки \( t_0 \), \( t_1 \), \( \ldots \), \( t_ \). Нужно найти значения неизвестной функции \( \pmb \) в узлах сетки \( t_n \). Обозначим через \( \pmb^n \) приближенное значение \( \pmb(t_n) \).

2. Предполагаем, что дифференциальное уравнение выполнено в узлах сетки.

3. Аппроксимируем производные конечными разностями.

4. Формулируем алгоритм, который вычисляет новые значения \( \pmb^ \) на основе предыдущих вычисленных значений \( \pmb^k \), \( k 0 \) при \( \tau\to 0 \).

Явный метод Эйлера

Проиллюстрируем указанные шаги. Для начала введем расчетную сетку. Очень часто сетка является равномерной, т.е. имеет одинаковое расстояние между узлами \( t_n \) и \( t_ \): $$ \omega_\tau = \< t_n = n \tau, n = 0, 1, \ldots, N_t \>. $$

Затем, предполагаем, что уравнение выполнено в узлах сетки, т.е.: $$ \pmb^\prime (t_n) = \pmb(t_n, u(t_n)), \quad t_n \in \omega_\tau. $$

Заменяем производные конечными разностями. С этой целью, нам нужно знать конкретные формулы, как производные могут быть аппроксимированы конечными разностями. Простейший подход заключается в использовании определения производной: $$ \pmb^\prime(t) = \lim_ <\tau \to 0>\frac<\pmb(t+\tau) — \pmb(t)><\tau>. $$

В произвольном узле сетки \( t_n \) это определение можно переписать в виде: $$ \begin \pmb^\prime(t_n) = \lim_ <\tau \to 0>\frac<\pmb(t_n+\tau) — \pmb(t_n)><\tau>. \end $$ Вместо того, чтобы устремлять шаг сетки к нулю, мы можем использовать малый шаг \( \tau \), который даст численное приближение \( u^\prime(t_n) \): $$ \begin \pmb^\prime(t_n) \approx \frac<\pmb^ — \pmb^><\tau>. \end $$ Такая аппроксимация известна как разностная производная вперед и имеет первый порядок по \( \tau \), т.е. \( O(\tau) \). Теперь можно использовать аппроксимацию производной. Таким образом получим явный метод Эйлера: $$ \begin \tag <5>\frac<\pmb^ — \pmb^n> <\tau>= \pmb(t_n, \pmb^). \end $$

Четвертый шаг заключается в получении численного алгоритма. Из (5) следует, что мы должны знать значение \( y^n \) для того, чтобы решить уравнение (5) относительно \( y^ \) и получить формулу для нахождения приближенного значения искомой функции на следующем временном слое \( t_ \): $$ \begin \tag <6>\pmb^ = \pmb^n + \tau \pmb(t_n, \pmb^) \end $$

При условии, что у нас известно начальное значение \( \pmb^0 = \pmb_0 \), мы можем использовать (6) для нахождения решений на последующих временных слоях.

Программная реализация явного метода Эйлера

Выражение (6) может быть как скалярным так и векторным уравнением. И в скалярном и в векторном случае на языке Python его можно реализовать следующим образом

При решении системы (векторный случай), u[n] — одномерный массив numpy длины \( m+1 \) (\( m \) — размерность задачи), а функция F должна возвращать numpy -массив размерности \( m+1 \), t[n] — значение в момент времени \( t_n \).

Таким образом численное решение на отрезке \( [0, T] \) должно быть представлено двумерным массивом, инициализируемым нулями u = np.zeros((N_t+1, m+1)) . Первый индекс соответствует временному слою, а второй компоненте вектора решения на соответствующем временном слое. Использование только одного индекса, u[n] или, что то же самое, u[n, :] , соответствует всем компонентам вектора решения.

Функция euler решения системы уравнений реализована в файле euler.py:

Строка F_ = lambda . требует пояснений. Для пользователя, решающего систему ОДУ, удобно задавать функцию правой части в виде списка компонент. Можно, конечно, требовать чтобы пользователь возвращал из функции массив numpy , но очень легко осуществлять преобразование в самой функции решателе. Чтобы быть уверенным, что результат F будет нужным массивом, который можно использовать в векторных вычислениях, мы вводим новую функцию F_ , которая вызывает пользовательскую функцию F «прогоняет» результат через функцию assaray модуля numpy .

Неявный метод Эйлера

При построении неявного метода Эйлера значение функции \( F \) берется на новом временном слое, т.е. для решении задачи (5) используется следующий метод: $$ \begin \tag <7>\frac<\pmb^ — \pmb^n> <\tau>= \pmb(t_, \pmb^). \end $$

Таким образом для нахождения приближенного значения искомой функции на новом временном слое \( t_ \) нужно решить нелинейное уравнение относительно \( \pmb^ \): $$ \begin \tag <8>\pmb^ — \tau \pmb(t_, \pmb^) — y^n = 0. \end $$

Для решения уравнения (8) можно использовать, например, метод Ньютона.

Программная реализация неявного метода Эйлера

Функция backward_euler решения системы уравнений реализована в файле euler.py:

Отметим, что для нахождения значения u[n+1] используется функция fsolve модуля optimize библиотеки scipy . В качестве начального приближения для решения нелинейного уравнения используется значение искомой функции с предыдущего слоя u[n] .

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

Одношаговый метод Рунге—Кутта в общем виде записывается следующим образом: $$ \begin \tag <9>\frac<\pmb^ — \pmb^n> <\tau>= \sum_^s b_i \pmb_i, \end $$ где $$ \begin \tag <10>\pmb_i = \pmb\left( t_n + c_i\tau, \pmb^n + \tau \sum_^s a_\pmb_j \right), \quad i = 1, 2, \ldots, s. \end $$ Формула (9) основана на \( s \) вычислениях функции \( \pmb \) и называется \( s \)-стадийной. Если \( a_ = 0 \) при \( j \geq i \) имеем явный метод Рунге—Кутта. Если \( a_ = 0 \) при \( j > i \) и \( a_ \ne 0 \), то \( \pmb_i \) определяется неявно из уравнения $$ \begin \tag <11>\pmb_i = \pmb\left( t_n + c_i\tau, \pmb^n + \tau \sum_^ a_\pmb_j + \tau a_ \pmb_i \right), \quad i = 1, 2, \ldots, s. \end $$ О таком методе Рунге—Кутта говорят как о диагонально-неявном.

Одним из наиболее распространенных является явный метод Рунге-Кутта четвертого порядка: $$ \begin \tag <12>\pmb_1 & = \pmb(t_n, \pmb^n), &\quad \pmb_2 &= \pmb\left( t_n + \frac<\tau><2>, \pmb^n + \tau \frac<\pmb_1> <2>\right),\\ \pmb_3 &= \pmb\left( t_n + \frac<\tau><2>, \pmb^n + \tau \frac<\pmb_2> <2>\right), &\quad \pmb_4 &= \pmb\left( t_n + \tau, \pmb^n + \tau \pmb_3 \right),\\ \frac<\pmb^ -\pmb^n> <\tau>&= \frac<1> <6>(\pmb_1 + 2\pmb_2 + 2\pmb_3 + \pmb_4) & & \end $$

Многошаговые методы

В методах Рунге—Кутта в вычислениях участвуют значения приближенного решения только в двух соседних узлах \( \pmb^n \) и \( \pmb^ \) — один шаг по переменной \( t \). Линейный \( m \)-шаговый разностный метод записывается в виде $$ \begin \tag <13>\frac<1> <\tau>\sum_^m a_i \pmb^ = \sum_^ b_i \pmb(t_, \pmb^), \quad n = m-1, m, \ldots \end $$ Вариант численного метода определяется заданием коэффициентов \( a_i \), \( b_i \), \( i = 0, 1, \ldots, m \), причем \( a_0 \ne 0 \). Для начала расчетов по рекуррентной формуле (13) необходимо задать \( m \) начальных значений \( \pmb^0 \), \( \pmb^1 \), \( \dots \), \( \pmb^ \) (например, можно использовать для их вычисления метод Эйлера).

Различные варианты многошаговых методов (методы Адамса) решения задачи с начальными условиями для систем обыкновенных дифференциальных уравнений могут быть получены на основе использования квадратурных формул для правой части равенства $$ \begin \tag <14>\pmb(t_) — \pmb(t_n) = \int_^> \pmb(t, \pmb) dt \end $$

Для получения неявного многошагового метода используем для подынтегральной функции интерполяционную формулу по значениям функции \( \pmb^ = \pmb(t_, \pmb^) \), \( \pmb^n \), \( \dots \), \( \pmb^ \), т.е. $$ \begin \tag <15>\frac<\pmb^ — \pmb^n> <\tau>= \sum_^ b_i \pmb(t_, \pmb^) \end $$

Для интерполяционного метода Адамса (15) наивысший порядок аппроксимации равен \( m+1 \).

Для построения явных многошаговых методов можно использовать процедуру экстраполяции подынтегральной функции в правой части (14). В этом случае приближение осуществляется по значениям \( \pmb^n \), \( \pmb^ \), \( \dots \), \( \pmb^ \) и поэтому $$ \begin \tag <16>\frac<\pmb^ — \pmb^n> <\tau>= \sum_^ b_i \pmb(t_, \pmb^) \end $$

Для экстраполяционного метода Адамса (16) погрешность аппроксимации имеет \( m \)-ый порядок.

На основе методов Адамса строятся и схемы предиктор–корректор. На этапе предиктор используется явный метод Адамса, на этапе корректора — аналог неявного метода Адамса. Например, при использовании методов третьего порядка аппроксимации в соответствии с (18) для предсказания решения положим $$ \frac<\pmb^ — \pmb^n> <\tau>= \frac<1> <12>(23 \pmb^ -16\pmb^ + 5\pmb^). $$ Для уточнеия решения (см. (17)) используется схема $$ \frac<\pmb^ — \pmb^n> <\tau>= \frac<1> <24>(9\pmb^ + 19\pmb^ — 5\pmb^ + \pmb^). $$ Аналогично строятся и другие классы многошаговых методов.

Жесткие системы ОДУ

При численном решении задачи Коши для систем обыкновенных дифференциальных уравнений (3), (4) могут возникнуть дополнительные трудности, порожденные жесткостью системы. Локальные особенности поведения решения в точке \( u = w \) передаются линейной системой $$ \begin \frac

= \sum_^ \frac<\partial f_i> <\partial u_j>(t, w) v + \bar(t), \quad t > 0. \end $$

Пусть \( \lambda_i(t) \), \( i = 1, 2, \ldots, m \) — собственные числа матрицы $$ \begin A(t) = \< a_(t) \>, \quad a_(t) = \frac<\partial f_i><\partial u_j>(t, w). \end $$ Система уравнений (3) является жесткой, если число $$ \begin S(t) = \frac <\max_<1 \leq i \leq m>|Re \lambda_i(t)|> <\min_<1 \leq i \leq m>|Re \lambda_i(t)|> \end $$ велико. Это означает, что в решении присутствуют составляющие с сильно различающимися масштабами изменения по переменной \( t \).

Для численное решения жестких задач используются вычислительные алгоритмы, которые имеют повышенный запас устойчивости. Необходимо ориентироваться на использование \( A \)-устойчивых или \( A(\alpha) \)-устойчивых методов.

Метод называется \( A \)-устойчивым, если при решении задачи Коши для системы (3) область его устойчивости содержит угол $$ \begin |\arg(-\mu)| —>

Задача Коши онлайн

Данная задача возникает при поиске частного решения дифференциального уравнения. Наш онлайн калькулятор, построенные на основе системы Wolfram Alpha, позволяет найти решение задачи Коши для различных типов дифференциальных уравнений. Чтобы начать работу, необходимо ввести данные своей задачи (дифференциальное уравнение и начальные условия) в калькулятор.

Найти решение задачи Коши для дифференциального уравнения:

при заданных начальных условиях:

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

Поясним вышесказанное на конкретном примере. Пусть нам требуется найти частное решение дифференциального уравнения:

удовлетворяющее начальным условиям:

Первым делом, используя различные методы (Бернули, вариации произвольной постоянной Лагранжа), сначала находим общее решение данного дифференциального уравнения:

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

Далее, поставляем начальные условия в функцию и её производную :

Решая полученную систему уравнений получаем значения произвольных постоянных и :

Подставляем полученные результаты в общее решение дифференциального уравнения, в результате получаем искомое частное решение:

Другие полезные разделы:

Оставить свой комментарий:

Мы в социальных сетях:
Группа ВКонтакте | Бот в Телеграмме


источники:

http://slemeshevsky.github.io/num-mmf/ode/html/._ode-FlatUI001.html

http://mathforyou.net/online/calculus/cauchy/