13Устойчивость положений равновесия

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

13.1Интуитивное представление об устойчивости

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

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

13.1.1Одномерное фазовое пространство

Рассмотрим уравнение
Его фазовый портрет состоит из пяти фазовых кривых: двух особых точек и , двух лучей и и интервала . Направления движения вдоль фазовых кривых определяются знаком правой части: от точки и к точке , см. рис. 13.1 и 13.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=(6, 4))
plt.subplot2grid((6, 1), (0, 0), rowspan=5)
ob.axes4x4(labels=('x', '\dot x'), ymin=-2)
x = np.linspace(-4, 4)
plt.plot(x, x**2 - 1, '-', lw=2)
plt.plot([1, 1], [-2, 4], '--', color='gray', lw=2)
plt.plot([-1, -1], [-2, 4], '--', color='gray', lw=2)
plt.subplot2grid((6, 1), (5, 0))
plt.yticks([])
plt.xlim(-4, 4)
ob.onedim_phasecurves(-4, 4, [-1, 1], [-1, 1, -1], orientation='horizontal')
Рис. 13.1: График правой части (сверху) и фазовые кривые (снизу) для уравнения (13.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=(8, 5))
plt.subplot2grid((1, 10), (0, 0))
plt.xlim(-0.5, 0.5)
plt.xticks([], [])
plt.ylim(-4, 4)
ob.onedim_phasecurves(-4, 4, [-1, 1], [1, -1, 1])
plt.subplot2grid((1, 10), (0, 1), colspan=8)
ob.axes4x4()
def f(t, x):
    return x ** 2 - 1

for x0 in [1.0001, 1.001, 1.01, 1, 0.95, 0.99, 0.999, -1, -2, -4]:
    ob.eulersplot(f, -4, 4, x0, color='steelblue')
Рис. 13.2: Фазовые кривые (слева) и интегральные кривые (справа) для уравнения (13.1)
Точка является устойчивым положением равновесия: если начальное условие немного «не попадёт» в эту точку или в какой-то момент чуть-чуть отклонится от него (например, в результате маленького случайного шока), то оно не только не уйдёт «далеко», но и наоборот будет стремиться к этому же положению равновесия в будущем.

А вот точка совсем другая: если начальное условие отклоняется от него (даже совсем чуть-чуть), всё равно решение со временем уйдёт достаточно далеко либо в положительном направлении (уйдёт на бесконечность), либо в отрицательном (притянется к точке ). Эта точка является неустойчивой.

13.1.2Двумерное фазовое пространство

Давайте вспомним, какие особые точки на плоскости нам встречались. В главе 10 мы построили полную классификацию невырожденных линейных особых точек.
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

from itertools import product

def reset_plt():
    plt.xlim(-3, 3)
    plt.ylim(-3, 3)
    plt.xticks([], [])
    plt.yticks([], [])

def linfield(A, C, inits):    
    ob.phaseportrait(lambda X: C @ A @ np.linalg.inv(C) @ X,
                     inits=(C @ inits).T, t=(-2, 2), n=50, head_length=0.4, 
                     head_width=0.2, linewidth=1)
    plt.plot([0], [0], marker='o', mew=2, lw=0, markersize=5,
             markerfacecolor='white', markeredgecolor='steelblue')

plt.figure(figsize=(8, 6))
plt.rcParams['font.family'] = 'Arial'
############# Unstable node #############
plt.subplot(231)
reset_plt()

theta = np.linspace(0, 2 * np.pi, 4 * 3 + 1)
r = 1
u = np.cos(theta) * r
v = np.sin(theta) * r
inits = np.array([u, v])

C = np.array([[-3, 1], [1, 1]])

linfield(np.diag([1, 3]), C, inits)
plt.title("Неустойчивый узел")

############# Stable node #############
plt.subplot(234)
reset_plt()
linfield(np.diag([-1, -3]), C, inits)
plt.title("Устойчивый узел")

############# Unstable focus #############
plt.subplot(232)
reset_plt()
C = np.array([[1, 3], [2, -2]])
linfield(np.array([[1, 1], [-1, 1]]), C, 0.8 * inits)
plt.title("Неустойчивый фокус")
############# Stable focus #############
plt.subplot(235)
reset_plt()
linfield(np.array([[-1, 1], [-1, -1]]), C, 0.8 * inits)
plt.title("Устойчивый фокус")
############# Saddle #############

plt.subplot(233)
reset_plt()

C = np.array([[2, 1], [1, -1]])
inits = 0.5 * np.array(list(product(np.linspace(-10, 10, 6), [-1, 1]))
                 + [[-1, 0], [1, 0], [0, 1], [0, -1]]).T
linfield(np.diag([-1, 1]), C, inits)
plt.title("Седло")
############# Center #############

plt.subplot(236)
reset_plt()

