In [2]:
%pylab inline
from nesode import *
from itertools import product
Populating the interactive namespace from numpy and matplotlib

Дифференциальные уравнения

Совместный бакалавриат ВШЭ-РЭШ, 2013-14 учебный год

И. В. Щуров, П. Ф. Соломатин, И. А. Хованская, А. Петрин, Н. Солодовников

Бифуркация Андронова — Хопфа

Это более интересная бифуркация уже в двумерном пространстве. В прошлый раз мы обсуждали, что особые точки типа «фокус» структурно услойчивые, малые изменения не меняют их вид, а центры, напротим, стуктурно неустойчивы, траектории размыкаются и меняют тип при малом возмущении.

Вот теперь рассмотрим как раз центр. Услойчивый фокус останется устойчивым, если его «пошевелить». А центр может стать как устойчивым, так и неустойчивым.

Это история о том, как особые точки могут менять устойчивость.

Рассмотрим такое семейство уравнений $$ \dot z = (i+\varepsilon+C z \overline z)z $$ два параметра: $\varepsilon, C \in \mathbb R$. Заметим, что $z \overline z = |z|^2=\rho$

В вещественной форме $$ \begin{cases}\tag{*} \dot x = \varepsilon x - y + C(x^2+y^2)x\\ \dot y = x + \varepsilon y + C(x^2+y^2)y \end{cases} $$

Сначала рассмотрим случай $C=0$. При этом уравнение линейно, и мы можем его исследовать полностью. Есть три варианта для $\varepsilon$: положительный, отрицательный, нулевой.

In [4]:
fig = plt.figure()
rcParams['font.family']="Arial"
rcParams['figure.figsize']=(18,6)
fig.suptitle(u"Бифуркации Андронова-Хопфа, C=0", fontsize=20)
data=[(lambda X, t=0: array([-X[0]-X[1],X[0]-X[1]]), 131, u'ε<0'),
      (lambda X, t=0: array([-X[1],X[0]]), 132, u'ε=0'),
      (lambda X, t=0: array([X[0]-X[1],X[0]+X[1]]), 133, u'ε>0')]
for f,loc,title in data:
    ax=fig.add_subplot(loc)
    axes4x4(('x','y'))
    ax.set_title(title,fontsize=14)
    phaseportrait(f, product(linspace(-5,5,13),[-2,0,2]), [-4,4], n=50)
plt.show()

Видно, как меняются фазовые портреты: сначала (при отрицательных $\varepsilon$) это устойчивый фокус, при увеличении $\varepsilon$ шаг спиралей уменьшается, вплоть до нулевого (траектории замыкаются), а потом начинают раскурчиваться в другую сторону. Линейную систему легко анализировать, но в природе линейных систем не бывает. Сценари, который мы описали, нетипичен: странно ожидать, например, что все траектории замкнутся одновременно.

Чтобы изучить типичный сценарий, добавим нелинейное слагаемое, то есть рассмотрим случай, когда $C \neq 0$. Для его анализа предлагается перейти в «псевдополярные» координаты (вместо полярного радиуса будем использовать в качестве одной из координат $\rho$, то есть квадрат радиуса). Запишем уравнение на $\rho$: $$ \dot \rho = \dot{(z \overline z)}= \dot z \overline z + z \dot{\overline z} = (i +\varepsilon + C z \overline z)z\overline z + z \overline{(i+\varepsilon+Cz\overline z) z} = (i +\varepsilon + C \rho)\rho + (-i +\varepsilon + C \rho)\rho = 2 (\varepsilon + C \rho)\rho $$ Нам несказанно повезло: записав уравнение на $\rho$ мы получили в правой части выражение, не зависящее ни от чего, кроме самого $\rho$. Заметим также, что $\rho>0$.

Упражнение. Провести ту же выкладку в вещественных координатах: для $\rho=x^2+y^2$ найти производную вдоль векторного поля, заданного системой (*)

Ну что же, давайте рассмотрим все случаи на $C$. Начнем с $C<0$

In [5]:
fig = plt.figure()
rcParams['font.family']="Arial"
rcParams['figure.figsize']=(18,6)
fig.suptitle(u"Бифуркации Андронова-Хопфа, C<0", fontsize=20)
data=[(lambda X, t=0: array([-X[0]+2*X[1]-0.125*X[0]*(X[0]**2+X[1]**2),-2*X[0]-X[1]-0.125*X[1]*(X[0]**2+X[1]**2)]), 131, u'ε<0'),
      (lambda X, t=0: array([2*X[1]-0.125*X[0]*(X[0]**2+X[1]**2),-2*X[0]-0.125*X[1]*(X[0]**2+X[1]**2)]), 132, u'ε=0'),
      (lambda X, t=0: array([X[0]+2*X[1]-0.125*X[0]*(X[0]**2+X[1]**2),-2*X[0]+X[1]-0.125*X[1]*(X[0]**2+X[1]**2)]), 133, u'ε>0')]
