Изучая линейную алгебру, все так или иначе сталкиваются с Жордановой нормальной формой (ЖНФ).

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

В этой статье я попытаюсь объяснить ЖНФ так, как мне кажется, наиболее понятным. Это доказательство является сб��рной солянкой из различных доказательств, но, по моему мнению, оно дает ответы на многие вопросы. После прочтения статьи(я надеюсь), помимо доказательства, вы узнаете ответы на несколько вопросов:

  • Почему матрица выглядит именно так?

  • Можно ли привести матрицу к ЖНФ несколькими способами?

  • Важен ли порядок векторов в матрице перехода между базисами?


Пререквизиты: Векторные пространства, линейные операторы, алгебра матриц, матрицы перехода, ядро и образ оператора, собственные вектора, инвариантные подпространства.

Зачем нужно диагонализировать оператор?

Рассмотрим известный пример (Числа Фибоначчи):

\begin{pmatrix}      1 & 1 \\      1 & 0 \\        \end{pmatrix} ^{n - 1}      \cdot       \begin{pmatrix}      F_1 \\      F_{0} \\        \end{pmatrix}       =      \begin{pmatrix}      F_{n} \\      F_{n - 1} \\        \end{pmatrix}

Если мы обладаем возможностью вбить в компьютер, то тут можно было бы и закончить, но, допустим, что мы не имеем такой возможности.

Что же с этим можно сделать?

Вспоминая из линейной алгебры, что:

B^n = (C^{-1}AC)^n = C^{-1}A\underbrace{CC^{-1}}_{E}A\ldots A\underbrace{CC^{-1}}_{E}AC = C^{-1}A^nC

Мы можем понять, что можно перевести эту матрицу в более ''удобный'' вид, в котором возвести матрицу в степень намного проще.

Самым удобным является диагональный вид, так как:

A^k =              \begin{pmatrix}             \lambda_1  & 0  & \dots & 0 \\             0 & \lambda_2  &\dots & 0 \\             \vdots   & \vdots & \ddots &\vdots\\             0  & 0 & \dots & \lambda_n              \end{pmatrix}^k              =              \begin{pmatrix}             \lambda_1^k  & 0  & \dots & 0 \\             0 & \lambda_2^k  &\dots & 0 \\             \vdots   & \vdots & \ddots &\vdots\\             0  & 0 & \dots & \lambda_n^k             \end{pmatrix}

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

Что делать если оператор не диагонализируем?

В таком случае нам нужно привести оператор к какому-то другому виду, в котором матрицу возводить в степень не очень сложно.

Тут и появляется Жорданова нормальная форма(далее ЖНФ). Оказывается, что можно привести любой оператор над алгебраически замкнутым полем к ЖНФ.

Будем рассматривать векторные пространства V над алгебраически замкнутым полем, частным случаем которого являются комплексные числа. Это нужно для того, чтобы собственные числа принадлежали этому полю.

Дальнейшие доказательства работают и для векторных пространств над алгебраически незамкнутыми полями, но только для операторов, у которых собственные числа принадлежать полю \mathbb{K}.

Жордановой нормальной формой(Жордановой матрицей) называют матрицу, состоящую из диагональных блоков J_{r_i}(\lambda_i) и нулей вне этих блоков, где J_{r_i}(\lambda_i) - это Жорданова клетка, которая будет рассмотрена дальше.

\begin{pmatrix}             \boxed{J_{i_1}(\lambda_1)} & 0 & \dots & 0 \\             0  & \boxed{J_{i_2}(\lambda_2)} & \dots & 0 \\             \vdots & \vdots & \ddots & \vdots\\             0 & 0 & \dots & \boxed{J_{i_r}(\lambda_r)}             \end{pmatrix}

Жорданова клетка

Жордановой клеткой называют квадратную матрицу

J_r(\lambda) =              \begin{pmatrix}             \lambda & 1 & 0 & \dots & 0 & 0 \\             0  & \lambda & 1 & \dots & 0 & 0 \\             0 & 0 & \lambda & \dots & 0 & 0\\             \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\             0 & 0 & 0 & \dots & \lambda & 1 \\             0 & 0 & 0 & \dots & 0 & \lambda              \end{pmatrix}

порядка r.

Возведение Жордановой клетки в степень

Заметим, что J_r(\lambda) = N + \lambda E, где N - нильпотентная матрица.

Докажем, при возведении в степень k каждый столбец матрицы ''сдвигается вправо'' и что у N^k первые k столбцов нулевые.
Иными словами, докажем, что