inits = 0.8 * np.array([[0, x] for x in range(-4, 5) if x != 0]).T
linfield(np.array([[0, 1], [-1, 0]]), C, 0.8 * inits)
plt.title("Центр")
Рис. 13.3: Линейные особые точки
Напомним также, как выглядят фазовые кривые математического маятника, см. рис. 13.4 (подробнее см. в параграфе 7.3).
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,6))
ob.axes4x4(labels=('\\theta', 'v'))
def H(theta, v):
    return v**2 / 2 - np.cos(theta)
v_levels = np.linspace(0, 4, 17)
levels = []
for v in v_levels:
    levels.append(H(0, v))
    # levels = [H(0, v) for v in v_levels]
ob.mcontour(np.linspace(-5, 5, 300), np.linspace(-5, 5, 300),
    H, levels=levels, colors='steelblue', linestyles='solid')
theta_inits = np.linspace(0, np.pi, len(v_levels))
v_inits = np.sqrt(2 * np.cos(theta_inits) + v_levels ** 2 - 2)
ob.phaseportrait(lambda X: np.array([X[1], -np.sin(X[0])]), 
                list(np.array([theta_inits, v_inits]).T)[4::4], 
                t = (0, 0.01), color='steelblue')
ob.phaseportrait(lambda X: np.array([X[1], -np.sin(X[0])]), 
                 list(np.array([theta_inits, -v_inits]).T)[5::4], 
                 t = (0, 0.01), color='steelblue')
ob.phaseportrait(lambda X: np.array([X[1], -np.sin(X[0])]), 
                 list(np.array([-theta_inits, -v_inits]).T)[2::4], 
                 t = (0, 0.01), color='steelblue')
ob.phaseportrait(lambda X: np.array([X[1], -np.sin(X[0])]), 
                 list(np.array([-theta_inits, v_inits]).T)[3::4], 
                 t = (0, 0.01), color='steelblue')
Рис. 13.4: Фазовые кривые математического маятника
Здесь мы видим два типа особых точек: вблизи точки фазовые кривые похожи на окружности (прямо как в линейном центре), а около точек — гиперболы (как в седловой особой точке).

Какие из особых точек, изображённых на рисунках 13.3 и 13.4, являются устойчивыми, а какие неустойчивыми? Проще всего разобраться с узлами и фокусами: это такие особые точки, что все траектории стремятся к ним либо в прямом времени (когда ), либо в обратном (). Если все траектории стремятся к узлу (или фокусу) в прямом времени, то отклонившись немножко от этого положения равновесия мы со временем не только не уйдём от него далеко, но и будем неограниченно приближаться к нему. Мы уже раньше назвали такие особые точки устойчивым узлом и устойчивым фокусом (см. соответствующие картинки в нижнем ряду рис. 13.3) и было бы логично ожидать, что когда мы придумаем определение устойчивости, такие особые точки будут устойчивыми в соответствии с этим определением. Наоборот, если все траектории стремятся к положению равновесию в обратном времени, то в прямом времени они уходят от него. В этом случае, если мы чуть-чуть «промахнёмся» мимо особой точки, то попадём на одну из таких убегающих траекторий и уйдём достаточно далеко от особой точки. Это соответствует неустойчивому фокусу и узлу (верхний ряд на рис. 13.3).

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

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

Наконец, рассмотрим особые точки типа «центр». Они похожи на положения равновесия для математического маятника. При этом маятник направлен вертикально вниз и неподвижен. Небольшое отклонение маятника от такого положения приведёт к тому, что он начнёт колебаться — на фазовом портрете это соответствует замкнутой траектории, похожей на окружность. Чем меньше исходное отклонение, тем меньше амплитуда колебаний. Устойчиво ли такое положение равновесия? Вроде бы, да.

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

13.2Придумываем определение устойчивости

Рассмотрим дифференциальное уравнение
Пусть точка является положением равновесия, то есть . Пусть — решение этого уравнения с начальным условием .

Упражнение 1. Придумайте определение устойчивости особой точки .

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

Определение 1. (Неверное.) Особая точка называется устойчивой, если для любого начального условия , достаточно близкого к , соответствующая траектория стремится к особой точке . Иными словами, существует такое , что для всякого начального условия (здесь как обычно — это -окрестность точки ) выполняется следующее: .

Вопрос 1. Почему это определение — не то, которое мы хотим?
  Узнать ответ

Верный ответ. Например, особая точка типа «центр» согласно такому определению является неустойчивой, а нам бы хотелось, чтобы она была устойчивой.

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

Вопрос 2. Почему это определение тоже не подходит?
  Узнать ответ

