Все курсы > Линейная алгебра > Занятие 6 (часть 1)
Сегодня мы еще раз рассмотрим полученные ранее знания о векторных пространствах, линейных преобразованиях, системе линейных уравнений и определителе матрицы в контексте новых понятий ранга и четырех фундаментальных подпространств матрицы, а именно пространства столбцов, пространства строк, ядра и коядра матрицы.
Продолжим работать в том же ноутбуке⧉
Ранг матрицы
При нулевом определителе в трехмерном пространстве матрица может «схлопнуть» пространство до плоскости, линии или точки (во всех трех случаях определитель равен нулю).
Ранее мы сказали, что для того чтобы в системе уравнений, например, трехмерная матрица $A$ при нулевом определителе все же имела решение, вектор $\mathbf b$, на который матрица $A$ переводит вектор $\mathbf x$, должен лежать на плоскости или линии, в которые «схлопывается» трехмерное пространство.
Размерность пространства после трансформации принято описывать рангом матрицы (rank).
Если преобразование трехмерной матрицы «сворачивает» размерность до линии, то ранг такого преобразования равен единице, до плоскости — двум и т.д. В случае матрицы $2 \times 2$ самый высокий ранг матрицы — два. Это значит, что при преобразовании размерность сохранилась (и соответственно определитель не равен нулю).
Пространство столбцов
Пространством столбцов (column space, а также образом, image) называют множество всех возможных линейных комбинаций вектор-столбцов.
С точки зрения линейных преобразований, пространством столбцов называют векторы, которые определяют пространство после трансформации.
В случае линейно зависимых векторов таких векторов будет меньше, чем в исходной матрице. Приведем пример линейно зависимых векторов и рассчитаем ранг матрицы.
1 2 3 4 5 |
M = np.array([[1, 0, 1], [2, 3, 4], [-1, -3, -3]]) np.linalg.matrix_rank(M) |
1 |
2 |
Приведем матрицу к упрощенному ступенчатому виду (reduced row-echelon form) с помощью Питона. Для этого воспользуемся методом .rref() библиотеки sympy.
1 2 3 4 5 6 7 8 |
from sympy import * M = Matrix([[1, 0, 1], [2, 3, 4], [-1, -3, -3]]) M_rref = M.rref() M_rref[0] |

Как мы видим, с одной стороны, пространство сократилось до двух измерений (поэтому ранг матрицы равен двум), с другой, двумерное пространство можно описать первыми двумя столбцами (их еще называют разрещающими, ведущими или базисными, pivot columns), где все элементы кроме одного равны нулю.
Разрешающие столбцы и образуют пространство столбцов. Найдем пространство столбцов с помощью Питона.
1 2 3 4 |
# вторым элементом метод .rref() выводит # индексы разрешающих столбцов (pivot columns), # используем их для нахождения пространства столбцов M.col(M.rref()[1]) |

1 2 3 4 |
# то же самое можно найти с помощью # метода .columnspace() M_columnspace = M.columnspace() M_columnspace[0] |

1 |
M_columnspace[1] |

Откуда такое название? Столбцы матрицы говорят куда «приземлятся» координаты базисных векторов. В этом смысле, оболочка вектор-столбцов то же самое, что и пространство столбцов.
В матрице $2 \times 2$ первый столбец показывает, где окажется вектор $\mathbf i$, второй — вектор $\mathbf j$. И оболочка этих столбцов определит пространство столбцов. Если, например, в матрице $2 \times 2$ столбцы линейно независимы и преобразование не приводит к снижению размерности, то пространство столбцов задается этими двумя векторами.
Замечу, что столбцы, не являющиеся разрешающими, называются свободными (free).
Ядро матрицы
Если преобразование уменьшает размерность (например, преобразовывает плоскость в линию), то несколько векторов оказываются в начале координат (становятся нулевыми векторами). Видео ниже прекрасно иллюстрирует эту трансформацию.
Множество таких «исчезающих» векторов называется ядром матрицы или ее нуль-пространством (null space, kernel).
1 |
M.nullspace()[0] |

