9Простейшие линейные дифференциальные уравнения

9.1Линейное и нелинейное: кто матери-теории более ценен?

Все счастливые семьи похожи друг на друга, каждая несчастливая семья несчастлива по-своему. Л. Н. Толстой, «Анна Каренина».

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

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

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

Аналогичный подход работает и в дифференциальных уравнениях.

9.1.1Мотивирующий пример: изучение постоянного решения одномерного уравнения

Рассмотрим уравнение
Иными словами, это произвольное неавтономное уравнение на прямой, обладающее одним характерным свойством: правая часть обнуляется при и произвольном .

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

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

import matplotlib.pyplot as plt
import numpy as np
import qqmbr.odebook as ob
# see https://github.com/ischurov/qqmbr/blob/master/qqmbr/odebook.py

plt.figure(figsize=(6, 12))
rhss = [lambda t, x: 0.4 * x,
       lambda t, x: -x,
       lambda t,x: x*np.cos(t)]
for i, rhs in enumerate(rhss):
    plt.subplot(311 + i)
    ob.axes4x4()
    for x0 in [1, 0.5, -0.5, 0]:
        ob.eulersplot(rhs, -3, 4, x0,color='red',lw=2)
    plt.text(-3,1,"$x_0$", fontsize=20)
    plt.text(-3,0, "$t_0$", fontsize=20, horizontalalignment='right',
            verticalalignment="bottom")
    plt.plot([-3, -3], [-4, 4], lw=2, color='steelblue')
    # plt.text(2, 3, "$\\varphi(t_1;x_0)$", fontsize=20)
    plt.plot([2, 2], [-4, 4], lw=2, color='steelblue')
Рис. 9.1: Различное поведение решений, близких к нулевому
Итак, нас интересует поведение решения с начальным условием при близком к нулю. Будем считать, что на интересующем нас промежутке времени решение убежит от нуля не слишком сильно. В этом случае можно считать, что
Это следует из определения частной производной функции по переменной и того факта, что для всех . (Мы просто зафиксировали и стали смотреть на функцию как на функцию только от аргумента , приблизив её график соответствующей касательной.)

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

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

Уравнение (9.3) является не просто уравнением с разделяющимися переменными. Оно является линейным уравнением — и, как говорят, линеаризацией уравнения (9.1) вблизи решения .

9.1.2Более строгое обоснование возможности линеаризации

Этот параграф можно смело пропустить и сразу перейти к следующему разделу. Он содержит более аккуратное обоснование связи между уравнениями (9.1) и (9.3). Для дальнейшего нам пока это не понадобится.

Зафиксируем какое-нибудь . Нас интересует отображение, которое ставит в соответствие точке точку . Точнее, нас интересует, как эта функция ведёт себя при близких к нулю.

В одномерном случае ответ на вопрос «как ведёт себя функция в точке» даётся производной этой функцией в данной точке. Её-то мы и хотим найти.

Будем действовать смело и решительно. Пусть

Вопрос 1. Чему равно ?

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

import matplotlib.pyplot as plt
import numpy as np
import qqmbr.odebook as ob
# see https://github.com/ischurov/qqmbr/blob/master/qqmbr/odebook.py

plt.figure(figsize=(8,6))
ob.axes4x4()

for x0 in [1]:
    ob.eulersplot(lambda t,x: x*np.cos(t), -3, 4, x0,color='red',lw=2)
ob.mplot(np.linspace(-3,4), 
         lambda x: np.cos(0.5*(x+3))*2, 
         color='red', lw=2) #fake integral curve
plt.text(-3,1,"$x_1$", fontsize=20, horizontalalignment='right')
plt.text(-3,2,"$x_2$", fontsize=20, horizontalalignment='right')
plt.text(-3,0,"$t_0$", fontsize=20, horizontalalignment='right',
         verticalalignment="bottom")
plt.plot([-3, -3], [-4, 4], lw=2, color='steelblue')
plt.text(2, 3, "$\\varphi(t_1;x_1)$", fontsize=20)
plt.text(2, -1.5, "$\\varphi(t_1;x_2)$", fontsize=20)
plt.plot([2, 2], [-4, 4], lw=2, color='steelblue')
Рис. 9.2: Так не бывает: интегральные кривые не умеют пересекаться

Найдём уравнение на производную по (получим так называемое уравнение в вариациях в его простейшей форме):

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

Получается, что уравнение на производную по начальному условию имеет вид

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

9.2Понятие линейного дифференциального уравнения

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

Пример 1. Пусть — некоторая дифференцируемая функция.
  • — простейший линейный дифференциальный оператор (это просто оператор дифференцирования, он линеен, поскольку дифференцирование линейно: производная сумма равна сумме производных, константу можно выносить за знак дифференцирования). Можно написать, что .
  • — также линейный дифференциальный оператор. Можно написать, что , подразумевая, что — это оператор умножения на функцию .
  • не является линейным оператором. (Почему?)
  • также не является линейным оператором. (Почему?)
Пусть теперь — некоторая дифференцируемая вектор-функция

Тогда — линейный дифференциальный оператор (здесь — некоторый фиксированный линейный оператор ).

Определение 1. Однородное линейное дифференциальное уравнение — это уравнение вида
где — некоторый линейный дифференциальный оператор.

Неоднородное линейное дифференциальное уравнение — это уравнение вида

Замечание 1. В теории дифференциальных уравнений слово однородное встречается в двух разных контекстах. С одной стороны, это представленное выше уравнение (9.9), у которого в правой части стоит 0. Второй смысл слово «однородное»: это уравнение вида . Такие уравнения также изучаются в нашем курсе (они решаются с помощью замены ), но они не имеют никакого отношения к линейным однородным уравнениям. Не путайте эти два использования одного слова!

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

9.2.1Простейшие свойства линейных уравнений

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

Теорема 1. Множество всех решений автономного линейного дифференциального уравнения — линейное пространство.

Доказательство. Нам нужно доказать, что 1) сумма решений является решением; 2) умноженное решение на число — тоже решение. Пусть и — решения, — константа. Тогда . То есть сумма решений является решением. Аналогично с константой: .

Теорема 2. Множество всех решений неавтономного линейного дифференциального уравнения — аффинное пространство — то есть линейное, сдвинутое на фиксированный вектор.

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

Доказательство. Пусть — фиксированное решение, какое-то другое решение. Пусть . Тогда . Таким образом, — решение однородного уравнения, и любое решение представляется в виде суммы и какого-то решения однородного уравнения .

Наоборот, если — решение однородного уравнения, то прибавляя его к решению неоднородного уравнения получим какое-то другое решение неоднородного уравнения.

9.2.2Как решать неоднородные уравнения: метод вариации постоянных

Сейчас мы будем делать то, что нельзя: менять постоянные.

Пусть . Рассмотрим уравнение

Это уравнение называется линейным неоднородным дифференциальным уравнением первого порядка в размерности 1 с переменными коэффициентами («первого порядка» потому что участвует только первая производная).

Как его решить? Решим сперва соответствующее однородное уравнение

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

Получается:

Два слагаемых магическим образом сокращаются, и получается уже простое уравнение на :
решая его, имеем:

Вопрос 2. Что будет, если попытаться применить метод вариации постоянных к нелинейному уравнению — например, ?