Верный ответ. Рассмотрим уравнение на прямой . Точка является особой, если , то , а если , то . Отклонившись от точки чуть-чуть мы начнём отклоняться от неё всё сильнее, однако не уйдём дальше точки или , см. рис. 13.5. В то же время, сколь малым ни было бы наше отклонение от , траектория уйдёт от достаточно далеко (на расстояние порядка 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=(8, 5))
plt.subplot2grid((1, 10), (0, 0))
plt.xlim(-0.5, 0.5)
plt.xticks([], [])
plt.ylim(-4, 4)
plt.quiver([0, 0, 0, 0], [4, 0.1, -0.1, -4], [0, 0, 0, 0], 
           [-3 + 0.1, 1-0.2, -1 + 0.2, 3 - 0.1], angles='xy',
           scale_units='xy', scale=1, units='inches', 
           width=0.03, color='Teal')
plt.plot([0, 0, 0], [1, -1, 0], color='Teal', marker='o', 
         fillstyle='none', mew=5, lw=0, markersize=2)
plt.subplot2grid((1, 10), (0, 1), colspan=8)
ob.axes4x4()
def f(t, x):
    return -x ** 3 + x

for x0 in [0, 1, -1, 0.001, -0.001, 0.01, 
           -0.01, 0.1, -0.1, 4,  -4]:
    ob.eulersplot(f, -4, 4, x0, color='steelblue')
Рис. 13.5: Фазовые кривые (слева) и интегральные кривые (справа) для уравнения .

Определение 3. (Опять неверное!) Особая точка называется устойчивой, если существует такое , что любая траектория, стартующая в -окрестности точки , не покидает эту окрестность. Иными словами, для всякого начального условия выполняется следующее: .

Вопрос 3. Почему и это определение не подходит?
  Узнать ответ

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

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,6))
ob.axes4x4(labels=('x', 'y'))
ob.phaseportrait(lambda X, t=0: np.array([-2*X[1], 0.5*X[0]]),
             [[0.7, 0.7], [1.4, 1.4]])
theta = np.linspace(0, 2 * np.pi)
plt.plot(np.cos(theta), np.sin(theta), color='black')

Ну что же, дадим, наконец, и верное определение.

Определение 4. (Теперь верное.) Особая точка называется устойчивой по Ляпунову, если для всякого найдётся такое , что для всякого начального условия , решение с этим начальным условием не покинет -окрестность точки (то есть для всякого , ).

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

13.3Используем определение устойчивости по Ляпунову

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

13.3.1Устойчивый узел

Сначала рассмотрим устойчивый линейный узел. Перейдём в нормализующие координаты (соответствующие собственному базису). Система примет вид
где и . В любой момент времени обе координаты убывают по модулю, следовательно, убывает и расстояние до нуля. Значит в определении устойчивости для всякого можно положить : любая траектория, стартующая в -окрестности нуля, не покидает эту -окрестность.

Замечание 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, 6))
ob.axes4x4(labels=('x', 'y'))
def linfield(A, C, inits):    
    ob.phaseportrait(lambda X, t=0: C @ A @ np.linalg.inv(C) @ X,
                     (C @ inits).T, t=(-2, 2), n=50, head_length=0.3, 
                     head_width=0.15, linewidth=1)
    plt.plot([0], [0], marker='o', mew=2, lw=0, markersize=5,
             markerfacecolor='white', markeredgecolor='steelblue')

C = np.array([[1, 0], [0, 1]])
theta = np.linspace(0, 2 * np.pi, 4 * 3 + 1)
r = 3
u = np.cos(theta) * r
v = np.sin(theta) * r
inits = np.array([u, v])
linfield(np.diag([-1, -3]), C, inits)
theta = np.linspace(0, 2 * np.pi, 101)
plt.plot(np.cos(theta), np.sin(theta))

13.3.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=(6,6))
ob.axes4x4(labels=('x','y'))
ob.phaseportrait(lambda X, t=0: np.array([7.0*X[0]-9.0*X[1], 9*X[0]-7.0*X[1]]), 
                 [[x,-x] for x in np.linspace(0,20,20)/3], [-2,2], n=150,
                 head_length=0.3, head_width=0.15, linewidth=1)
circ = lambda x, y: y**2/2 + x**2/2
data = [(4, 'black'), (1, 'red'), (.2, 'purple')]
for level, color in data:
    ob.mcontour(np.linspace(-5,5,300), np.linspace(-5,5,300), circ, 
                levels=[level], linewidths=2, colors=color)
Тем не менее, особая точка является устойчивой по Ляпунову. Действительно, если нам дали черную окрестность, то красной окрестности будет недостаточно: существуют траектории, начинающиеся внутри красной окрестности, но покидающие чёрную. Зато фиолетовой окрестности нам хватит: выбирая любое начальное условие внутри фиолетового круга мы никогда не сможем выйти за черный круг. Можно аккуратно показать, что для любого чёрного круга найдётся свой фиолетовый.