N^k =             \begin{pmatrix}            0 & \dots & \overbrace{1}^{k + 1} & 0 & \dots & 0 \\            0  & \dots & 0 & 1 &\dots & 0 \\            0 & \dots & 0 & 0 &\dots & 0\\            \vdots & \ddots & \vdots & \vdots & \ddots &\vdots\\            0 & 0 & 0 & 0& \dots & 0             \end{pmatrix}     \\ \Updownarrow \\ N^k = ||n_{i,j}||^r_1 = || \delta_{i, j - k} ||^r_1

||n_{i,j}||^r_1 - квадратная матрица порядка r, где i и j от 1 до r.

\delta_{i, j - k} =             \begin{cases}            0, & \text{если $i \neq j - k$;} \\            1, & \text{если $i = j - k$.}            \end{cases} \quad \text{(символ Кронекера)}

i столбце единица стоит на i - k строчке)

Докажем по индукции

База:

N^1 =             \begin{pmatrix}            0 & 1 & 0 & \dots & 0 \\            0  & 0 & 1 & \dots & 0 \\            0 & 0 & 0 & \dots & 0\\            \vdots & \vdots & \vdots & \ddots &\vdots\\            0 & 0 & 0 & \dots & 0             \end{pmatrix}

Переход:

N^{k + 1} =             N \cdot N^k = \\=            \begin{pmatrix}            0 & 1 & 0 & \dots & 0 \\            0  & 0 & 1 & \dots & 0 \\            0 & 0 & 0 & \dots & 0\\            \vdots & \vdots & \vdots & \ddots &\vdots\\            0 & 0 & 0 & \dots & 0             \end{pmatrix}             \cdot             \begin{pmatrix}            0 & \dots & \overbrace{1}^{k + 1} & 0 & \dots & 0 \\            0  & \dots & 0 & 1 &\dots & 0 \\            0 & \dots & 0 & 0 &\dots & 0\\            \vdots & \ddots & \vdots & \vdots & \ddots &\vdots\\            0 & \dots & 0 & 0& \dots & 0             \end{pmatrix} =\\= \begin{pmatrix}            0 & \dots & \overbrace{1}^{k + 2} & 0 & \dots & 0 \\            0  & \dots & 0 & 1 &\dots & 0 \\            0 & \dots & 0 & 0 &\dots & 0\\            \vdots & \ddots & \vdots & \vdots & \ddots &\vdots\\            0 & \dots & 0 & 0& \dots & 0             \end{pmatrix}

Таким образом мы получаем, что N^k = || \delta_{i, j - k} ||^n_1.

Доказательство закончено.

Зная, что J_r(\lambda) = N + \lambda E мы получаем, что

J_r(\lambda)^k = (N + \lambda E)^k = \sum\limits_{i = 0}^{k} \binom{k}{i} \cdot \lambda^{k - i} \cdot N^i = \sum\limits_{i = 0}^{min(k, r - 1)} \binom{k}{i} \cdot \lambda^{k - i} \cdot N^i

(Так как N^r = 0)

Что достаточно просто считается.

К какому базису нужно тогда приводить? (Корневые подпространства и вектора)

Вектор v называется корневым вектором линейного оператора \mathcal{A}, отвечающим числу \lambda \in \mathbb{K}, если (\mathcal{A} - \lambda \cdot id)^p(v) = 0 для некоторого p \in \mathbb{Z}_+(где id - это тождественный оператор). Наименьшее из таких p называется высотой корневого вектора v. Далее вектор высоты p будем обозначать v^{(p)}
Высоту вектора v будем обозначать ht \text{ } v.

Примеры

  • Собственные вектора - вектора высоты 1.

  • Нулевой вектор - вектор высоты 0.

Корневые векторы соответствующие одному собственному значению образуют подпространство V. Оно называется корневым подпространством и обозначается V_{\lambda}.

А как это вообще связано с ЖНФ?

Пусть \dim V = p. Тогда если оператор \mathcal{A} имеет вектор высоты p, то V = \langle v^{(1)}, v^{(2)},\dots, v^{(p-1)}, v^{(p)}\rangle, где v^{(i)} = \mathcal{A}^{p - i}v^{(p)}

(\mathcal{A} - id \cdot \lambda)^p (v^{(p)}) = (\mathcal{A} - id \cdot \lambda)^{p - 1}(\mathcal{A} - id \cdot \lambda) (v^{(p)})=  \\ =(\mathcal{A} - id \cdot \lambda)^{p - 1} (\mathcal{A}v^{(p)} - \lambda \cdot  v^{(p)})= 0  \implies \\ \implies   \mathcal{A}v^{(p)} - \lambda \cdot  v^{(p)} = v^{(p - 1)}             \implies \mathcal{A}v^{(p)} = \lambda \cdot  v^{(p)} + v^{(p - 1)}

\mathcal{A}v^{(p)} - \lambda \cdot  v^{(p)} \neq 0, так как ht\text{ }v^{(p)} = p. \mathcal{A}v^{(p)} - \lambda \cdot  v^{(p)} - вектор высоты (p - 1), обозначим его за v^{(p - 1)}.