for f,loc,title in data:
    ax=fig.add_subplot(loc)
    axes4x4(('x','y'))
    ax.set_title(title,fontsize=14)
    for r, t0 in [(1,3),(4,0)]:
        phaseportrait(f, 
                      [[r*sin(t),r*cos(t)] for t in arange(0,2*pi,pi/3)],
                      [t0,70], 
                      n=500)
plt.show()

Как анализировать нашу систему, как построить фазовый портрет? Исследуем дифференциальное уравнение на $\rho$. В случае $\varepsilon<0$ второй корень уравнения (кроме нуля) меньше нуля, и на всей оси $\rho>0$ мы убываем по $\rho$. Это означает, что радиус постоянно уменьшается, и это изображено на левом графике. Аналогичная картинка для $\varepsilon<0$, но теперь в окрестности $\rho=0$ производная нулевая, то есть мы конечно попадаем в ноль, но очень медленно. (Это называется «медленный фокус»: заметьте, что фазовый портрет похож на фазовый портрет фокуса, хотя линейная часть имеет тип «центр» — собственные значения имеют нулевые вещественные части.) Наконец в случае $\varepsilon>0$ у нас есть положительный корень $\rho=-\varepsilon /C$, и в промежутке от 0 до него $\rho$ растет. Это мы видим справа: мы действительно увеличиваем радиус для близких к началу координату $x$. На при $\rho=-\varepsilon /C$ радиус не меняется, и мы двигаемся по кругу. В данном случае это единственная замкнутая траектория (предельный цикл). Наконец для более далеких от начала координат $x$ производная $\dot \rho<0$ и радиус уменьшается.

Как видим, система при $\varepsilon=0$ структурно неустойчива.

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

Жесткая потеря устойчивости напротив «создает» неустойчивость резко. Рассмотрим случай $C>0$:

In [6]:
fig = plt.figure()
rcParams['font.family']="Arial"
rcParams['figure.figsize']=(18,6)
fig.suptitle(u"Бифуркации Андронова-Хопфа, C>0", fontsize=20)
data=[(lambda X, t=0: array([-X[0]+2*X[1]+.125*X[0]*(X[0]**2+X[1]**2),-2*X[0]-X[1]+0.125*X[1]*(X[0]**2+X[1]**2)]), 131, u'ε<0'),
      (lambda X, t=0: array([2*X[1]+0.125*X[0]*(X[0]**2+X[1]**2),-2*X[0]+0.125*X[1]*(X[0]**2+X[1]**2)]), 132, u'ε=0'),
      (lambda X, t=0: array([X[0]+2*X[1]+0.125*X[0]*(X[0]**2+X[1]**2),-2*X[0]+X[1]+0.125*X[1]*(X[0]**2+X[1]**2)]), 133, u'ε>0')]
for f,loc,title in data:
    ax=fig.add_subplot(loc)
    axes4x4(('x','y'))
    ax.set_title(title,fontsize=14)
    for r, t0 in [(1,.1),(4,.1)]:
        phaseportrait(f, 
                      [[r*sin(t),r*cos(t)] for t in arange(0,2*pi,pi/3)],
                      [-12,t0], 
                      n=200
                      )
plt.show()

Здесь картинка аналогична случаю $C<0$ с точностью до знака (ветви параболы $\dot \rho$) вверх, поэтому мы видим обратную картинку.

Вот описание разницы между жесткой и мягкой потерями устойчивости из статьи в Википедии:

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

2-я часть 16-й проблемы Гильберта

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

Рассмотрим систему $$ \begin{cases} \dot x = P_n(x,y)\\ \dot y = Q_n (x,y) \end{cases} $$ где $P_n,\ Q_n$ — многочлены степени $\leq n$. Что можно скказать о числе и расположении предельных циклов такой системы?

Записанная система в некотором роде простейшая из нетривиальных нелинейных систем, но пока наука не может даже ограничить сверху число предельных циклов (в виде функции от степени $n$). Например, неизвестно, сколько предельных циклов может быть у системы степени $2$.

Кто решит эту задачу, получит экзамен автоматом :)

А наш курс на этом окончен, спасибо за внимание!