13.3.3Седло

Рассмотрим теперь особую точку вида седло:
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

def linfield(A, C, inits):    
    ob.phaseportrait(lambda X, t=0: C @ A @ np.linalg.inv(C) @ X,
                     (C @ inits).T, t=(-2, 2), n=50, head_length=0.4, 
                     head_width=0.2, linewidth=1)
    plt.plot([0], [0], marker='o', mew=2, lw=0, markersize=5,
             markerfacecolor='white', markeredgecolor='steelblue')

from itertools import product
plt.figure(figsize=(6,6))
ob.axes4x4(labels=('x','y'))
C = np.array([[2, 1], [1, -1]])
inits = 0.5 * np.array(list(product(np.linspace(-10, 10, 6), [-1, 1]))
                 + [[-1, 0], [1, 0], [0, 1], [0, -1]]).T
linfield(np.diag([-1, 1]), C, inits)
theta = np.linspace(0, 2 * np.pi)
plt.plot(3 * np.cos(theta), 3 * np.sin(theta), color='black', lw=2)
Сколь бы малую -окрестность мы бы ни выбрали, эту окрестность пересекают траектории из семейства гипербол, уходящие далеко от седла. Из этого следует, что седло является неустойчивым.

Замечание 2. Чтобы продемонстрировать, что особая точка не является устойчивой, достаточно было бы иметь хотя бы одну траекторию, по которой можно уйти из любой окрестности особой точки на какое-то фиксированное расстояние.

13.4Асимптотическая устойчивость

Когда мы обсуждали вопрос об «интуитивной» устойчивости линейных особых точек, у нас не возникло никаких сомнений по поводу узлов, фокусов и сёдел. С центрами всё не так однозначно. С одной стороны, траектории, близкие к особой точке, не уходят слишком далеко, и это вроде бы соответствует нашим представлениям об устойчивости и согласуется с определением устойчивости по Ляпунову. С другой стороны, нам может потребоваться более сильное условие: чтобы со временем траектория не просто не уходила далеко от особой точки, но и приближалась к ней. Это условие даёт нам определение асимптотической устойчивости.

Определение 5. Особая точка называется асимптотически устойчивой, если она устойчива по Ляпунову и существует такое , что для всякого начального условия верно следующее: .

Заметим, что определение 5 очень похоже на неверное определение 1: разница состоит в том, что в определение асимптотической устойчивости явно входит требование устойчивости по Ляпунову. Может быть, достаточно только условия на предел? Оказывается, нет: можно построить пример системы, у которой имеется такая особая точка, что любая траектория, стартующая вблизи этой точки, возвращается к ней, но при этом может уйти достаточно далеко — и таким образом особая точка не является устойчивой по Ляпунову.

Упражнение 2. Рассмотрим дифференциальное уравнение, в полярных координатах задающееся следующим образом:
  1. Построить фазовый портрет в координатах и .
  2. Что можно сказать о поведении решений при ?
  3. Является ли положение равновесия асимптотически устойчивым?
  4. Устойчивым по Ляпунову?

13.5Теорема об устойчивости по первому приближению

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

Теорема 1. (Ляпунова, об устойчивости по первому приближению.)

Для особой точки системы дифференциальных уравнений (13.2) рассмотрим матрицу Якоби:

Пусть собственные значения матрицы равны .
  1. Если все собственные значения имеют отрицательные вещественные части, то есть для всех , то особая точка асимптотически устойчива.
  2. Если хотя бы одно собственное значение имеет положительную вещественную часть, то есть найдётся такое , что , то особая точка не является устойчивой по Ляпунову.

Между двумя утверждениями теоремы есть «зазор»: бывают такие особые точки, про устойчивость которых теорема не говорит ничего.

Вопрос 4. Что вы можете сказать о собственных значениях особых точек, для которых теорема об устойчивости не говорит ничего?
  Узнать ответ

Верный ответ. Это особые точки, у которых есть собственные значения, лежащие на мнимой оси, то есть имеющие нулевую вещественную часть, а также, быть может, есть какое-то количество собственных значений с отрицательной вещественной частью.

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

Доказательство. (Набросок доказательства для линейных уравнений)

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

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

Доказательство для жордановой клетки более сложное. Рассмотрим уравнение , где — жорданова клетка с собственным значением , причём . Рассмотрим для простоты случай вещественного , то есть . (Случай комплексного рассматривается аналогично, но с некоторыми техническими усложнениями.)

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

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

Прямое вычисление показывает, что
В дальнейшем мы будем работать в новой системе координат. Число подберем позднее.

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

Первое слагаемое является отрицательным, поскольку . Мы хотим подобрать такое маленькое , чтобы второе слагаемое по модулю было меньше первого. Это всегда можно сделать, поскольку
Выбирая , получаем требуемое.