Это значит, что при рассмотрении пространства, в котором базисом являются корневые вектора линейного оператора \mathcal{A} линейный оператор будет выглядеть как Жорданова клетка размера dim V.

A(v^{(k)}) =             \begin{pmatrix}            \lambda & 1 & 0 & \dots & 0 \\            0  & \lambda & 1 & \dots & 0 \\            0 & 0 & \lambda & \dots & 0\\            \vdots & \vdots & \vdots & \ddots &\vdots\\            0 & 0 & 0 & \dots & \lambda             \end{pmatrix}             \cdot             \begin{pmatrix}            0 \\            \vdots \\            1 \\            \vdots \\            0            \end{pmatrix}           =\\  =             \begin{pmatrix}            0 & \dots & 0 & \overbrace{1}^{k - 1} & \underbrace{\lambda}_k & \dots & 0            \end{pmatrix}^T %\text{  }(\forall k \in \mathbb{N})

Логично, что вектор высоты 1 должен быть первым, так как он переходит в себя, домноженного на лямбду, плюс вектор высоты 0.

А что если у нас несколько линейно независимых корневых векторов одной высоты в корневом подпространстве?

Давайте рассмотрим вместо оператора \mathcal{A} оператор \mathcal{N} = \mathcal{A} - \lambda \cdot id.
Очевидно, что если оператор \mathcal{N} приводится к ЖНФ, то и \mathcal{A} приводится к ЖНФ, так как C^{-1}AC = C^{-1}(N + \lambda E)C = C^{-1}NC + \lambda E.

Пусть e^{(p)} - корневой вектор оператора \mathcal{A} высоты p.\implies \mathcal{N}^k(e^{(p)}) = (\mathcal{A} - \lambda \cdot id)^k(e^{(p)}) = e^{(p - k)}.
Подпространство U = \langle e, \mathcal{N}e, \mathcal{N}^2e,\dots,\mathcal{N}^{p - 1}e \rangle (p = ht ~e) называется циклическим подпространством.
Очевидно, что U инвариантно относительно \mathcal{N}. Ограничение оператора \mathcal{N} на U задается матрицей

J_p(0) =         \begin{pmatrix}            0 & 1 & 0 & \dots & 0 \\            0  & 0 & 1 & \dots & 0 \\            0 & 0 & 0 & \dots & 0\\            \vdots & \vdots & \vdots & \ddots &\vdots\\            0 & 0 & 0 & \dots & 0         \end{pmatrix}

Докажем, что существует инвариантное относительное \mathcal{N}подпространство W \subset V, такое что V = U \oplus W. U = \langle e, \mathcal{N}e,\mathcal{N}^2e,..., \mathcal{N}^{p-1}e \rangle, где p максимально.

Возьмем максимальное инвариантное подпространство W, которое не имеет пересечения с U. Такое всегда есть, например, нулевое.

Докажем, что V = U \oplus Wот противного:

Возьмем вектор v \notin U + W.
U содержит в себе вектор максимальной высоты p, поэтому \forall v ~~ \mathcal{N}^{p}v = 0.
Из этого следует, что существует k такое, что \mathcal{N}^{k - 1}(v) \notin U + W \text{, но }\mathcal{N}^{k}(v) \in U + W, так как \mathcal{N}^p(v) = 0.

