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

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

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

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

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

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


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

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

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

\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)}) = v^{(e - 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

Комментарии (11)


  1. mikko_kukkanen
    21.08.2023 23:39

    Есть ли какой-нибудь пример реальной задачи, в которой может пригодиться Жорданова форма?


    1. RodNik101 Автор
      21.08.2023 23:39

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

      Но я не могу сказать, что я эксперт по численным методам, поэтому если я не прав, и применения есть, то я буду очень рад об этом узнать))


      1. mikko_kukkanen
        21.08.2023 23:39
        +3

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

        У Вас в статье есть "косяки" типа

        линейного оператора \mathcal{A}, отвечающим числу \lambda \in \mathbb{K}, если (\mathcal{A} - \lambda \cdot id)^p(v) = 0

        Непонятно, что такое id. Похоже, единичная матрица? Обозначение неожиданно образовалось.


        1. RodNik101 Автор
          21.08.2023 23:39
          -1

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


          1. mikko_kukkanen
            21.08.2023 23:39
            +1

            Просто этот символ заранее не описан, просто неожиданно возникает. И к чему здесь операторы? Можно остаться в рамках матриц и не усложнять.


            1. RodNik101 Автор
              21.08.2023 23:39
              +3

              Я добавил определение, спасибо, что указали. Надеюсь кому-то от этого станет понятнее)

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

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

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


        1. RodNik101 Автор
          21.08.2023 23:39

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


          1. RodNik101 Автор
            21.08.2023 23:39

            Но если смотреть с точки зрения программирования, то ЖНФ и правда не очень полезная вещь. Поэтому я и поставил только "Математика" в хабах.


          1. mikko_kukkanen
            21.08.2023 23:39
            +1

            Это, конечно, правильно. Возможно, время наступит.


        1. akakoychenko
          21.08.2023 23:39
          +2

          В мою бытность жорданова форма была ещё как полезна) Как-то раз было объявлено негласное правило, что, если на экзамене запахло перездачей, согласно ответам на вопросы билета, то можно было попросить матрицу на жорданизацию, и, в случае успеха, получить 3. Много двоечников тогда спаслись...


      1. MasterMentor
        21.08.2023 23:39
        +1

        ЖНФ - лишь инструмент, как и другие инструменты. Для решения одних задач на компьютере нужна, для других - нет:

        Наша цель построить такой базис в V, в котором матрица оператора T имеет максимально простой вид. Это полезно для решения разностных и дифференциальных уравнений.

        Валентина Кириченко
        http://me.hse.ru/wp-content/uploads/sites/13/2019/02/AG_JordanForm.pdf

        PS Рекомендую заглянуть в материал по ссылке, там тоже коротенькие и простые объяснения по теме ЖНФ.