Видео про обратные матрицы, ранг и ядро⧉.
Система уравнений
$Ax = b$
Рассмотрим пространство столбцов и ядро с точки зрения системы линейных уравнений. В первую очередь представим пространство столбцов, как решение системы $ A \mathbf x = \mathbf b $, т.е. линейную комбинацию вектор-столбцов $A$, умноженных на компоненты $\mathbf x$.
$$ x_1 \begin{bmatrix} \vdots \\ \mathbf a_1 \\ \vdots \end{bmatrix} + x_2 \begin{bmatrix} \vdots \\ \mathbf a_2 \\ \vdots \end{bmatrix} + x_3 \begin{bmatrix} \vdots \\ \mathbf a_3 \\ \vdots \end{bmatrix} = \begin{bmatrix} \vdots \\ \mathbf b \\ \vdots \end{bmatrix} $$
Всегда ли $A \mathbf x = \mathbf b$ будет иметь решение? Нет. Возьмем некоторую матрицу $A$ и соответствующие ей векторы $\mathbf x$ и $\mathbf b$.
$$ \begin{bmatrix} 1 & 1 & 2 \\ 2 & 1 & 3 \\ 3 & 1 & 4 \\ 4 & 1 & 5 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix} b_1 \\ b_2 \\ b_3 \\ b_4 \end{bmatrix} $$
В такой системе будет много векторов $\mathbf b$, которые не будут являться линейной комбинацией трех столбцов матрицы A.

В каком случае такое решение все-таки будет существовать? Если $\mathbf b$ будет являться линейной комбинацией векторов $A$, т.е. будет находиться в пространстве столбцов $A$, $\mathbf b \in col(A) $.