(Далее будем обозначать \mathcal{N}^{k - 1}(v) за v').

\mathcal{N}(v') \in U + W \implies \mathcal{N}(v') = u + w (u \in U, w \in W) \mathcal{N}^{p - 1}(\mathcal{N}(v')) = \mathcal{N}^{p - 1}(u + w) = \mathcal{N}^{p - 1}(u) + \mathcal{N}^{p - 1}(w) = 0U \cap W = 0 \implies \mathcal{N}^{p - 1}(u) = \mathcal{N}^{p - 1}(w) = 0

(так как U и W инвариантны относительно \mathcal{N}) и линейно независимы

ht \text{ } u < p \text{, так как } \mathcal{N}^{p - 1}(u) = 0 \implies u \in \langle \mathcal{N}e, \mathcal{N}^2e,\dots,\mathcal{N}^{p - 1}e \rangle

Пусть u = \mathcal{N}u'(u' \in U). Такой u' существует, так как высота u меньше p.

\mathcal{N}(v') = u + w = \mathcal{N}(u') + w \implies \mathcal{N}(v' - u') = w\text{, где }v' - u' \notin U + Wv' - u' \notin U + W \text{, так как } v' \notin U + W \land u' \in U

Рассмотрим W' = W + \langle (v' - u') \rangle.

W' инвариантно, так как W инвариантно, а \mathcal{N}(v' - u') \in W

Докажем, что W' \cap U = 0, таким образом расширив "максимальное" W

Возьмем y = z + \alpha (v' - u') (y \in W' \cap U; z \in W).

\implies \alpha \underbrace{(v' - u')}_{\notin U + W} = \underbrace{y - z}_{\in U + W}

y - z \in U + W, так как y \in W' \cap U \implies y \in U, а z \in W.

Значит \alpha = 0, но тогда y = z \implies y \in W, но W \cap U = 0 \implies y = 0

Мы доказали, что U \cap W' = 0.

Значит U \cap W' = 0
В итоге получим, что W можно расширить до W', получая противоречие. \implies V = U              + W = U \oplus W(так как U \cap W = 0).

Доказательство закончено.

Такой алгоритм мы можем применять пока W \neq 0(дальше смысла нет), таким образом раскладывая в прямую сумму инвариантных подпространств.

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

Что делать, если у оператора несколько различных собственных значений?

Существует такое p, начиная с которого Ker \mathcal{N}^p = Ker\mathcal{N}^{p + i} ~~~ \forall i > 0.(Теорема о стабилизации)

Напомним, что \mathcal{N} = \mathcal{A} - \lambda \cdot id.
Очевидно, что Ker\mathcal{N}^i \subset Ker\mathcal{N}^{i + 1}, а также dimKer\mathcal{N}^i ограничено \dim V.
Поэтому начиная с какого-то момента Ker\mathcal{N}^p = Ker\mathcal{N}^{p + 1}. Осталось доказать, что если соседние элементы равны, то так будет и дальше(Ker\mathcal{N}^{p} = Ker\mathcal{N}^{p + i} \forall i > 0).
По условию \mathcal{N}^p(v) = 0 \Longleftrightarrow \mathcal{N}^{p + 1}(v) = 0

Пусть \exists v : \mathcal{N}^{p + i}(v) = 0

\mathcal{N}^{p + i}(v) = \mathcal{N}^{p + 1}(\mathcal{N}^{i - 1}v) = \mathcal{N}^{p}(\mathcal{N}^{i - 1}v) = \mathcal{N}^{p + i - 1}(v) = 0

Таким образом мы можем действовать, пока i > 0

Теорема доказана

Пусть линейный оператор \mathcal{A}(над V) имеет собственное значение \lambda. Тогда имеет место разложение V в прямую сумму, V = V_{\lambda} \oplus W, где W- инвариантное подпространство, причем ограничение оператора на Wневырождено.

Очень похоже на доказательство с циклическими подпространствами

Воспользуемся тем же методом. Будем рассматривать \mathcal{N} = \mathcal{A} - \lambda \cdot id. Тогда собственным значением для \mathcal{N} будет 0.

Положим W = Im \mathcal{N}^p(где начиная с p последовательность Ker \mathcal{N}^i стабилизируется) и докажем, чтоV = V_\lambda \oplus W = Ker \mathcal{N}^p \oplus Im \mathcal{N}^p.

Инвариантность W очевидна, так как \mathcal{N}^{p + 1}(v) = \mathcal{N}^{p}(\mathcal{N}(v)) \in Im\mathcal{N}^p. \implies Im\mathcal{N}^{p + 1} = Im\mathcal{N}^p

По известной теореме(например, можно найти в Винберге 5.2.2(201 страница))\

\dim Ker \mathcal{N}^p + \dim Im \space \mathcal{N}^p = dim \space V

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

Пусть v \in Ker \mathcal{N}^p \cap  Im \space \mathcal{N}^p. v \in Im ~ \mathcal{N}^p \implies \exists w : \mathcal{N}^p(w) = v

Ker \mathcal{N}^p = Ker \mathcal{N}^{2p} \implies        w \in Ker \mathcal{N}^p \text{, так как $\mathcal{N}^{2p}(w) = \mathcal{N}^{p}(v) = 0$} \\ \implies \mathcal{N}^{p}(w) = 0 \\ \implies v = 0

Следовательно Ker \mathcal{N}^p \cap  Im \space \mathcal{N}^p = 0.

Таким образом мы можем разложить пространство в прямую сумму корневых подпространств(закончив в тот момент, когда W = {0}).
Они будут инварианты относительно \mathcal{A}. Поэтому матрицу можно представить в виде блочно-диагональной матрицы, блоки которой представляют из себя жордановы клетки.

Приведение к ЖНФ

Таким образом мы доказали и описали алгоритм нахождения ЖНФ.

Теперь посмотрим, как это использовать на практике, и ответим на некоторые вопросы, которые могут возникнуть:

  1. Можно ли выбрать любой корневой вектор при построении базиса?(одной высоты и с одним собственным числом)

  2. Важен ли порядок векторов?

  3. Важен ли порядок клеток?

Ответы на эти вопросы должны быть понятны исходя из доказательства, но если отвечать коротко:

  1. Да, можно выбрать любой корневой вектор

  2. Да, порядок векторов важен

  3. Нет, порядок клеток не важен

Приведем матрицу к ЖНФ и заодно проверим это

A = \begin{pmatrix}            0 & -6 & -7 & -9 \\            1 & 5 & 3 & 4 \\            0 & 0 & 4 & 2 \\            0 & 0 & -1 & 1         \end{pmatrix}

Найдем собственные числа(корни характеристического уравнения)

\det (A - \lambda E) =         \begin{vmatrix}            -\lambda & -6 & -7 & -9 \\            1 & 5 -\lambda  & 3 & 4 \\            0 & 0 & 4 -\lambda & 2 \\            0 & 0 & -1 & 1 -\lambda        \end{vmatrix} = \\ = -\lambda \cdot \begin{vmatrix}               5 -\lambda  & 3 & 4 \\             0 & 4 -\lambda & 2 \\             0 & -1 & 1 -\lambda         \end{vmatrix} - 1 \cdot \begin{vmatrix}             -6 & -7 & -9 \\             0 & 4 -\lambda & 2 \\             0 & -1 & 1 -\lambda         \end{vmatrix} = \\ = -\lambda \cdot (5 -\lambda) \cdot \begin{vmatrix}               4 -\lambda & 2 \\             -1 & 1 -\lambda         \end{vmatrix} - 1 \cdot (-6) \cdot \begin{vmatrix}             4 -\lambda & 2 \\             -1 & 1 -\lambda         \end{vmatrix} = \\ = -\lambda \cdot (5 -\lambda) \cdot (\lambda^2 -5\lambda + 6) - 1 \cdot (-6) \cdot (\lambda^2 -5\lambda + 6) = \\ = (\lambda - 3) (\lambda - 2)(-\lambda \cdot (5 -\lambda) - 1 \cdot (-6))  = \\ = (\lambda - 3) (\lambda - 2) \cdot (\lambda^2 - 5\lambda + 6) = (\lambda - 3)^2 (\lambda - 2)^2

Таким образом получаем, что A имеет 2 собственных числа: \lambda_1 = 3 кратности 2 и \lambda_2 = 2 кратности 2.

Найдем базис корневого подпространства V_{\lambda_1}

Подпространство V_{\lambda_1} размерности 2, поэтому существует несколько возможных базисов: 2 корневых вектора высоты 1, и один корневой вектор высоты 2 и один высоты 1.

Чтобы определить, сколько у нас векторов высоты 2, нам нужно посмотреть на решения уравнения (A - \lambda_1 E)^2v = 0, затем проверить, есть ли среди них вектор высоты 2.

Это можно сделать домножив каждый из них на(A - \lambda_1 E)если какой-то из них не равен 0, то он будет являться вектором высоты 2.

Сначала найдем решения уравнения (A - \lambda_1 E)^2v = 0.

Для этого сначала посчитаем (A - \lambda_1 E)^2:

\begin{pmatrix}            -3 & -6 & -7 & -9 \\            1 & 2 & 3 & 4 \\            0 & 0 & 1 & 2 \\            0 & 0 & -1 & -2         \end{pmatrix}         \cdot        \begin{pmatrix}            -3 & -6 & -7 & -9 \\            1 & 2 & 3 & 4 \\            0 & 0 & 1 & 2 \\            0 & 0 & -1 & -2         \end{pmatrix} =\\=        \begin{pmatrix}            3 & 6 & 5 & 7 \\            -1 & -2 & -2 & -3 \\            0 & 0 & -1 & -2 \\            0 & 0 & 1 & 2         \end{pmatrix}

Запишем систему в матричном виде:

\begin{pmatrix}            3 & 6 & 5 & 7 \\         -1 & -2 & -2 & -3 \\            0 & 0 & -1 & -2 \\            0 & 0 & 1 & 2         \end{pmatrix}        \begin{pmatrix}            x_1 \\            x_2 \\            x_3 \\            x_4        \end{pmatrix} = \begin{pmatrix}             0 \\             0 \\             0 \\             0         \end{pmatrix}

Упростим систему воспользовавшись эквивалентными преобразованиями матриц:

\begin{pmatrix}            3 & 6 & 5 & 7 \\             -1 & -2 & -2 & -3 \\            0 & 0 & -1 & -2 \\            0 & 0 & 1 & 2         \end{pmatrix}         \rightarrow        \begin{pmatrix}            3 & 6 & 5 & 7 \\            -1 & -2 & -2 & -3 \\            0 & 0 & -1 & -2 \\            0 & 0 & 0 & 0         \end{pmatrix} \rightarrow    \\     \rightarrow        \begin{pmatrix}            0 & 0 & -1 & -2 \\            -1 & -2 & -2 & -3 \\            0 & 0 & -1 & -2 \\            0 & 0 & 0 & 0         \end{pmatrix}         \rightarrow \begin{pmatrix}             1 & 2 & 2 & 3 \\             0 & 0 & 1 & 2 \\             0 & 0 & 0 & 0 \\             0 & 0 & 0 & 0          \end{pmatrix}  \rightarrow \\ \rightarrow         \begin{pmatrix}             1 & 2 & 0 & -1 \\             0 & 0 & 1 & 2 \\             0 & 0 & 0 & 0 \\             0 & 0 & 0 & 0          \end{pmatrix}

Осталось найти решения такой системы:

\begin{pmatrix}            1 & 2 & 0 & -1 \\            0 & 0 & 1 & 2 \\            0 & 0 & 0 & 0 \\            0 & 0 & 0 & 0         \end{pmatrix}          \begin{pmatrix}            x_1 \\            x_2 \\            x_3 \\            x_4        \end{pmatrix} =         \begin{pmatrix}            0 \\            0 \\            0 \\            0        \end{pmatrix}

Ранг матрицы равен 2, поэтому нам нужно найти 2 линейно-независимых вектора, которые и будут составлять базис корневого подпространства.

Возьмем 2 любых линейно-независимых вектора:

v_1 = \begin{pmatrix}            1 \\            -1 \\            2 \\            -1        \end{pmatrix}        ;~~        v_2 = \begin{pmatrix}            1 \\            0 \\            -2 \\            1        \end{pmatrix}

Домножим каждый из них на (A - \lambda_1 E). Если среди них есть вектор высоты 2, то он должен перейти в вектор высоты 1, а другой должен перейти в 0.

\begin{pmatrix}            -3 & -6 & -7 & -9 \\            1 & 2 & 3 & 4 \\            0 & 0 & 1 & 2 \\            0 & 0 & -1 & -2         \end{pmatrix}         \begin{pmatrix}            1 \\            -1 \\            2 \\            -1        \end{pmatrix}         =         \begin{pmatrix}            -2 \\            1 \\            0 \\            0        \end{pmatrix}\begin{pmatrix}            -3 & -6 & -7 & -9 \\            1 & 2 & 3 & 4 \\            0 & 0 & 1 & 2 \\            0 & 0 & -1 & -2         \end{pmatrix}         \begin{pmatrix}            1 \\            0 \\            -2 \\            1        \end{pmatrix}          =         \begin{pmatrix}            2 \\            -1 \\            0 \\            0        \end{pmatrix}

Оба вектора оказались векторами высоты 2, но базис должен состоять из вектора высоты 1 и высоты 2, чтобы выглядеть как жорданова клетка. Глядя на них, видно, что v_1, v_2 и (A - \lambda_1 E)v_1 линейно зависимы.

Базис найден, но...

Мы нашли 2 различных корневых вектора высоты 2:
v_2 и v_1. Значит с каждым из них можно составить базис, в котором матрица A жорданова(Это мы проверим позже).

Главное - чтобы векторы были в таком порядке, чтобы
вектор высоты p, переходил в вектор высоты (p - 1), лежащем в том же циклическом подпространстве. Тогда сужение A(в жордановом базисе) на это циклическое подпространство будет выглядеть, как жорданова клетка.

Теперь найдем базис корневого подпространства V_{\lambda_2}

Подпространство V_{\lambda_2} размерности 2, поэтому будем действовать так же, как и в предыдущем случае: сначала узнаем количество корневых векторов высоты 2.

Найдем решения уравнения (A - \lambda_2 E)^2v = 0:

\begin{pmatrix}            -2 & -6 & -7 & -9 \\            1 & 3 & 3 & 4 \\            0 & 0 & 2 & 2 \\            0 & 0 & -1 & -1         \end{pmatrix}        \cdot        \begin{pmatrix}            -2 & -6 & -7 & -9 \\            1 & 3 & 3 & 4 \\            0 & 0 & 2 & 2 \\            0 & 0 & -1 & -1         \end{pmatrix} =\\=        \begin{pmatrix}            -2 & -6 & -9 & -11 \\            1 & 3 & 4 & 5 \\            0 & 0 & 2 & 2 \\            0 & 0 & -1 & -1         \end{pmatrix}

Запишем систему в матричном виде:

\begin{pmatrix}            -2 & -6 & -9 & -11 \\            1 & 3 & 4 & 5 \\            0 & 0 & 2 & 2 \\            0 & 0 & -1 & -1         \end{pmatrix}        \begin{pmatrix}            x_1 \\            x_2 \\            x_3 \\            x_4        \end{pmatrix} =         \begin{pmatrix}            0 \\            0 \\            0 \\            0        \end{pmatrix}

Упростим систему воспользовавшись эквивалентными преобразованиями матриц:

\begin{pmatrix}            -2 & -6 & -9 & -11 \\            1 & 3 & 4 & 5 \\            0 & 0 & 2 & 2 \\            0 & 0 & -1 & -1         \end{pmatrix}        \rightarrow        \begin{pmatrix}            -2 & -6 & -9 & -11 \\            1 & 3 & 4 & 5 \\            0 & 0 & 1 & 1 \\            0 & 0 & 0 & 0         \end{pmatrix}        \rightarrow \\ \rightarrow          \begin{pmatrix}             0 & 0 & -1 & -1 \\             1 & 3 & 4 & 5 \\             0 & 0 & 1 & 1 \\             0 & 0 & 0 & 0          \end{pmatrix}         \rightarrow \begin{pmatrix}             1 & 3 & 4 & 5 \\             0 & 0 & 1 & 1 \\             0 & 0 & 0 & 0 \\             0 & 0 & 0 & 0          \end{pmatrix}  \rightarrow \\ \rightarrow         \begin{pmatrix}             1 & 3 & 0 & 1 \\             0 & 0 & 1 & 1 \\             0 & 0 & 0 & 0 \\             0 & 0 & 0 & 0          \end{pmatrix}

Осталось найти решения такой системы:

\begin{pmatrix}            1 & 3 & 0 & 1 \\            0 & 0 & 1 & 1 \\            0 & 0 & 0 & 0 \\            0 & 0 & 0 & 0         \end{pmatrix}         \begin{pmatrix}            x_1 \\            x_2 \\            x_3 \\            x_4        \end{pmatrix} =         \begin{pmatrix}            0 \\            0 \\            0 \\            0        \end{pmatrix}

Ранг матрицы равен 2, поэтому нам нужно найти 2 линейно-независимых вектора, которые и будут составлять базис корневого подпространства.

Возьмем 2 любых линейно-независимых вектора:

v_1 = \begin{pmatrix}            1 \\            0 \\            1\\            -1        \end{pmatrix}        ;~~        v_2 = \begin{pmatrix}            0 \\            1 \\            3 \\            -3        \end{pmatrix}

Домножим каждый из них на (A - \lambda_2 E). Если среди них есть вектор высоты 2, то он должен перейти в вектор высоты 1, а другой должен перейти в 0.

\begin{pmatrix}            1 & 3 & 0 & 1 \\            0 & 0 & 1 & 1 \\            0 & 0 & 0 & 0 \\            0 & 0 & 0 & 0         \end{pmatrix}         \begin{pmatrix}            1 \\            0 \\            1\\            -1        \end{pmatrix} =         \begin{pmatrix}            0 \\            0 \\            0 \\            0        \end{pmatrix}\begin{pmatrix}            1 & 3 & 0 & 1 \\            0 & 0 & 1 & 1 \\            0 & 0 & 0 & 0 \\            0 & 0 & 0 & 0         \end{pmatrix}         \begin{pmatrix}            0 \\            1 \\            3 \\            -3        \end{pmatrix} =         \begin{pmatrix}            0 \\            0 \\            0 \\            0        \end{pmatrix}

Следовательно оба вектора высоты 1. Поэтому жорданова форма сужения A на подпространство V_{\lambda_2} будет состоять из двух клеток порядка 1.

Теперь можно спокойно привести матрицу к ЖНФ

Мы знаем, что матрица состоит из 3 жордановых клеток: J_2(3), J_1(2) и J_1(2)

Давайте проверим, что базисы корневых подпространств могут быть разными:

Можно вспомнить, что для V_{\lambda_1} мы нашли 2 различных корневых вектора высоты 2: v_2 и v_1. Давайте приведем матрицу к двум различным жордановым базисам, но к одной форме(матрицы выглядят одинаково, а базисы разные).

Запишем матрицу A в двух базисам и проверим, что эти матрицы действительно являются Жордановыми нормальными формами матрицы A.

Первый базис:

\begin{pmatrix}            1 \\            -1 \\            2 \\            -1        \end{pmatrix};        \begin{pmatrix}            -2 \\            1 \\            0 \\            0        \end{pmatrix};         \begin{pmatrix}            0 \\            1 \\            3 \\            -3        \end{pmatrix};        \begin{pmatrix}            1 \\            0 \\            1\\            -1        \end{pmatrix}

Как мы знаем, порядок корневых векторов важен: если вектор высоты 2 переходит в вектор высоты 1, то вектор высоты 2 должен идти сразу после вектора высоты 1. Порядок векторов принадлежащих различным циклическим подпространствам не важен(мы можем менять жордановы клетки местами).

A = \begin{pmatrix}                -2 & 1& 0 & 1 \\                1 & -1 & 1 & 0 \\                0 & 2 & 3 & 1 \\                0 & -1 & -3 & -1            \end{pmatrix}            \cdot             \begin{pmatrix}                3 & 1& 0 & 0 \\                0 & 3 & 0 & 0 \\                0 & 0 & 2 & 0 \\                0 & 0 & 0 & 2            \end{pmatrix}            \cdot            \begin{pmatrix}                -2 & 1& 0 & 1 \\                1 & -1 & 1 & 0 \\                0 & 2 & 3 & 1 \\                0 & -1 & -3 & -1            \end{pmatrix}^{-1}

Проверим это кодом. Заметим, что если A = CJC^{-1}, то AC = CJ. Будем проверять последнее выражение, так как в первом нужно считать обратную матрицу, при вычислении которой появляется погрешность из-за вычислений с плавающей запятой.

Код:

import numpy as np
A = np.matrix([[0, -6, -7, -9], [1, 5, 3, 4], [0, 0, 4, 2], [0, 0, -1, 1]])
J = np.matrix([[3, 1, 0, 0], [0, 3, 0, 0], [0, 0, 2, 0], [0, 0, 0, 2]])
base_vectors = np.matrix([[-2, 1, 0, 0], [1, -1, 2, -1], [0, 1, 3, -3], [1, 0, 1, -1]])

print(A * base_vectors.T)
print(base_vectors.T * J)
print(base_vectors.T * J == A * base_vectors.T)

Вывод:

[[-6  1  0  2]
 [ 3 -2  2  0]
 [ 0  6  6  2]
 [ 0 -3 -6 -2]]
[[-6  1  0  2]
 [ 3 -2  2  0]
 [ 0  6  6  2]
 [ 0 -3 -6 -2]]
[[ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]]

Второй базис:

\begin{pmatrix}            1 \\            0 \\            -2 \\            1        \end{pmatrix} ;        \begin{pmatrix}            2 \\            -1 \\            0 \\            0        \end{pmatrix};         \begin{pmatrix}            0 \\            1 \\            3 \\            -3        \end{pmatrix};        \begin{pmatrix}            1 \\            0 \\            1\\            -1        \end{pmatrix}

Упорядочив вектора мы получаем:

A = \begin{pmatrix}                2 & 1& 0 & 1 \\                -1 & 0 & 1 & 0 \\                0 & -2 & 3 & 1 \\                0 & 1 & -3 & -1            \end{pmatrix}            \cdot             \begin{pmatrix}                3 & 1& 0 & 0 \\                0 & 3 & 0 & 0 \\                0 & 0 & 2 & 0 \\                0 & 0 & 0 & 2            \end{pmatrix}            \cdot            \begin{pmatrix}                2 & 1& 0 & 1 \\                -1 & 0 & 1 & 0 \\                0 & -2 & 3 & 1 \\                0 & 1 & -3 & -1            \end{pmatrix}^{-1}

Код:

import numpy as np
A = np.matrix([[0, -6, -7, -9], [1, 5, 3, 4], [0, 0, 4, 2], [0, 0, -1, 1]])
J = np.matrix([[3, 1, 0, 0], [0, 3, 0, 0], [0, 0, 2, 0], [0, 0, 0, 2]])
base_vectors = np.matrix([[2, -1, 0, 0], [1, 0, -2, 1], [0, 1, 3, -3], [1, 0, 1, -1]])

print(A * base_vectors.T)
print(base_vectors.T * J)
print(base_vectors.T * J == A * base_vectors.T)

Вывод:

[[ 6  5  0  2]
 [-3 -1  2  0]
 [ 0 -6  6  2]
 [ 0  3 -6 -2]]
[[ 6  5  0  2]
 [-3 -1  2  0]
 [ 0 -6  6  2]
 [ 0  3 -6 -2]]
[[ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]]

Дополнительная литература

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

  • В. В. Прасолов - Задачи и теоремы линейной алгебры. (Интересные задачи с решениями. В доказательствах иногда опускаются некоторые ''очевидные'' вещи. Есть много всего интересного, но сложного для неподготовленного читателя. Рассматриваются другие нормальные формы)

  • А. А. Гайфуллин, А. В. Пенской, С. В. Смирнов - Задачи по линейной алгебре и геометрии
    (Тут рассматривается ЖНФ с более прикладной точки зрения. Содержит разборы типовых задач.)

  • В. М. Мануйлов - Линейная алгебра и геометрия(Конспект лекций Мехмата МГУ)
    (Наиболее понятное объяснение ЖНФ из выше перечисленных, по моему мнению. Также можно посмотреть видеозаписи лекций на teach-in.ru