Например, если $\mathbf b$ будет равен одному из столбцов $A$.
$$ \begin{bmatrix} 1 & 1 & 2 \\ 2 & 1 & 3 \\ 3 & 1 & 4 \\ 4 & 1 & 5 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix} 1 \\ 2 \\ 3 \\ 4 \end{bmatrix} $$
Тогда решением может быть
$$ \mathbf x = \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix} $$
Что интересно, все возможные решения $\mathbf x$ именно такой системы $A \mathbf x = \mathbf b$, где $\mathbf b \in col(A) $ сами по себе не образуют векторное пространство (хотя бы потому что нулевой вектор не включен в эти решения).
Дополнительно замечу, что так как в матрице $A$ только два линейно независимых вектора (третий вектор является суммой первых двух), то в данном случае мы имеем двумерное подпространство $R^4$.
$Ax = 0$
В системе линейных уравнений $A \mathbf x = \mathbf b$, если $\mathbf b$ — нулевой вектор, т.е. $A \mathbf x = \mathbf 0$, то ядро дает все возможные решения этой системы (все возможные $\mathbf x$). Можно также сказать, что ядро $\mathbf x $ представляет собой комбинацию вектор-столбцов $A$, обращающихся в ноль.
$$ x_1 \begin{bmatrix} \vdots \\ \mathbf a_1 \\ \vdots \end{bmatrix} + x_2 \begin{bmatrix} \vdots \\ \mathbf a_2 \\ \vdots \end{bmatrix} + x_3 \begin{bmatrix} \vdots \\ \mathbf a_3 \\ \vdots \end{bmatrix} = \begin{bmatrix} \vdots \\ \mathbf 0 \\ \vdots \end{bmatrix} $$
В примере выше обратите внимание, что $col(A) \in R^4$, в то время как $null(A) \in R^3$. Решением же этой системы при нулевом векторе $\mathbf b$, $A \mathbf x = \mathbf 0$ будет
$$ null(A) = k \begin{bmatrix} 1 \\ 1 \\ -1 \end{bmatrix} $$
где $k \in \mathbb{R} $. Другими словами, $null(A)$ представляет собой линию в $R^3$.
Убедимся, что для матрицы $M$ выше мы правильно нашли ядро (а также решение $M \mathbf x = 0$).
1 2 3 4 5 6 7 |
M = np.array([[1, 0, 1], [2, 3, 4], [-1, -3, -3]]) Null = np.array([-1, -2/3, 1]) M @ Null |
1 |
array([0., 0., 0.]) |
Общее и частное решение
Приведем общее решение (complete solution) следующей системы, состоящее из частного решения (particular solution) системы $A \mathbf x = \mathbf b$ и ядра, то есть решения $A \mathbf x = \mathbf 0$.
$$ \begin{bmatrix} 1 & 1 & 2 \\ 2 & 1 & 3 \\ 3 & 1 & 4 \\ 4 & 1 & 5 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix} 1 \\ 2 \\ 3 \\ 4 \end{bmatrix} $$
$$ \mathbf x = \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix} + k \begin{bmatrix} 1 \\ 1 \\ -1 \end{bmatrix} $$
Независимость векторов, базис и размерность
В свете новых знаний еще раз рассмотрим линейную независимость векторов и базис векторного пространства. Возьмем некоторую матрицу $A$.
Независимые вектор-столбцы
Можно сказать, что вектор-столбцы, образующие матрицу $A$ независимы, если ядро матрицы состоит только из нулевого вектора, $null(A) = \{ \mathbf 0 \}$ (решением $A \mathbf x = \mathbf 0$ будет только нулевой вектор $\mathbf x$). Одновременно все столбцы такой матрицы являются разрешающими, и матрица имеет полный ранг, равный количеству столбцов $n$, $rank(A) = n$.
Если матрица $А$ квадратная и ее столбцы линейно независимы, то можно сказать, что
- Вектор-столбцы матрицы образуют базис $R^n$
- Такая матрица будет обратима (!)
Приведем примеры обратимых матриц, столбцы которых формируют базис.
$$ \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}, \begin{bmatrix} 1 & 2 & 3 \\ 1 & 2 & 1 \\ 2 & 5 & 8 \end{bmatrix} $$
1 2 3 4 5 |
A = np.array([[1, 2, 3], [1, 2, 1], [2, 5, 8]]) np.linalg.matrix_rank(A) |
1 |
3 |
1 |
np.linalg.inv(A) |
1 2 3 |
array([[ 5.5, -0.5, -2. ], [-3. , 1. , 1. ], [ 0.5, -0.5, 0. ]]) |
Зависимые вектор-столбцы
Если же столбцы зависимы, то ядро матрицы содержит также ненулевые векторы и решением $A \mathbf x = \mathbf 0$ будет или будут некоторые ненулевые векторы $\mathbf x$. Столбцы матрицы будут как разрешающими, так и свободными. Ранг матрицы будет равен количеству разрещающих столбцов.
Базис пространства будет определяться именно линейно независимыми векторами, входящими в пространство столбцов. Размерностью (dimension) векторного пространства будет как раз количество векторов базиса.
Например, возьмем следующую матрицу $A$.
$$ A = \begin{bmatrix} 1 & 2 & 3 & 1 \\ 1 & 1 & 2 & 1 \\ 1 & 2 & 3 & 1 \end{bmatrix} $$
В данном случае у матрицы два линейно независимых столбца. В частности, это
$$ col(A) = \left\{ \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix}, \begin{bmatrix} 2 \\ 1 \\ 2 \end{bmatrix} \right\} $$
Как следствие,
$$ dim(col(A)) = rank(A) = dim(basis) = \text{# of pivots} = 2 $$
Одновременно, нулевое пространство задано векторами
$$ null(A) = \left\{ \begin{bmatrix} -1 \\ -1 \\ 1 \\ 0 \end{bmatrix}, \begin{bmatrix} -1 \\ 0 \\ 0 \\ 1 \end{bmatrix} \right\} $$
Как следствие,
$$ dim(null(A)) = \text{# of free columns} = 2 $$
Код на Питоне для нахождения пространства столбцов и ядра приведен в ноутбуке к занятию⧉.
В качестве дополнения, замечу, что размерность векторного пространства характеризуется следом (trace) единичной матрицы этого пространства или суммой элементов главной диагонали. Например, размерность $R^3$ можно охарактеризовать через
$$ dim(col(A)) = tr \left( \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \right) = 3 $$
Пространство строк и коядро
Пространством строк (row space) называют множество всех возможных линейных комбинаций вектор-строк.
Если матрицу транспонировать, то можно сказать, что
$$ row(A) = col(A^T) $$
Коядром или левым нуль-пространством (left null-space, cokernel) матрицы $A$ будет ядро матрицы $A^T$.
$$ leftnull(A) = null(A^T) $$
Продемонстрируем, почему это пространством называется именно левым нуль-пространством. По определению ядра, как решения $A \mathbf x = \mathbf 0$, можно сказать, что коядро будет решением $A^T \mathbf y = \mathbf 0$.
$$ A^T \mathbf y = \mathbf 0 $$
$$ \mathbf y^T(A^T)^T = \mathbf 0^T $$
$$ \mathbf y^T A = \mathbf 0^T $$
Схематично это можно представить следующим образом.

Можно также сказать, что коядро $ \mathbf y $ в системе $ A^T \mathbf y = \mathbf 0 $ дает все возможные комбинации столбцов $A^T$, обращающиеся в нулевой вектор (что то же самое, что линейные комбинации строк $\mathbf x^T A = 0$). Приведем пример. Найдем коядро матрицы $A$.
1 2 3 4 5 |
A = Matrix([[1, 2, 3, 1], [1, 1, 2, 1], [1, 2, 3, 1]]) A.T.nullspace()[0] |

Другими словами, нам нужно взять $-1R_1 + 0R_2 + 1R_3$, чтобы получить нулевой вектор. Проверим полученный результат.
1 2 3 4 5 6 7 |
A = np.array([[1, 2, 3, 1], [1, 1, 2, 1], [1, 2, 3, 1]]) Leftnull = np.array([-1, 0, 1]) Leftnull.T @ A |
1 |
array([0, 0, 0, 0]) |
1 |
A.T @ Leftnull |
1 |
array([0, 0, 0, 0]) |
Фундаментальные подпространства матрицы
Обобщим изложенную выше информацию. Возьмем матрицу $A$ размерностью $m \times n$. Тогда
- $ null(A) \in R^n$ (так как должно быть решением $A \mathbf x = \mathbf 0$)
- $ col(A) \in R^m $ (количество строк $A$)
- $ row(A) = col(A^T) \in R^n $ (количество столбцов $A$)
- $ leftnull(A) = null(A^T) \in R^m $ (так как должно быть решением $A^T \mathbf y = \mathbf 0$)
Тогда схематично эти подпространства можно представить следующим образом.

Несколько пояснений и дополнений:
- $r$ означает ранг (rank) матрицы
- $r+(n-r) = n$, т.е. столбцы матрицы $A$
- $r+(m-r) = m$, т.е. строки матрицы $A$ или столбцы $A^T$
Про пересечение подпространств. Может ли вектор $\mathbf v = \begin{bmatrix} 1 \\ 2 \end{bmatrix}$ быть одновременно в нуль-пространстве и являться частью пространства строк A (или в целом строкой в A)? Нет.
$$ \begin{bmatrix} 1 & 2 \\ \dots & \dots \end{bmatrix} \begin{bmatrix} 1 \\ 2 \end{bmatrix} \not= \begin{bmatrix} 0 \\ 0 \end{bmatrix} $$
Пересечением пространства строк и нуль-пространства будет только нулевой вектор.
$$ row(A) \cap null(A) = \{ \mathbf 0 \} $$
Ортогональность подпространств матрицы
Более того, ядро ортогонально пространству строк $row(A) \perp null(A)$, так как их скалярное произведение равно нулю. Это следует из определения ядра $A \mathbf x = \mathbf 0$ (произведение $\mathbf x$ на каждую вектор-строку $\mathbf a_m$ равно нулю).
$$ \begin{bmatrix} \dots & \mathbf a_1 & \dots \\ \dots & \mathbf a_2 & \dots \\ \dots & \dots & \dots \\ \dots & \mathbf a_m & \dots \end{bmatrix} \begin{bmatrix} \vdots \\ \mathbf x \\ \vdots \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \\ 0 \\ 0 \end{bmatrix} $$
Более того, так как $null(A)$ содержит все векторы, ортогональные $row(A)$, то ядро можно считать ортогональным дополнением пространства строк в $R^n$: $null(A) = row(A)^{\perp} $.
То же самое справедливо для пространства столбцов и коядра.
$$ col(A) \perp leftnull(A) \perp null(A^T) \text{ в } R^m $$
$$ leftnull(A), null(A^T) = col(A)^{\perp} $$
Количество решений системы уравнений
Систематизируем наши знания о подпространствах матрицы с точки зрения возможного количества решений системы уравнений.
Система не имеет решений
В случае если система не имеет решений, существует некоторый вектор $\mathbf b $, при котором $A \mathbf x = \mathbf b $ не будет иметь решения.
$$ \exists \mathbf b \implies A \mathbf x \not= \mathbf b $$
С точки зрения матрицы $\underset{m \times n}{A}$, можно говорить о том, что некоторые строки линейно зависимы и после преобразования методом Гаусса обратятся в нули. Как следствие, ранг матрицы меньше количества строк, $r < m$.

Система имеет единственное решение
Если мы знаем, что система имеет единственное решение, то это означает, что нуль-пространство матрицы $A$ содержит только нулевой вектор, $null(A) = \{ \mathbf 0 \}$ и все столбцы линейно независимы, $ r = n $.

Система имеет множество решений
В этом случае решение состоит из частного решения и решения системы $A \mathbf x \not= \mathbf 0 $. Другими словами, это означает, что нуль-пространство содержит не только нулевой вектор, а значит столбцы матрицы линейно зависимы и $ r < n $.

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