Системы линейных уравнений 🧩
Почти любая задача, где несколько неизвестных величин связаны друг с другом несколькими условиями, в конце концов превращается в систему линейных уравнений. Инженер считает токи в электрической схеме — система. Химик расставляет коэффициенты в уравнении реакции — система. Логист распределяет потоки грузов по маршрутам — система. Твой навигатор вычисляет координаты по сигналам спутников — снова система. И линейная регрессия, самая базовая модель машинного обучения, — это тоже система уравнений $Xw = y$, просто очень большая и, как ты скоро увидишь, почти всегда без точного решения.
За предыдущие семь уроков ты собрал весь инструментарий: научился складывать и перемножать матрицы, считать определители, находить обратную матрицу, приводить матрицу к ступенчатому виду и определять ранг. Всё это время инструменты лежали на столе почти без применения — теперь настало время взять их в руки. Ранг из прошлого урока окажется не абстрактной характеристикой таблицы чисел, а прибором, который за одно измерение отвечает на главный вопрос: у этой системы решений нет, ровно одно или бесконечно много?
Обрати внимание на формулировку. Мы сейчас не будем учиться решать системы — это тема следующего урока, где ты разберёшь метод Гаусса как полноценный алгоритм. Сегодня задача другая и в каком-то смысле более важная: научиться понимать, что за объект перед тобой. Потому что человек, который умеет крутить алгоритм, но не понимает, почему у одной системы решение единственное, у другой их бесконечно много, а третья вообще противоречива, обречён спотыкаться на каждой нестандартной задаче. Он не различит ситуацию «я ошибся в вычислениях» и ситуацию «система действительно несовместна, и это правильный ответ».
Здесь есть довольно неожиданный поворот, к которому школьный опыт не готовит. В школе система уравнений — это задача, у которой есть ответ, и найти его надо обязательно. В реальных данных всё наоборот: система, составленная по измерениям, почти никогда не имеет точного решения, и это не аварийная ситуация, а норма. Уравнений больше, чем неизвестных, измерения содержат шум, и точка, которая удовлетворяла бы всем условиям сразу, просто не существует. Правильная реакция на это — не «что-то сломалось», а «давайте найдём набор чисел, который нарушает условия как можно меньше». Именно так работает метод наименьших квадратов, и именно так работает обучение линейных моделей.
Есть и зеркальная ситуация, тоже совершенно обыденная: неизвестных больше, чем уравнений, и решений оказывается бесконечно много. Это тоже не поломка. Это честный ответ «данных недостаточно, чтобы выделить единственный вариант» — и умение записать всё множество решений компактно, через параметры, куда полезнее, чем умение отыскать одну случайную точку из этого множества.
Разберёмся по порядку: что такое система, как её записать в матричной форме, какие бывают типы систем, что говорит про их геометрию картинка с прямыми и плоскостями и как теорема Кронекера — Капелли одним сравнением двух рангов закрывает вопрос о числе решений раз и навсегда.
🎯 Ты узнаешь:
-
как устроена система $m$ линейных уравнений с $n$ неизвестными и что вообще считается её решением;
-
как свернуть систему в матричное уравнение $Ax = b$ и зачем нужна расширенная матрица $[A \mid b]$;
-
чем совместная система отличается от несовместной, а определённая от неопределённой — все четыре случая с примерами;
-
что видно на картинке: как пересекаются две прямые на плоскости и какие восемь конфигураций образуют три плоскости в пространстве;
-
теорему Кронекера — Капелли: формулировку, объяснение «на пальцах», почему она работает, и полное следствие про количество решений;
-
как выбирают базисные и свободные переменные, что такое общее и частное решение и как записать бесконечное множество решений одной формулой с параметрами;
-
почему элементарные преобразования строк расширенной матрицы не портят систему, и что значит «эквивалентные системы»;
-
где всё это всплывает в машинном обучении: недоопределённые и переопределённые системы, ранг матрицы признаков,
numpy.linalg.solveпротивlstsq, GPS и балансировка химических реакций.
История: откуда это взялось?
Системы линейных уравнений — вероятно, самая старая тема во всей линейной алгебре, и она заметно старше и матриц, и определителей, и самого понятия ранга. В древнекитайском трактате «Цзю чжан суань шу» («Математика в девяти книгах»), сложившемся примерно ко II веку до нашей эры, есть восьмая глава — «Фан-чэн», что можно перевести как «прямоугольные таблицы». В ней коэффициенты системы выписываются в прямоугольную таблицу (то есть буквально в матрицу, за две тысячи лет до того, как это слово было придумано), а затем столбцы этой таблицы вычитаются друг из друга с множителями, пока не останется одно уравнение с одним неизвестным. Это ровно та процедура, которую сегодня называют методом Гаусса. Одна из задач главы — про три сорта зерна с разной урожайностью — приводит к системе трёх уравнений с тремя неизвестными и решается именно так.
В Европе к тем же идеям пришли значительно позже и другим путём — через определители. В 1693 году Готфрид Вильгельм Лейбниц в письме к Гийому Лопиталю описал, как по коэффициентам системы построить выражение, обращение которого в ноль означает особый случай. В 1750 году швейцарский математик Габриэль Крамер опубликовал формулы, которые сегодня носят его имя и позволяют выразить каждое неизвестное через отношение двух определителей (их мы разберём через два урока). Определительный подход был красив, но чудовищно неэффективен для больших систем.
Настоящий прорыв связан с именем Карла Фридриха Гаусса. В 1801 году итальянский астроном Джузеппе Пиацци открыл малую планету Церера, успел провести всего несколько десятков наблюдений и потерял её из виду. Двадцатичетырёхлетний Гаусс взялся вычислить её орбиту по этим обрывочным данным — задача сводилась к переопределённой системе, где уравнений (наблюдений) заметно больше, чем неизвестных (параметров орбиты), и точного решения не существует. Гаусс применил метод наименьших квадратов и систематическую процедуру исключения неизвестных, предсказал, где искать Цереру, — и в конце 1801 года её действительно нашли почти там, где он указал. Метод исключения он подробно описал в работе «Theoria motus corporum coelestium» (1809), и именно оттуда пошло название «метод Гаусса», хотя, как ты уже понял, китайские математики знали эту процедуру за две тысячи лет до него.
Последний кирпич — критерий, который отвечает на вопрос «а есть ли у системы решение вообще, до всяких вычислений». Здесь история особенно любопытная, потому что теорему открывали независимо несколько раз, и в разных странах она называется по-разному. Французский математик Эжен Руше опубликовал соответствующий результат в 1875 году, Жорж Фонтене — почти одновременно с ним, немецкий математик Фердинанд Георг Фробениус получил его в те же годы, а итальянец Альфредо Капелли сформулировал его на языке ранга в 1892 году, опираясь на работы Леопольда Кронекера. Поэтому в русской традиции теорему называют теоремой Кронекера — Капелли, во французской — теоремой Руше — Фонтене, в испанской — теоремой Руше — Фробениуса, а в итальянской — теоремой Руше — Капелли. Это, кстати, редкий случай, когда споры о приоритете не мешают: сама формулировка настолько естественна, что кажется странным, как её не записали раньше.
Постановка: что такое система линейных уравнений
Интуиция: система как набор ограничений
Полезнее всего думать о системе не как о «задаче, где надо найти икс», а как о наборе ограничений на неизвестные величины. Каждое уравнение — это одно требование, которому обязан удовлетворять ответ. Одно требование обычно оставляет много свободы, два сужают выбор сильнее, три — ещё сильнее. Вопрос «сколько решений у системы» — это вопрос «сколько свободы осталось после того, как мы наложили все ограничения».
Отсюда сразу видны три качественно разных исхода. Свободы могло остаться ровно ноль — тогда решение единственное. Свободы могло остаться сколько-то — тогда решений бесконечно много, и они образуют не хаотичное облако, а правильную геометрическую фигуру: прямую, плоскость или её многомерный аналог. А могло случиться и так, что требования противоречат друг другу — тогда решений нет вовсе, и никакой сколь угодно хитрый алгоритм их не найдёт, потому что находить нечего.
Ключевое слово в названии темы — линейных. Каждое неизвестное входит в уравнение только в первой степени, умноженным на число, и ничего более экзотического не допускается: ни $x^2$, ни $xy$, ни $\sin x$, ни $\sqrt{x}$. Именно эта скромность и делает теорию исчерпывающе полной. Для линейных систем мы знаем ответ на любой вопрос: сколько решений, как их все описать, как найти. Для нелинейных систем такой универсальной теории нет и, судя по всему, никогда не будет.
Формальное определение
Определение: Системой $m$ линейных уравнений с $n$ неизвестными называется набор уравнений вида
$$\begin{cases} a_{11}x_1 + a_{12}x_2 + \dots + a_{1n}x_n = b_1 \\ a_{21}x_1 + a_{22}x_2 + \dots + a_{2n}x_n = b_2 \\ \dots \\ a_{m1}x_1 + a_{m2}x_2 + \dots + a_{mn}x_n = b_m \end{cases}$$Числа $a_{ij}$ называются коэффициентами системы (первый индекс — номер уравнения, второй — номер неизвестного), числа $b_i$ — свободными членами (или правыми частями), а $x_1, \dots, x_n$ — неизвестными.
Число уравнений $m$ и число неизвестных $n$ между собой никак не связаны: их может быть поровну, уравнений может быть меньше, а может быть и сильно больше. Все три случая встречаются в реальных задачах, и все три ведут себя по-разному — к этому мы вернёмся отдельно.
Определение: Решением системы называется упорядоченный набор чисел $(c_1, c_2, \dots, c_n)$ такой, что при подстановке $x_1 = c_1,\ x_2 = c_2,\ \dots,\ x_n = c_n$ каждое уравнение системы превращается в верное числовое равенство.
Здесь важны два слова. Упорядоченный — потому что набор $(1, 2)$ и набор $(2, 1)$ это разные решения: первое число всегда относится к $x_1$, второе к $x_2$. И каждое — решение обязано удовлетворять всем уравнениям одновременно; набор, который подходит под первые два уравнения из трёх, решением не является, даже если он «почти подошёл».
Множество всех решений системы обозначают одним символом и говорят про него как про единый объект. Задача «решить систему» на самом деле означает «описать множество всех её решений» — и если это множество пусто, то ответ «решений нет» является совершенно полноценным ответом, а не признанием поражения.
Разбор примеров
Пример 1. Проверка набора чисел. Проверим, является ли набор $(2, -1, 3)$ решением системы
$$\begin{cases} x + y + z = 4 \\ 2x - y + z = 8 \\ x + 2y - z = -3 \end{cases}$$Подставляем аккуратно, уравнение за уравнением: $2 + (-1) + 3 = 4$ — верно; $2\cdot 2 - (-1) + 3 = 4 + 1 + 3 = 8$ — верно; $2 + 2\cdot(-1) - 3 = 2 - 2 - 3 = -3$ — верно. Все три равенства выполнены, значит $(2, -1, 3)$ — решение.
Заметь, насколько эта проверка проще, чем само решение системы. Это общее и очень полезное свойство: проверить кандидата всегда дешевле, чем его найти. Поэтому после любого решения системы имеет смысл потратить полминуты и подставить ответ обратно — эта привычка ловит подавляющее большинство арифметических ошибок.
Пример 2. Набор, который решением не является. Тот же вопрос про набор $(1, 1, 2)$ и ту же систему. Первое уравнение: $1 + 1 + 2 = 4$ — верно. Второе: $2\cdot 1 - 1 + 2 = 3 \ne 8$ — неверно. Дальше можно не считать: одного нарушенного уравнения достаточно, чтобы набор перестал быть решением. Он удовлетворяет первому ограничению, но не удовлетворяет второму — а нужны все сразу.
Пример 3. Система, записанная не в каноническом виде. Иногда система приходит в «неубранном» виде, где неизвестные разбросаны по обе стороны от знака равенства:
$$\begin{cases} 3x - 5 = 2y + 1 \\ 4y = 7 - x \end{cases}$$Прежде чем что-либо делать, систему приводят к каноническому виду: все слагаемые с неизвестными налево, все числа направо, порядок неизвестных фиксирован и одинаков во всех уравнениях. Получаем
$$\begin{cases} 3x - 2y = 6 \\ x + 4y = 7 \end{cases}$$Только теперь можно выписывать матрицу коэффициентов: до приведения к каноническому виду её элементы просто не определены однозначно. Это одно из самых частых мест, где теряются знаки, — особенно когда неизвестное переезжает через равенство и меняет знак.
Почему это важно
Аккуратная постановка выглядит формальностью, но именно она задаёт язык, на котором дальше будет говорить весь урок. «Упорядоченный набор из $n$ чисел» — это будущий вектор; «набор ограничений» — это будущая геометрическая картинка; «множество всех решений» — это тот объект, чью структуру мы и будем описывать. Кроме того, привычка проверять кандидата подстановкой — самый дешёвый инструмент самоконтроля из всех, что есть в линейной алгебре, и он останется с тобой до конца курса.
Матричная форма $Ax = b$ и расширенная матрица
Интуиция: система как одно уравнение
Выписывать систему целиком утомительно, и главное — в этой записи много шума. Символы $x_1, x_2, \dots$, плюсы и знаки равенства повторяются из строки в строку и не несут никакой информации: вся информация сидит в коэффициентах и правых частях. Естественное желание — выкинуть шум и оставить только числа. Ровно это и делает матричная запись.
Больше того, после такого выкидывания система из $m$ уравнений превращается в одно уравнение $Ax = b$, которое внешне неотличимо от школьного $ax = b$ с одним неизвестным. Это не косметика: многие рассуждения, которые в развёрнутой записи потребовали бы возни с индексами, в матричной форме занимают одну строчку.
Как это устроено
Введём три объекта. Матрица коэффициентов $A$ размера $m \times n$ — это таблица, где в строке $i$ и столбце $j$ стоит коэффициент $a_{ij}$ при неизвестном $x_j$ в уравнении номер $i$. Вектор неизвестных $x$ — столбец высоты $n$. Вектор правых частей $b$ — столбец высоты $m$:
$$A = \begin{pmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \dots & a_{mn} \end{pmatrix}, \qquad x = \begin{pmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{pmatrix}, \qquad b = \begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ b_m \end{pmatrix}$$Теперь вспомни правило умножения матрицы на столбец из урока про операции над матрицами: элемент номер $i$ произведения $Ax$ получается как сумма произведений элементов $i$-й строки матрицы $A$ на соответствующие элементы столбца $x$. Но это же в точности левая часть $i$-го уравнения! Поэтому вся система разом записывается как
$$Ax = b$$Размеры сходятся: $A$ имеет размер $m \times n$, $x$ — размер $n \times 1$, произведение $Ax$ — размер $m \times 1$, ровно как у $b$. Если размеры не сходятся, значит где-то перепутаны $m$ и $n$.
Вторая матрица, которая понадобится нам буквально в каждом рассуждении дальше, — расширенная.
Определение: Расширенной матрицей системы называется матрица размера $m \times (n+1)$, полученная приписыванием столбца свободных членов справа к матрице коэффициентов. Обозначается $[A \mid b]$ или $\tilde{A}$; вертикальная черта — просто визуальный разделитель, никакого особого математического смысла у неё нет.
Расширенная матрица — это полная запись системы: по ней система восстанавливается однозначно (при условии, что мы договорились о порядке неизвестных). Все дальнейшие манипуляции с системой удобно проводить именно над ней — не переписывая каждый раз буквы и плюсы.
Разбор примеров
Пример 1. Прямой перевод. Запишем в матричной форме систему
$$\begin{cases} 2x + 3y = 8 \\ x - y = 1 \end{cases}$$Матрица коэффициентов, вектор неизвестных и вектор правых частей:
$$A = \begin{pmatrix} 2 & 3 \\ 1 & -1 \end{pmatrix}, \qquad x = \begin{pmatrix} x \\ y \end{pmatrix}, \qquad b = \begin{pmatrix} 8 \\ 1 \end{pmatrix}$$Расширенная матрица:
$$[A \mid b] = \left(\begin{array}{cc|c} 2 & 3 & 8 \\ 1 & -1 & 1 \end{array}\right)$$Кстати, решение этой системы — $x = \dfrac{11}{5},\ y = \dfrac{6}{5}$ (из второго уравнения $x = y + 1$, подставляем в первое: $2y + 2 + 3y = 8$, откуда $5y = 6$). Проверка: $2 \cdot \frac{11}{5} + 3 \cdot \frac{6}{5} = \frac{22 + 18}{5} = 8$ ✓.
Пример 2. Пропущенные неизвестные. Система
$$\begin{cases} x + 2z = 5 \\ 3y - z = 0 \\ x + y + z = 4 \end{cases}$$В первом уравнении нет $y$, во втором нет $x$. Это не значит, что их «нет» — это значит, что коэффициенты при них равны нулю, и нули обязаны попасть в матрицу:
$$A = \begin{pmatrix} 1 & 0 & 2 \\ 0 & 3 & -1 \\ 1 & 1 & 1 \end{pmatrix}, \qquad [A \mid b] = \left(\begin{array}{ccc|c} 1 & 0 & 2 & 5 \\ 0 & 3 & -1 & 0 \\ 1 & 1 & 1 & 4 \end{array}\right)$$Пропуск нулей — вторая по популярности ошибка при переводе системы в матричную форму (первая — потеря знака при переносе через равенство). Матрица обязана быть прямоугольной таблицей полного размера, дырок в ней не бывает.
Пример 3. Обратный перевод. По расширенной матрице
$$\left(\begin{array}{ccc|c} 1 & -1 & 0 & 3 \\ 0 & 2 & 5 & -4 \end{array}\right)$$восстановим систему. Столбцов слева от черты три, значит неизвестных три — назовём их $x_1, x_2, x_3$. Строк две, значит уравнений два:
$$\begin{cases} x_1 - x_2 = 3 \\ 2x_2 + 5x_3 = -4 \end{cases}$$Обрати внимание: два уравнения, три неизвестных. Такая система (если она совместна) обязательно имеет бесконечно много решений — почему именно так, станет понятно после теоремы Кронекера — Капелли.
Почему это важно
Матричная форма — это не просто сокращённая запись. Во-первых, именно в таком виде системы живут в коде: numpy.linalg.solve(A, b) принимает ровно матрицу и вектор, а не текст с плюсами. Во-вторых, форма $Ax = b$ позволяет думать о матрице $A$ как о преобразовании, которое берёт вектор $x$ и превращает его в вектор $b$; решить систему — значит найти прообраз. В-третьих — и это главное для сегодняшнего урока — вся информация о числе решений будет извлечена именно из сравнения двух матриц, $A$ и $[A \mid b]$, а не из возни с уравнениями.
Классификация систем: совместность и определённость
Интуиция: два независимых вопроса
Про любую систему разумно задать два вопроса подряд, причём именно в таком порядке.
Первый: есть ли у неё хотя бы одно решение? Если да — систему называют совместной, если нет — несовместной. Это вопрос про существование, и он главный: пока на него нет ответа, обсуждать что-либо ещё бессмысленно.
Второй вопрос имеет смысл только при положительном ответе на первый: единственное ли это решение? Если решение ровно одно — система определённая, если решений больше одного — неопределённая. И тут прячется факт, который сначала выглядит странно: у линейной системы не может быть, скажем, ровно двух решений, или ровно семнадцати. Либо ни одного, либо ровно одно, либо сразу бесконечно много. Промежуточных вариантов не бывает.
Почему так? Пусть у системы есть два разных решения, $u$ и $v$. Возьмём любое число $t$ и рассмотрим набор $w = u + t(v - u)$ — точку, которая при $t = 0$ совпадает с $u$, при $t = 1$ совпадает с $v$, а при остальных $t$ лежит где-то на прямой, проходящей через них. Подставим $w$ в систему, пользуясь тем, что умножение матрицы на столбец распределяется по сложению:
$$Aw = A\big(u + t(v-u)\big) = Au + t(Av - Au) = b + t(b - b) = b$$Получается, что $w$ — решение при любом $t$. То есть как только нашлись два разных решения, немедленно нашлась целая прямая решений, а значит их бесконечно много. Вот и вся причина, по которой «ровно два решения» у линейной системы невозможны.
Четыре случая
Скрестив два вопроса, получаем классификацию, которую стоит запомнить целиком:
-
несовместная система — решений нет;
-
совместная определённая — решение существует и единственно;
-
совместная неопределённая — решений бесконечно много;
-
(а «совместная, но с конечным числом решений больше одного» — невозможный случай, о котором мы только что рассуждали).
Разберём все три реальных случая на минимальных примерах с двумя неизвестными.
Случай 1: совместная определённая.
$$\begin{cases} x + 2y = 5 \\ 3x - y = 1 \end{cases}$$Из второго уравнения $y = 3x - 1$, подставляем в первое: $x + 6x - 2 = 5$, откуда $x = 1$, $y = 2$. Единственное решение $(1, 2)$. Матрица коэффициентов $\begin{pmatrix} 1 & 2 \\ 3 & -1 \end{pmatrix}$ имеет определитель $-1 - 6 = -7 \ne 0$, то есть ранг 2 — полный. Расширенная матрица имеет две строки, значит её ранг тоже не больше 2, а раз он не меньше ранга $A$, то он ровно 2. Итог: оба ранга равны 2, и это совпадает с числом неизвестных.
Случай 2: совместная неопределённая.
$$\begin{cases} x + 2y - z = 1 \\ 2x + 4y - 2z = 2 \end{cases}$$Второе уравнение — это первое, умноженное на 2. Оно не добавляет ни одного нового ограничения: любой набор, удовлетворяющий первому уравнению, автоматически удовлетворяет и второму. Фактически ограничение всего одно, а неизвестных три, поэтому две величины можно выбирать свободно. Например, положив $y = 0,\ z = 0$, получаем $x = 1$; положив $y = 1,\ z = 0$, получаем $x = -1$; положив $y = 0,\ z = 5$, получаем $x = 6$. Решений бесконечно много.
Ранги: $\operatorname{rank} A = 1$ (строки пропорциональны), $\operatorname{rank}[A \mid b] = 1$ (после вычитания удвоенной первой строки из второй получается нулевая строка целиком, включая свободный член). Ранги равны, но меньше числа неизвестных $n = 3$.
Случай 3: несовместная.
$$\begin{cases} x + 2y - z = 1 \\ 2x + 4y - 2z = 5 \end{cases}$$Левые части те же самые, но правая часть второго уравнения теперь не 2, а 5. Удвоенное первое уравнение требует, чтобы $2x + 4y - 2z$ равнялось 2, а второе уравнение требует, чтобы это же самое выражение равнялось 5. Требования несовместимы: $2 \ne 5$. Никакой набор чисел не может одновременно удовлетворять обоим, значит решений нет.
Ранги: $\operatorname{rank} A = 1$ по-прежнему, а вот в расширенной матрице после преобразования $R_2 \to R_2 - 2R_1$ получается строка $(0,\ 0,\ 0 \mid 3)$ — она ненулевая, и $\operatorname{rank}[A \mid b] = 2$. Ранги разошлись.
Строка вида $(0,\ 0,\ \dots,\ 0 \mid c)$ с ненулевым $c$ — это визитная карточка несовместности. Расшифровывается она как уравнение $0 \cdot x_1 + 0 \cdot x_2 + \dots + 0 \cdot x_n = c$, то есть буквально «$0 = c$». Если такая строка появилась в ходе преобразований, дальше можно не считать: ответ «решений нет».
Почему это важно
Ты уже мог заметить закономерность: в определённом случае ранги совпали и равнялись $n$; в неопределённом совпали, но были меньше $n$; в несовместном разошлись. Это не совпадение трёх примеров, а общий закон — и через два раздела мы сформулируем его как теорему. Пока запомни главное практическое следствие: несовместность не является ошибкой вычислений. Если система, составленная по реальным измерениям, оказалась несовместной, это чаще всего означает, что измерения содержат шум или что модель не описывает данные точно, — и разбираться надо с моделью, а не с арифметикой.
Геометрия: прямые на плоскости и плоскости в пространстве
Интуиция: каждое уравнение — это фигура
Уравнение $ax + by = c$ (при условии, что $a$ и $b$ не равны нулю одновременно) задаёт на плоскости прямую. Уравнение $ax + by + cz = d$ задаёт в пространстве плоскость. Про это ты знаешь из уроков про векторы: коэффициенты $(a, b, c)$ — это координаты вектора нормали, перпендикулярного плоскости.
Значит, решить систему — значит найти пересечение всех этих фигур. Множество решений системы — это в точности множество общих точек. И вопрос «сколько решений» превращается в наглядный геометрический вопрос: как эти прямые или плоскости расположены друг относительно друга.
Эта картинка бесценна, потому что превращает сухую классификацию в зрительный образ. Несовместная система — это фигуры без общих точек. Определённая — фигуры, пересекающиеся ровно в одной точке. Неопределённая — фигуры, пересекающиеся по целой прямой или плоскости.
Две прямые на плоскости
Система двух уравнений с двумя неизвестными
$$\begin{cases} a_1x + b_1y = c_1 \\ a_2x + b_2y = c_2 \end{cases}$$это две прямые. Возможных конфигураций ровно три.
Прямые пересекаются в одной точке. Так бывает, когда нормали не параллельны, то есть когда $\begin{vmatrix} a_1 & b_1 \\ a_2 & b_2 \end{vmatrix} \ne 0$. Система совместна и определённа, $\operatorname{rank} A = \operatorname{rank}[A \mid b] = 2 = n$. Пример: $x + y = 3$ и $x - y = 1$ пересекаются в точке $(2, 1)$.
Прямые параллельны и различны. Коэффициенты при неизвестных пропорциональны, а свободные члены нарушают ту же пропорцию. Общих точек нет — система несовместна, $\operatorname{rank} A = 1$, $\operatorname{rank}[A \mid b] = 2$. Пример: $x + y = 3$ и $2x + 2y = 7$. Второе требует, чтобы $x + y$ равнялось $3{,}5$, первое — чтобы ровно 3.
Прямые совпадают. Пропорциональны и коэффициенты, и свободные члены — второе уравнение является копией первого, умноженной на число. Общих точек бесконечно много, они образуют целую прямую: система совместна и неопределённа, $\operatorname{rank} A = \operatorname{rank}[A \mid b] = 1 < 2 = n$. Пример: $x + y = 3$ и $2x + 2y = 6$.
Обрати внимание, как соотносятся ранги и картинка. Ранг матрицы $A$ говорит, сколько среди наших прямых «по-настоящему разных направлений». Ранг расширенной матрицы добавляет к этому информацию о том, согласованы ли правые части. Расхождение рангов — геометрически это ситуация «направления совпали, а прямые разъехались».
Три плоскости в пространстве
С тремя уравнениями и тремя неизвестными картинок заметно больше — и это тот самый случай, который стоит разобрать полностью, потому что он даёт интуицию для всех размерностей сразу. Пусть даны три плоскости. Возможны следующие конфигурации.
1. Пересечение в единственной точке. Нормали трёх плоскостей не лежат в одной плоскости (их смешанное произведение не равно нулю), определитель матрицы коэффициентов отличен от нуля. Система определённая, $\operatorname{rank} A = \operatorname{rank}[A \mid b] = 3 = n$. Пример:
$$\begin{cases} x + y + z = 6 \\ x - y = 0 \\ z = 3 \end{cases}$$Из второго уравнения $x = y$, из третьего $z = 3$, подставляем в первое: $2x = 3$, откуда единственное решение $\left(\tfrac{3}{2},\ \tfrac{3}{2},\ 3\right)$.
2. Пересечение по прямой («книжка»). Три плоскости проходят через одну общую прямую, как три страницы раскрытой книги, скреплённые по корешку. Такое случается, когда одно из уравнений является комбинацией двух других — и по левым частям, и по правым сразу. Система совместна, $\operatorname{rank} A = \operatorname{rank}[A \mid b] = 2 < 3$, решений бесконечно много, и они заполняют прямую. Пример:
$$\begin{cases} x + y = 0 \\ y + z = 0 \\ x + 2y + z = 0 \end{cases}$$Третье уравнение — сумма первых двух, и по коэффициентам, и по правым частям. Реальных ограничений два, неизвестных три, множество решений — прямая.
3. Совпадающие плоскости. Все три уравнения задают одну и ту же плоскость (пропорциональны целиком). Тогда $\operatorname{rank} A = \operatorname{rank}[A \mid b] = 1$, множество решений — целая плоскость. Пример: $x + y + z = 1$, $2x + 2y + 2z = 2$, $3x + 3y + 3z = 3$.
4. Две плоскости совпадают, третья их пересекает. Реальных плоскостей две, пересекаются они по прямой. Ранги равны 2, множество решений — прямая. Картинка отличается от «книжки», а алгебра — нет: и там, и там $r = 2$.
5. Две плоскости параллельны и различны. Тогда общих точек у этих двух уже нет, а значит нет и у всей тройки, что бы ни делала третья плоскость. Система несовместна. Пример: $x + y + z = 1$, $x + y + z = 2$, $x - y = 0$. Здесь $\operatorname{rank} A = 2$, а $\operatorname{rank}[A \mid b] = 3$.
6. Все три плоскости параллельны и различны. Общих точек нет, система несовместна, $\operatorname{rank} A = 1$, $\operatorname{rank}[A \mid b] = 2$. Пример: $x + y + z = 1$, $x + y + z = 2$, $x + y + z = 3$.
7. «Призма» (треугольная труба). Самая коварная конфигурация. Никакие две плоскости не параллельны, каждая пара пересекается по прямой — но эти три прямые пересечения параллельны друг другу и не имеют общей точки. Получается бесконечная треугольная труба, боковые грани которой лежат на наших плоскостях, а общей точки у всех трёх нет. Система несовместна, причём $\operatorname{rank} A = 2$, $\operatorname{rank}[A \mid b] = 3$. Пример:
$$\begin{cases} x + y = 0 \\ y + z = 0 \\ x + 2y + z = 1 \end{cases}$$Левая часть третьего уравнения — сумма левых частей первых двух, а правая часть должна была бы быть $0 + 0 = 0$, но стоит 1. Плоскость «поехала» параллельно самой себе, и точка пересечения ушла на бесконечность. Именно этот случай чаще всего пропускают: по отдельности плоскости выглядят вполне «независимыми», никаких параллельностей на глаз не видно, а решений нет.
8. Две плоскости совпадают, третья им параллельна. Несовместна, $\operatorname{rank} A = 1$, $\operatorname{rank}[A \mid b] = 2$.
Разбор примеров
Пример 1. Определяем конфигурацию по рангам. Дана система
$$\begin{cases} x + y + z = 0 \\ 2x - y + z = 3 \\ 3x + 2z = 3 \end{cases}$$Приводим расширенную матрицу к ступенчатому виду. $R_2 \to R_2 - 2R_1$ даёт $(0, -3, -1 \mid 3)$; $R_3 \to R_3 - 3R_1$ даёт $(0, -3, -1 \mid 3)$ — та же самая строка. Вычитая их друг из друга, получаем нулевую строку:
$$\left(\begin{array}{ccc|c} 1 & 1 & 1 & 0 \\ 0 & -3 & -1 & 3 \\ 0 & 0 & 0 & 0 \end{array}\right)$$Оба ранга равны 2, они совпадают, но меньше $n = 3$. Это конфигурация «книжка»: три плоскости пересекаются по общей прямой. Действительно, третье уравнение равно сумме первых двух.
Пример 2. Отличаем призму от книжки. Возьмём ту же матрицу коэффициентов, но правую часть третьего уравнения заменим на 4:
$$\begin{cases} x + y + z = 0 \\ 2x - y + z = 3 \\ 3x + 2z = 4 \end{cases}$$Те же преобразования дают в третьей строке $(0, 0, 0 \mid 1)$. Ранг $A$ остался равен 2, ранг расширенной матрицы стал 3. Плоскости остались непараллельными, но общей точки больше нет: это призма. Заметь, что изменилось только одно число в правой части — а геометрия изменилась радикально.
Пример 3. Восемь конфигураций — три алгебраических исхода. Полезно сложить всё вместе. Конфигураций три плоскости образуют восемь, а алгебраически исходов всего три: $r_A = r_{[A|b]} = 3$ (точка), $r_A = r_{[A|b]} < 3$ (прямая или плоскость), $r_A \ne r_{[A|b]}$ (пусто). Ранги не различают книжку и «две совпавшие плюс секущая» — обе дают $r = 2$ и прямую в ответе. И это правильно: с точки зрения множества решений эти конфигурации действительно неотличимы, а «сколько плоскостей нарисовано» алгебру не интересует.
Почему это важно
Геометрическая картинка работает как страховка от бессмысленных ответов. Если ты решаешь систему трёх уравнений и получаешь в ответе «прямая», ты можешь мысленно проверить: да, три плоскости могут пересекаться по прямой, всё сходится. Если же алгоритм выдал что-то вроде «ровно две точки», это сигнал ошибки — такой конфигурации у плоскостей не бывает. А главное, в размерностях выше трёх, где рисовать уже нечего, работает ровно та же логика: множество решений совместной системы всегда является «плоскостью» подходящей размерности, а несовместность всегда означает, что фигуры разъехались параллельно.
Теорема Кронекера — Капелли
Интуиция: собираем $b$ из столбцов $A$
Всё, что было до сих пор, — наблюдения. Пора превратить их в закон. Для этого посмотрим на систему под другим углом: не по строкам (каждая строка — уравнение, каждое уравнение — фигура), а по столбцам.
Распишем произведение $Ax$ через столбцы матрицы $A$. Обозначим первый столбец через $A_1$, второй через $A_2$ и так далее. Тогда
$$Ax = x_1 A_1 + x_2 A_2 + \dots + x_n A_n$$Проверить это несложно: элемент номер $i$ в левой части равен $a_{i1}x_1 + a_{i2}x_2 + \dots + a_{in}x_n$, а в правой части элемент номер $i$ суммы — ровно то же самое выражение. Это одна и та же вещь, записанная двумя способами.
А теперь прочитай уравнение $Ax = b$ в этой записи:
$$x_1 A_1 + x_2 A_2 + \dots + x_n A_n = b$$Смысл сразу меняется. Решить систему — значит подобрать множители $x_1, \dots, x_n$ так, чтобы из столбцов матрицы $A$, растянутых на эти множители и сложенных, получился столбец $b$. Столбцы $A$ — это как набор строительных блоков, а $b$ — то, что надо из них собрать. Неизвестные — количества каждого блока (возможно, дробные, возможно, отрицательные).
Отсюда мгновенно вытекает критерий совместности, ещё до всякой формальной теории: система имеет решение тогда и только тогда, когда столбец $b$ можно собрать из столбцов $A$. Если $b$ «не собирается» — решений нет.
Осталось перевести слова «можно собрать» на измеримый язык. Вот здесь и работает ранг. Вспомни из прошлого урока: ранг — это количество независимых направлений среди столбцов (или строк) матрицы; столбцы, которые выражаются через другие, ранга не добавляют. Значит:
-
если $b$ собирается из столбцов $A$, то приписывание $b$ к матрице справа не добавляет нового независимого направления — ранг не меняется, и $\operatorname{rank}[A \mid b] = \operatorname{rank} A$;
-
если $b$ не собирается, то он «торчит» в сторону, которой у столбцов $A$ не было, — приписывание добавляет ровно одно новое независимое направление, и $\operatorname{rank}[A \mid b] = \operatorname{rank} A + 1$.
Третьего не дано: приписывание одного столбца не может увеличить ранг больше чем на единицу и не может его уменьшить. Поэтому проверка совместности сводится к вопросу «изменился ли ранг при добавлении столбца $b$» — а это уже полностью механическая процедура, которую ты умеешь делать с прошлого урока.
Формулировка
Теорема Кронекера — Капелли. Система линейных уравнений $Ax = b$ совместна (то есть имеет хотя бы одно решение) тогда и только тогда, когда ранг матрицы коэффициентов равен рангу расширенной матрицы:
$$\operatorname{rank} A = \operatorname{rank}[A \mid b]$$
Слова «тогда и только тогда» означают, что теорема работает в обе стороны: из совместности следует равенство рангов, и из равенства рангов следует совместность. Это критерий, а не просто необходимое условие.
Разберём, почему теорема верна, — рассуждение уже фактически проведено выше, осталось его аккуратно собрать.
Пусть система совместна. Тогда существует набор чисел $(c_1, \dots, c_n)$, для которого $c_1A_1 + \dots + c_nA_n = b$. Значит, столбец $b$ выражается через столбцы $A$. Добавляя его к матрице, мы добавляем столбец, который «уже был» — не в буквальном смысле, а в смысле выразимости через остальные. Такой столбец не увеличивает количество независимых направлений, поэтому ранг остаётся прежним.
Пусть ранги равны. Возьмём в матрице $A$ какие-нибудь $r = \operatorname{rank} A$ столбцов, которые независимы (то есть ни один из них не выражается через остальные). Все прочие столбцы $A$ через них выражаются — иначе ранг был бы больше $r$. Теперь добавим $b$. Если бы $b$ через эти $r$ столбцов не выражался, то в расширенной матрице нашлось бы $r + 1$ независимых столбцов, и её ранг был бы как минимум $r+1$ — противоречие с равенством рангов. Значит, $b$ выражается: $b = c_1A_1 + \dots + c_nA_n$ для каких-то чисел $c_j$. Но этот набор коэффициентов и есть решение системы.
Заметь, насколько экономно устроен критерий. Он не требует ничего решать: достаточно привести расширенную матрицу к ступенчатому виду и посмотреть, появилась ли строка вида $(0, \dots, 0 \mid c)$ с ненулевым $c$. Если появилась — ранги разошлись, решений нет. Если нет — система совместна.
Следствие: сколько именно решений
Теорема отвечает на вопрос «есть ли решения». Прямое её следствие отвечает и на вопрос «сколько».
Следствие. Пусть $A$ — матрица размера $m \times n$, $r = \operatorname{rank} A$, $\tilde{r} = \operatorname{rank}[A \mid b]$. Тогда:
если $r \ne \tilde{r}$ — система несовместна, решений нет;
если $r = \tilde{r} = n$ — система совместна и определённа, решение ровно одно;
если $r = \tilde{r} < n$ — система совместна и неопределённа, решений бесконечно много, причём в общем решении будет ровно $n - r$ свободных переменных.
Разберём, откуда берётся число $n - r$. Приведём расширенную матрицу к ступенчатому виду. Ненулевых строк в нём окажется ровно $\tilde{r} = r$ штук — это и есть определение ранга. Каждая такая строка даёт одно «настоящее» уравнение, а нулевые строки дают тождества $0 = 0$, которые ничего не ограничивают и выбрасываются. Итого реальных ограничений $r$, а неизвестных $n$.
В каждой ненулевой строке есть ведущий элемент (пивот). Неизвестные, стоящие в столбцах с пивотами, назовём базисными — их ровно $r$. Все остальные неизвестные, которых $n - r$, назовём свободными. Дальше происходит вот что: свободным переменным можно присвоить любые значения, какие захочется, и после этого система однозначно доопределяет базисные — двигаясь по ступенькам снизу вверх. То есть каждый набор значений свободных переменных порождает ровно одно решение, и разным наборам отвечают разные решения.
Отсюда сразу и «бесконечно много» (потому что свободные переменные пробегают все действительные числа), и «ровно $n-r$ параметров» (потому что степеней свободы столько, сколько свободных переменных). А если $r = n$, свободных переменных нет ни одной, выбирать нечего, решение получается единственным.
Полезно держать в голове ещё и такое неравенство: всегда $r \le \min(m, n)$. Значит, если уравнений меньше, чем неизвестных ($m < n$), то $r \le m < n$, и случай «единственное решение» физически невозможен: совместная система с $m < n$ обязательно имеет бесконечно много решений. Именно это мы и обещали в примере с двумя уравнениями и тремя неизвестными.
Разбор примеров
Пример 1. Определённая система. Дана система
$$\begin{cases} x + 2y = 5 \\ 3x - y = 1 \end{cases}$$Расширенная матрица: $\left(\begin{array}{cc|c} 1 & 2 & 5 \\ 3 & -1 & 1 \end{array}\right)$. Преобразование $R_2 \to R_2 - 3R_1$ даёт строку $(0, -7 \mid -14)$:
$$\left(\begin{array}{cc|c} 1 & 2 & 5 \\ 0 & -7 & -14 \end{array}\right)$$Ненулевых строк две, причём и в левой части их две, значит $r = \tilde{r} = 2$. Число неизвестных $n = 2$, то есть $r = n$: система определённая. Из второй строки $y = 2$, из первой $x = 5 - 4 = 1$. Ответ $(1, 2)$, свободных переменных $n - r = 0$.
Пример 2. Неопределённая система с одной свободной переменной. Дана система
$$\begin{cases} x + 2y - z = 1 \\ 2x + 5y + z = 4 \\ x + 3y + 2z = 3 \end{cases}$$Расширенная матрица и преобразования $R_2 \to R_2 - 2R_1$, $R_3 \to R_3 - R_1$:
$$\left(\begin{array}{ccc|c} 1 & 2 & -1 & 1 \\ 2 & 5 & 1 & 4 \\ 1 & 3 & 2 & 3 \end{array}\right) \to \left(\begin{array}{ccc|c} 1 & 2 & -1 & 1 \\ 0 & 1 & 3 & 2 \\ 0 & 1 & 3 & 2 \end{array}\right) \to \left(\begin{array}{ccc|c} 1 & 2 & -1 & 1 \\ 0 & 1 & 3 & 2 \\ 0 & 0 & 0 & 0 \end{array}\right)$$Оба ранга равны 2, они совпадают, значит система совместна. Неизвестных $n = 3$, поэтому $r < n$ — решений бесконечно много, свободных переменных $n - r = 3 - 2 = 1$.
Пивоты стоят в первом и втором столбцах, значит базисные переменные — $x$ и $y$, а свободная — $z$. Положим $z = t$, где $t$ — произвольное число. Из второй строки: $y + 3t = 2$, откуда $y = 2 - 3t$. Из первой строки: $x = 1 - 2y + z = 1 - 2(2 - 3t) + t = 1 - 4 + 6t + t = -3 + 7t$. Общее решение:
$$(x, y, z) = (-3 + 7t,\ 2 - 3t,\ t), \qquad t \in \mathbb{R}$$Проверим подстановкой в третье уравнение (то, которое «схлопнулось»): $(-3+7t) + 3(2-3t) + 2t = -3 + 7t + 6 - 9t + 2t = 3$ — верно при любом $t$ ✓.
Пример 3. Несовместная система. Возьмём ту же систему, но заменим правую часть третьего уравнения на 4:
$$\begin{cases} x + 2y - z = 1 \\ 2x + 5y + z = 4 \\ x + 3y + 2z = 4 \end{cases}$$Те же преобразования дают в третьей строке $(0, 1, 3 \mid 3)$, а после вычитания второй строки — $(0, 0, 0 \mid 1)$:
$$\left(\begin{array}{ccc|c} 1 & 2 & -1 & 1 \\ 0 & 1 & 3 & 2 \\ 0 & 0 & 0 & 1 \end{array}\right)$$$\operatorname{rank} A = 2$, а $\operatorname{rank}[A \mid b] = 3$. Ранги разошлись — система несовместна. Последняя строка читается как $0 = 1$.
Пример 4. Две свободные переменные. Система из трёх уравнений с четырьмя неизвестными:
$$\begin{cases} x_1 + 2x_2 - x_3 + 3x_4 = 4 \\ 2x_1 + 5x_2 + x_3 + 7x_4 = 9 \\ x_1 + 3x_2 + 2x_3 + 4x_4 = 5 \end{cases}$$Преобразования $R_2 \to R_2 - 2R_1$ и $R_3 \to R_3 - R_1$ дают строки $(0, 1, 3, 1 \mid 1)$ и $(0, 1, 3, 1 \mid 1)$ — одинаковые, вторая обнуляется:
$$\left(\begin{array}{cccc|c} 1 & 2 & -1 & 3 & 4 \\ 0 & 1 & 3 & 1 & 1 \\ 0 & 0 & 0 & 0 & 0 \end{array}\right)$$Оба ранга равны 2, $n = 4$, свободных переменных $4 - 2 = 2$. Пивоты в столбцах 1 и 2, значит базисные — $x_1, x_2$, свободные — $x_3, x_4$. Полагаем $x_3 = t$, $x_4 = s$. Из второй строки $x_2 = 1 - 3t - s$. Из первой $x_1 = 4 - 2x_2 + x_3 - 3x_4 = 4 - 2(1 - 3t - s) + t - 3s = 2 + 7t - s$. Общее решение:
$$(x_1, x_2, x_3, x_4) = (2 + 7t - s,\ 1 - 3t - s,\ t,\ s), \qquad t, s \in \mathbb{R}$$Множество решений здесь — двумерная «плоскость» внутри четырёхмерного пространства. Нарисовать её нельзя, но описать одной формулой — вполне.
Почему это важно
Теорема Кронекера — Капелли устраняет из решения систем элемент неожиданности. Без неё анализ системы выглядит так: начинаешь считать, доходишь до конца, обнаруживаешь противоречие, откатываешься назад, проверяешь арифметику, снова получаешь противоречие, и только после третьего прогона решаешься написать «решений нет». С теоремой всё иначе: ты сравниваешь два ранга, получаешь ответ про число решений заранее и дальше считаешь уже спокойно, зная, что должно получиться. Для систем с параметрами это вообще единственный способ действовать: там ответ зависит от параметра, и полный разбор требует именно рангового анализа, а не подстановок наугад.
Базисные и свободные переменные. Общее и частное решение
Интуиция: кто задаёт тон, а кто подстраивается
Когда решений бесконечно много, ответ нельзя выписать списком — его нужно описать. Идея описания простая: часть переменных объявляем «ведущими», часть — «ведомыми». Ведомым разрешаем принимать какие угодно значения, а ведущие вычисляем через них. Тогда всё бесконечное множество решений схлопывается в одну формулу с несколькими буквами-параметрами.
Житейская аналогия. Ты планируешь бюджет: сумма расходов на еду, транспорт и развлечения должна составить 30 тысяч. Одно ограничение, три величины. Ты можешь свободно выбрать, сколько потратить на транспорт и сколько на развлечения, — а расходы на еду после этого определятся сами: то, что осталось. Транспорт и развлечения тут свободные переменные, еда — базисная. Но выбор не единственный: с тем же успехом можно свободно выбирать еду и транспорт, а развлечения считать остатком. Ограничение одно и то же, степеней свободы две, а вот кого назначить «остатком» — вопрос удобства.
Терминология
Определение: Приведём расширенную матрицу системы к ступенчатому виду. Неизвестные, которым соответствуют столбцы с ведущими элементами (пивотами), называются базисными; их количество равно $r = \operatorname{rank} A$. Остальные $n - r$ неизвестных называются свободными.
Определение: Частное решение — это один конкретный набор чисел, удовлетворяющий системе. Общее решение — это формула, описывающая сразу все решения системы; в ней базисные переменные выражены через свободные, а свободные обозначены параметрами.
Общее решение с $k = n - r$ параметрами записывают в параметрической форме: свободным переменным присваивают буквы $t_1, \dots, t_k$ и выписывают все $n$ координат как функции этих букв. Каждый конкретный набор значений параметров даёт одно частное решение, и наоборот — любое решение системы получается при каком-то наборе параметров. Формула ничего не теряет и ничего лишнего не добавляет.
Выбор базисных переменных не единственный. Это важный и часто недооценённый момент. Если в ходе преобразований переставить столбцы (то есть просто перенумеровать неизвестные) или пойти другим путём, пивоты могут встать в других столбцах — и базисными окажутся другие переменные. Ответ при этом не изменится: множество решений — объективная вещь, оно не зависит от того, как мы его записали. Изменится только внешний вид формулы.
Есть, впрочем, ограничение: базисными можно назначить не любой набор из $r$ переменных, а только такой, при котором соответствующие $r$ столбцов матрицы $A$ независимы (то есть подматрица из этих столбцов имеет ранг $r$). Если попытаться сделать базисной переменную, столбец которой выражается через остальные выбранные, система не разрешится относительно неё.
Разбор примеров
Пример 1. Один и тот же ответ в двух записях. Рассмотрим единственное уравнение с тремя неизвестными:
$$x + y + z = 6$$Здесь $m = 1$, $n = 3$, $r = 1$, свободных переменных две.
Первый вариант. Базисная переменная — $x$, свободные — $y = t$, $z = s$. Тогда $x = 6 - t - s$, и общее решение
$$(x, y, z) = (6 - t - s,\ t,\ s)$$Второй вариант. Базисная переменная — $z$, свободные — $x = p$, $y = q$. Тогда $z = 6 - p - q$, и общее решение
$$(x, y, z) = (p,\ q,\ 6 - p - q)$$Формулы выглядят по-разному, но описывают одну и ту же плоскость. Например, точка $(1, 2, 3)$ получается в первом варианте при $t = 2, s = 3$, а во втором — при $p = 1, q = 2$. Ни одна из записей не «правильнее» другой.
Пример 2. От ступенчатого вида к параметрической форме. Пусть расширенная матрица системы уже приведена к виду
$$\left(\begin{array}{cccc|c} 1 & 2 & 0 & 3 & 5 \\ 0 & 0 & 1 & -1 & 2 \end{array}\right)$$Пивоты стоят в столбцах 1 и 3, значит базисные переменные — $x_1$ и $x_3$, свободные — $x_2$ и $x_4$. Обрати внимание, что базисные переменные здесь идут не подряд: пивот второй строки «перепрыгнул» через второй столбец, потому что там оказался ноль.
Полагаем $x_2 = s$, $x_4 = t$. Вторая строка даёт $x_3 - x_4 = 2$, откуда $x_3 = 2 + t$. Первая строка даёт $x_1 + 2x_2 + 3x_4 = 5$, откуда $x_1 = 5 - 2s - 3t$. Общее решение:
$$(x_1, x_2, x_3, x_4) = (5 - 2s - 3t,\ s,\ 2 + t,\ t), \qquad s, t \in \mathbb{R}$$Частное решение получим, подставив конкретные значения: при $s = 0, t = 0$ выходит $(5, 0, 2, 0)$. Проверка: $5 + 0 + 0 + 0 = 5$ ✓ и $0 + 2 - 0 = 2$ ✓.
Пример 3. Сколько параметров нужно и почему нельзя меньше. Вернёмся к системе из примера 4 предыдущего раздела, общее решение которой мы записали как $(2 + 7t - s,\ 1 - 3t - s,\ t,\ s)$. Иногда возникает соблазн «сэкономить» и оставить один параметр вместо двух — например, положить $s = t$. Получится $(2 + 6t,\ 1 - 4t,\ t,\ t)$ — все эти наборы действительно являются решениями, но они образуют лишь часть множества решений: прямую внутри плоскости. Скажем, решение при $t = 1, s = 0$, то есть $(9, -2, 1, 0)$, в упрощённую формулу не попадает ни при каком значении $t$ (для этого нужно было бы $t = 1$ и одновременно $t = 0$).
Отсюда правило: количество параметров в общем решении обязано быть ровно $n - r$. Меньше — потеряешь часть решений; больше — начнёшь описывать одно и то же решение много раз, и запись перестанет быть взаимно однозначной.
Почему это важно
Умение записать общее решение — это, по сути, умение дать честный ответ там, где однозначного ответа не существует. В прикладных задачах ответ вида «решений бесконечно много» почти всегда сопровождается дополнительными содержательными условиями, которые из этого множества выбирают нужное. Потоки в трубах не могут быть отрицательными, коэффициенты в химическом уравнении обязаны быть целыми и положительными, количество товара измеряется целым числом. Общее решение с параметрами — это как раз тот вид ответа, к которому такие условия удобно применять: подставил ограничения на параметры и получил конкретный ответ.
Эквивалентные системы и элементарные преобразования
Интуиция: почему систему вообще можно менять
Весь аппарат решения систем построен на одной простой идее: систему можно постепенно упрощать, заменяя её на другую, более удобную, но с тем же самым множеством решений. Именно поэтому имеет смысл возиться с расширенной матрицей — мы её мнём и крутим, а ответ при этом не портится.
Определение: Две системы с одинаковым числом неизвестных называются эквивалентными (равносильными), если множества их решений совпадают. В частности, две несовместные системы эквивалентны между собой — у обеих множество решений пустое.
Важно, что речь идёт именно о совпадении множеств, а не о «похожести» уравнений. Система $x + y = 2$ и система $2x + 2y = 4$ эквивалентны, хотя записаны разными числами. А системы $x + y = 2$ и $x + y = 2,\ x - y = 0$ не эквивалентны: у первой решений бесконечно много, у второй ровно одно.
Три преобразования и почему они безопасны
Элементарные преобразования строк ты уже знаешь из урока про ранг. Здесь тот же список, но применяется он к расширенной матрице — то есть к строкам вместе со свободными членами:
-
перестановка двух строк — поменять местами два уравнения;
-
умножение строки на ненулевое число — умножить обе части одного уравнения на $\lambda \ne 0$;
-
прибавление к строке другой строки, умноженной на число — прибавить к одному уравнению другое, умноженное на $\lambda$.
Ключевой вопрос сегодняшнего урока — не «как их делать» (это ты умеешь), а почему они не меняют множество решений. Разберём каждое.
Перестановка. Определение решения требует, чтобы выполнялись все уравнения. Порядок, в котором мы их перечисляем, в это требование не входит вообще. Множество решений очевидным образом не меняется.
Умножение строки на $\lambda \ne 0$. Пусть набор $c$ удовлетворял уравнению $a_{i1}x_1 + \dots + a_{in}x_n = b_i$. Умножив обе части верного числового равенства на $\lambda$, получим снова верное равенство — значит, $c$ удовлетворяет и новому уравнению. В обратную сторону: если $c$ удовлетворяет новому уравнению, домножим его на $\dfrac{1}{\lambda}$ (это возможно ровно потому, что $\lambda \ne 0$) и вернёмся к старому. Множества решений совпадают.
Вот здесь и видно, почему запрещено умножать строку на ноль: обратного хода не будет. Уравнение $x + y = 5$, умноженное на ноль, превращается в $0 = 0$, которому удовлетворяют вообще все наборы. Ограничение потеряно безвозвратно, система стала другой.
Прибавление кратной строки. Пусть уравнения с номерами $i$ и $k$ имеют вид $L_i = b_i$ и $L_k = b_k$, где $L_i, L_k$ — левые части. Заменим $i$-е уравнение на $L_i + \lambda L_k = b_i + \lambda b_k$. Если набор $c$ удовлетворял обоим старым уравнениям, то $L_i(c) = b_i$ и $L_k(c) = b_k$, а значит $L_i(c) + \lambda L_k(c) = b_i + \lambda b_k$ — новое уравнение тоже выполнено. Обратно: если $c$ удовлетворяет новому $i$-му уравнению и старому $k$-му (которое мы не трогали), то, вычитая из первого $\lambda$-кратное второго, получаем $L_i(c) = b_i$ — старое уравнение восстановлено. Множества решений совпадают.
Обрати внимание на тонкость в обратном рассуждении: оно опирается на то, что $k$-я строка осталась на месте. Именно поэтому нельзя одним махом заменить обе строки друг через друга — например, сделать $R_1 \to R_1 + R_2$ и $R_2 \to R_2 + R_1$ «одновременно», используя новое значение $R_1$. Так информация теряется, и множество решений может измениться.
Разбор примеров
Пример 1. Преобразования сохраняют решение. Возьмём систему
$$\begin{cases} x + y = 3 \\ 2x - y = 0 \end{cases}$$Её решение — $(1, 2)$. Проделаем цепочку преобразований над расширенной матрицей: $R_2 \to R_2 - 2R_1$ даёт $(0, -3 \mid -6)$; затем $R_2 \to -\frac{1}{3}R_2$ даёт $(0, 1 \mid 2)$; затем $R_1 \to R_1 - R_2$ даёт $(1, 0 \mid 1)$:
$$\left(\begin{array}{cc|c} 1 & 1 & 3 \\ 2 & -1 & 0 \end{array}\right) \to \left(\begin{array}{cc|c} 1 & 1 & 3 \\ 0 & -3 & -6 \end{array}\right) \to \left(\begin{array}{cc|c} 1 & 1 & 3 \\ 0 & 1 & 2 \end{array}\right) \to \left(\begin{array}{cc|c} 1 & 0 & 1 \\ 0 & 1 & 2 \end{array}\right)$$Последняя матрица читается как система $x = 1$, $y = 2$. Каждая промежуточная система эквивалентна исходной — и в этом весь смысл: мы получили ответ, ни разу не рискуя его исказить.
Пример 2. Что даёт умножение на ноль. Возьмём систему $x + y = 5$, $x - y = 1$ с единственным решением $(3, 2)$. Умножим второе уравнение на ноль. Получится система $x + y = 5$, $0 = 0$, у которой решений бесконечно много: $(t, 5 - t)$ при любом $t$. Множество решений расширилось, эквивалентность нарушена. Ровно поэтому в определении элементарного преобразования стоит оговорка «на ненулевое число» — она не формальная придирка, а условие корректности.
Пример 3. Почему нулевая строка — это не потеря. А вот если нулевая строка появилась сама, в результате законных преобразований, — это не потеря информации, а обнаружение того факта, что одно из уравнений было лишним с самого начала. В примере 2 предыдущего раздела третье уравнение обнулилось потому, что оно являлось комбинацией первых двух; никакого ограничения оно не несло и до преобразований. Разница принципиальная: умножение на ноль уничтожает ограничение, а самопроизвольное обнуление строки выявляет, что ограничения там и не было.
Почему это важно
Понимание того, почему преобразования безопасны, — это разница между «я выполняю алгоритм» и «я знаю, что делаю». Оно немедленно окупается в двух местах. Первое: в системах с параметром постоянно возникает соблазн разделить строку на выражение вроде $(a - 1)$, — и это законно только при $a \ne 1$, а случай $a = 1$ обязан разбираться отдельно. Пропуск этой оговорки — источник половины ошибок в задачах с параметрами. Второе: в численных расчётах строки специально переставляют, чтобы ведущий элемент был как можно больше по модулю, и корректность такой перестановки опирается ровно на то, что она множество решений не портит. Полноценный алгоритм, использующий эти преобразования по порядку, — метод Гаусса — мы разберём в следующем уроке.
Недоопределённые и переопределённые системы
Интуиция: сколько уравнений хватает
Сравним число уравнений $m$ и число неизвестных $n$. Возникают три ситуации, и у каждой свой характерный сюжет.
$m < n$: уравнений меньше, чем неизвестных — недоопределённая система. Ограничений не хватает, чтобы зафиксировать ответ. Ранг не может превысить $m$, а значит $r \le m < n$, и единственного решения не бывает никогда: система либо несовместна, либо имеет бесконечно много решений. Это не поломка, а честное сообщение: «имеющихся данных недостаточно, чтобы выделить один вариант».
$m = n$: поровну. Самый обсуждаемый в учебниках случай. Если матрица $A$ невырождена ($\det A \ne 0$, то есть $\operatorname{rank} A = n$), решение существует и единственно при любой правой части. Если же $\det A = 0$, всё зависит от $b$: система может оказаться и несовместной, и неопределённой.
$m > n$: уравнений больше, чем неизвестных — переопределённая система. Ограничений с избытком. Такая система может быть совместной, но только если «лишние» уравнения не противоречат остальным, а являются их следствиями. Как только правые части хоть немного разъезжаются, система становится несовместной. И вот здесь начинается самое интересное для практики.
Бесконечно много решений — это ответ, а не отговорка
С недоопределёнными системами связано устойчивое заблуждение: будто ответ «решений бесконечно много» означает, что задача решена плохо или условие поставлено небрежно. На самом деле это полноценный, содержательный и очень информативный ответ.
Возьми задачу о балансировке химической реакции. Ты составляешь систему на коэффициенты и получаешь бесконечное множество решений — и правильно получаешь: если набор коэффициентов уравнивает реакцию, то и удвоенный набор её уравнивает, и утроенный. Множество решений здесь — прямая, а «тот самый» ответ из учебника — это наименьший целый положительный набор на этой прямой. Не будь решений бесконечно много, у реакции не было бы масштабной свободы, что противоречило бы химии.
Возьми задачу о потоках в дорожной сети или в трубопроводе. Если в схеме есть замкнутый контур, по нему можно «прокрутить» дополнительный поток, не нарушив ни одного баланса в узлах. Бесконечность решений — это прямое отражение того, что контур существует; а конкретный режим выбирают уже по дополнительным критериям (минимизировать затраты, уложиться в пропускные способности, не допустить отрицательных потоков).
И, наконец, машинное обучение. Если признаков больше, чем наблюдений (типичная ситуация в геномике, в обработке текстов с большим словарём, в задачах с сотнями сгенерированных фич и парой сотен строк данных), система $Xw = y$ недоопределена, и наборов весов, идеально описывающих обучающую выборку, бесконечно много. Все они дают нулевую ошибку на обучении и совершенно разное поведение на новых данных. Отсюда — регуляризация: к задаче добавляют критерий «а из всех подходящих $w$ возьмём тот, у которого веса поменьше», и бесконечное множество схлопывается до одной точки. Заметь логику: сначала честно признаём, что решений бесконечно много, и лишь потом добавляем критерий выбора. Попытка сделать вид, что решение одно, приводит к тому, что программа возвращает случайный элемент множества, а мы принимаем его за истину.
Переопределённые системы и мостик к наименьшим квадратам
Теперь самый практичный сюжет. Пусть у тебя 1000 измерений и 3 неизвестных параметра. Система имеет 1000 уравнений и 3 неизвестных: $m \gg n$. Ранг матрицы $A$ не больше 3, а вот ранг расширенной матрицы $[A \mid b]$ будет равен 4, если столбец $b$ хоть чуть-чуть выбивается из того, что можно собрать из трёх столбцов $A$. А выбивается он практически всегда: любая погрешность измерения, любое отклонение реальности от линейной модели немедленно выводит $b$ из-под досягаемости.
Разберём это на минимальном примере. Пусть три точки $(0, 1)$, $(1, 3)$, $(2, 4)$ и мы хотим провести через них прямую $y = kx + m$. Каждая точка даёт уравнение:
$$\begin{cases} 0 \cdot k + m = 1 \\ 1 \cdot k + m = 3 \\ 2 \cdot k + m = 4 \end{cases}$$Три уравнения, два неизвестных. Из первого $m = 1$, из второго $k = 2$; подставляем в третье: $2 \cdot 2 + 1 = 5 \ne 4$. Система несовместна: $\operatorname{rank} A = 2$, $\operatorname{rank}[A \mid b] = 3$. И это правильный результат — три точки, не лежащие на одной прямой, никакой прямой не описываются точно.
Что делать? Отказываться от требования точного равенства. Раз попасть во все три точки нельзя, будем искать прямую, которая проходит как можно ближе ко всем сразу: минимизируем сумму квадратов отклонений. Это и есть метод наименьших квадратов, а его решение находится из нормальных уравнений $A^TA\,w = A^Tb$ — ты уже встречал их в уроке про обратную матрицу, где мы выводили формулу линейной регрессии. Для нашего примера получается $k = \dfrac{3}{2}$, $m = \dfrac{7}{6}$, а отклонения в трёх точках равны $-\dfrac{1}{6}$, $\dfrac{1}{3}$, $-\dfrac{1}{6}$ — маленькие, но ненулевые, и это нормально.
Сформулируем главную мысль так: метод наименьших квадратов — это способ дать осмысленный ответ на несовместную систему. Не «решить» её в исходном смысле (решения нет и не будет), а найти набор чисел, который нарушает уравнения минимально возможным образом. Именно поэтому обучение линейной регрессии и анализ систем линейных уравнений — это одна и та же математика, просто рассказанная разными словами. Технику нормальных уравнений мы уже разобрали в уроке 161 и повторять её здесь не будем; важно другое — понимать, из какой ситуации она вырастает.
Разбор примеров
Пример 1. Переопределённая, но совместная. Система
$$\begin{cases} x + y = 2 \\ 2x - y = 1 \\ x + 2y = 3 \end{cases}$$Из первых двух уравнений: складывая, получаем $3x = 3$, то есть $x = 1$, $y = 1$. Проверяем третье: $1 + 2 = 3$ ✓. Система совместна, решение единственное.
Причина в том, что третье уравнение выражается через первые два. Найдём коэффициенты: ищем $\alpha, \beta$ такие, что $\alpha(1, 1) + \beta(2, -1) = (1, 2)$. Получаем $\alpha + 2\beta = 1$ и $\alpha - \beta = 2$; вычитая, находим $3\beta = -1$, то есть $\beta = -\dfrac{1}{3}$, $\alpha = \dfrac{5}{3}$. Проверим правые части: $\dfrac{5}{3} \cdot 2 - \dfrac{1}{3} \cdot 1 = \dfrac{10 - 1}{3} = 3$ — ровно то, что стоит справа в третьем уравнении. Левая и правая части согласованы, поэтому ранги равны: $\operatorname{rank} A = \operatorname{rank}[A \mid b] = 2 = n$. Три уравнения, но реальных ограничений два.
Пример 2. То же, но с испорченной правой частью. Заменим 3 на 4 в третьем уравнении. Первые два по-прежнему дают $(1,1)$, но $1 + 2 = 3 \ne 4$. Теперь $\operatorname{rank}[A \mid b] = 3 \ne 2 = \operatorname{rank} A$, система несовместна. Одна цифра — и точного решения не существует. Именно это и происходит с реальными данными: там «третья цифра» всегда чуть-чуть не та.
Пример 3. Недоопределённая система в чистом виде. Система
$$\begin{cases} x_1 + x_2 + x_3 + x_4 = 10 \\ x_1 - x_2 = 0 \end{cases}$$Два уравнения, четыре неизвестных, $r = 2$, свободных переменных две. Полагая $x_3 = t$, $x_4 = s$, из второго уравнения $x_1 = x_2$, а из первого $2x_1 = 10 - t - s$, то есть $x_1 = x_2 = 5 - \dfrac{t + s}{2}$. Общее решение:
$$(x_1, x_2, x_3, x_4) = \left(5 - \tfrac{t+s}{2},\ 5 - \tfrac{t+s}{2},\ t,\ s\right)$$Если это задача про распределение 10 единиц ресурса по четырём направлениям с условием «первое и второе поровну», то ответ «бесконечно много вариантов» абсолютно корректен — и дальше в дело вступают дополнительные требования вроде неотрицательности, которые ограничат $t$ и $s$.
Почему это важно
Соотношение $m$ и $n$ — первое, на что стоит смотреть, получив систему. Оно сразу говорит, какого рода ответ вообще может получиться, и заранее предупреждает, где ждать подвоха. Уравнений меньше, чем неизвестных, — готовься описывать множество решений параметрами. Уравнений больше — готовься к тому, что точного решения нет, и заранее решай, что будешь делать: искать приближение, отбрасывать противоречивые измерения или пересматривать модель.
Системы линейных уравнений в машинном обучении
$Xw = y$: почему точного решения почти никогда нет
Линейная регрессия ставится так: есть матрица признаков $X$ размера $n_{\text{samples}} \times n_{\text{features}}$ (строка — наблюдение, столбец — признак), есть вектор целевых значений $y$, и надо найти вектор весов $w$, при котором $Xw = y$. Это самая обыкновенная система линейных уравнений: уравнений столько, сколько наблюдений, неизвестных столько, сколько признаков.
В любом разумном датасете наблюдений заметно больше, чем признаков: тысячи строк и десятки колонок. Значит, система сильно переопределена, и по теореме Кронекера — Капелли она совместна только в одном экзотическом случае — когда столбец $y$ ровно собирается из столбцов $X$. Достаточно одного наблюдения, где целевая переменная отклонилась от идеальной линейной зависимости хотя бы на $0{,}001$, чтобы $\operatorname{rank}[X \mid y]$ стал на единицу больше $\operatorname{rank} X$ и точных решений не осталось вовсе.
Практический вывод звучит почти парадоксально: обучение линейной модели — это работа с заведомо несовместной системой. Мы не ищем $w$, при котором $Xw = y$; мы ищем $w$, при котором $\|Xw - y\|$ минимальна. Ошибка на обучающей выборке не потому ненулевая, что модель «недоучилась», а потому, что точного решения не существует в принципе. Понимание этого сразу лечит от ожидания нулевой ошибки на реальных данных.
Ранг матрицы признаков и вырожденность
Второй сюжет — про $\operatorname{rank} X$. Если среди признаков есть линейно зависимые (рост в сантиметрах и рост в дюймах; доходы супругов и их сумма; one-hot кодирование категории со всеми уровнями сразу плюс константный столбец), то $\operatorname{rank} X$ меньше числа признаков. Матрица $X^TX$ в нормальных уравнениях становится вырожденной, обратной у неё нет, и формула регрессии в наивном виде перестаёт работать.
Что при этом происходит по существу? Задача не исчезает — просто у неё становится бесконечно много одинаково хороших решений. Если признак $x_3$ равен $x_1 + x_2$, то веса $(1, 1, 0)$ и $(0, 0, 1)$ дают ровно одни и те же предсказания. Модель не может выбрать между ними, потому что данные не содержат информации для выбора. Именно поэтому при мультиколлинеарности коэффициенты регрессии становятся неинтерпретируемыми и «прыгают» от одного запуска к другому: алгоритм возвращает какую-то одну точку из бесконечного множества, и какую именно — зависит от численных мелочей.
Отсюда стандартные приёмы: выбросить дублирующий признак, объединить признаки, добавить регуляризацию (гребневая регрессия добавляет $\lambda I$ к $X^TX$ и делает её невырожденной при любом $\lambda > 0$), убрать один уровень при one-hot кодировании (drop_first=True в pandas.get_dummies — это ровно борьба за ранг матрицы признаков).
solve против lstsq: какой когда падает
В NumPy для систем есть две основные функции, и разница между ними ровно та, о которой идёт весь урок.
numpy.linalg.solve(A, b) предназначена для квадратных систем с единственным решением. Она требует, чтобы $A$ была квадратной и невырожденной. Если матрица вырождена, функция не возвращает «приблизительный ответ», а бросает исключение LinAlgError: Singular matrix. Проверить это легко:
import numpy as np
A = np.array([[1., 2., 3.], [2., 4., 6.], [1., 1., 1.]]) # вторая строка = 2 * первой
b = np.array([1., 2., 3.])
np.linalg.solve(A, b) # LinAlgError: Singular matrix
Ошибка тут — не каприз библиотеки, а честное сообщение: «у этой задачи нет единственного решения, а выдавать одно из бесконечного множества или сообщать о несовместности я не умею».
numpy.linalg.lstsq(A, b, rcond=None) устроена иначе. Она принимает матрицу любого размера, включая прямоугольную, и всегда что-то возвращает: вектор, минимизирующий $\|Ax - b\|$. Если система совместна и решение единственно — вернёт его. Если система несовместна — вернёт приближение по методу наименьших квадратов. Если решений бесконечно много — вернёт из них то, у которого наименьшая норма самого $x$. Плюс к вектору решения она отдаёт остаточную сумму квадратов, ранг матрицы и её сингулярные числа — то есть ровно ту диагностику, которая нужна, чтобы понять, с каким случаем ты имеешь дело:
w, residuals, rank, sv = np.linalg.lstsq(X, y, rcond=None)
print(rank, X.shape[1]) # ранг меньше числа признаков -> мультиколлинеарность
Правило выбора простое. Квадратная система, про которую ты уверен, что она невырождена (например, из физической модели с гарантированно независимыми условиями), — solve, он точнее и быстрее. Всё остальное — данные, переопределённые системы, любые ситуации, где ранг под вопросом, — lstsq. Отдельно стоит запомнить: numpy.linalg.inv для решения систем использовать не стоит вообще никогда, но об этом подробнее будет в уроке про матричный метод.
Полезно также помнить про numpy.linalg.matrix_rank(X) — быстрая проверка, не потеряла ли матрица признаков ранг, и scipy.linalg.solve с параметром assume_a='pos' для симметричных положительно определённых матриц вроде $X^TX$.
Честные примеры систем из практики
Балансировка химических реакций. Расставить коэффициенты в реакции — значит решить систему: по одному уравнению на каждый химический элемент, по одной неизвестной на каждое вещество. Для горения пропана $\mathrm{C_3H_8} + \mathrm{O_2} \to \mathrm{CO_2} + \mathrm{H_2O}$ обозначим коэффициенты $x_1, x_2, x_3, x_4$ и запишем баланс по углероду, водороду и кислороду:
$$\begin{cases} 3x_1 = x_3 \\ 8x_1 = 2x_4 \\ 2x_2 = 2x_3 + x_4 \end{cases}$$Три уравнения, четыре неизвестных — система заведомо недоопределена, $r = 3$, свободная переменная одна. Множество решений — прямая, и наименьший целый положительный набор на ней: $(1, 5, 3, 4)$, то есть $\mathrm{C_3H_8} + 5\mathrm{O_2} \to 3\mathrm{CO_2} + 4\mathrm{H_2O}$. Существующие библиотеки балансировки реакций именно это и делают: решают систему и берут минимальное целочисленное решение.
Трилатерация и GPS. Приёмник знает координаты нескольких станций и расстояние до каждой. Уравнения окружностей (в плоском случае) нелинейны из-за квадратов, но, вычитая одно уравнение из другого, квадраты $x^2 + y^2$ сокращаются, и остаётся линейная система. Пусть станции стоят в точках $(0,0)$, $(4,0)$, $(0,3)$, а измеренные расстояния равны $5$, $\sqrt{17}$, $\sqrt{10}$. Вычитая первое уравнение из второго, получаем $-8x + 16 = 17 - 25$, откуда $x = 3$; вычитая первое из третьего, получаем $-6y + 9 = 10 - 25$, откуда $y = 4$. Приёмник находится в точке $(3, 4)$.
В реальном GPS станций (спутников) больше четырёх, измерения зашумлены, и система оказывается переопределённой и несовместной — координаты вычисляются методом наименьших квадратов, ровно как мы обсуждали. Кстати, там же прячется четвёртое неизвестное: сдвиг часов приёмника относительно спутниковых, поэтому минимально нужны четыре спутника, а не три.
Потоки в сетях. Дорожная сеть, трубопровод, электрическая схема, граф передачи данных — везде одна и та же математика. В каждом узле составляется уравнение баланса: сколько втекло, столько и вытекло. Неизвестные — потоки по рёбрам. Если в сети есть замкнутый контур, система оказывается недоопределённой, потому что по контуру можно «прокрутить» циркуляцию, не нарушив ни одного баланса. Для электрических цепей это законы Кирхгофа, и симуляторы схем вроде SPICE в своей сердцевине занимаются именно решением больших разреженных линейных систем.
Межотраслевой баланс. Модель Леонтьева, за которую Василий Леонтьев получил Нобелевскую премию по экономике в 1973 году, — это система $x = Ax + d$, то есть $(I - A)x = d$: сколько каждая отрасль должна произвести, чтобы покрыть и внутреннее потребление других отраслей, и конечный спрос. Для реальной экономики речь идёт о сотнях отраслей, то есть о системе из сотен уравнений.
Почему это важно
Практически всё, что делает численный код в машинном обучении и инженерных расчётах, в конечном счёте сводится к решению линейных систем: обучение линейных моделей, шаг метода Ньютона, интерполяция, решение уравнений в частных производных на сетке, физические симуляции. Именно поэтому решатели линейных систем — самая оптимизированная часть вычислительных библиотек, и именно поэтому понимание того, какая система перед тобой (совместна ли, каков ранг, единственно ли решение), важнее умения быстро крутить преобразования руками: руками всё равно будет считать компьютер, а вот интерпретировать результат придётся тебе.
Практика: 30 заданий
Базовые задания (1–10)
Задание 1. Проверь, является ли набор $(1, 2, -1)$ решением системы
$$\begin{cases} x + y + z = 2 \\ 2x - y + 3z = -3 \\ x + 2y - z = 6 \end{cases}$$Задание 2. Запиши систему $\begin{cases} 3x - 2y = 5 \\ x + 4y = -1 \end{cases}$ в матричной форме $Ax = b$ и выпиши расширенную матрицу.
Задание 3. По расширенной матрице $\left(\begin{array}{ccc|c} 2 & -1 & 3 & 4 \\ 0 & 5 & -1 & 0 \end{array}\right)$ восстанови систему уравнений. Сколько в ней уравнений и сколько неизвестных?
Задание 4. Определи, совместна ли система $\begin{cases} x + y = 3 \\ 2x + 2y = 6 \end{cases}$, и сколько у неё решений.
Задание 5. Определи, совместна ли система $\begin{cases} x + y = 3 \\ 2x + 2y = 7 \end{cases}$.
Задание 6. Классифицируй систему $\begin{cases} x + 2y = 5 \\ 3x - y = 1 \end{cases}$ и найди её решение.
Задание 7. Как расположены на плоскости прямые $2x - 3y = 6$ и $-4x + 6y = 5$? Что это значит для системы из этих двух уравнений?
Задание 8. Для некоторой системы известно: $\operatorname{rank} A = 3$, $\operatorname{rank}[A \mid b] = 3$, число неизвестных $n = 5$. Совместна ли система? Сколько у неё решений и сколько свободных переменных?
Задание 9. Для трёх систем известны ранги. Определи для каждой число решений.
(а) $\operatorname{rank} A = 2$, $\operatorname{rank}[A \mid b] = 3$, $n = 4$.
(б) $\operatorname{rank} A = 4$, $\operatorname{rank}[A \mid b] = 4$, $n = 4$.
(в) $\operatorname{rank} A = 1$, $\operatorname{rank}[A \mid b] = 1$, $n = 3$.
Задание 10. Есть два раствора соли: 30-процентный и 70-процентный. Нужно получить 10 литров 45-процентного раствора. Составь систему уравнений и реши её.
Средние задания (11–20)
Задание 11. Исследуй систему на совместность и запиши общее решение в параметрической форме:
$$\begin{cases} x + 2y - z = 1 \\ 2x + 5y + z = 4 \\ x + 3y + 2z = 3 \end{cases}$$Задание 12. Исследуй ту же систему, но с изменённым третьим уравнением:
$$\begin{cases} x + 2y - z = 1 \\ 2x + 5y + z = 4 \\ x + 3y + 2z = 4 \end{cases}$$Задание 13. Запиши общее решение системы в параметрической форме:
$$\begin{cases} x_1 - x_2 + 2x_3 + x_4 = 1 \\ 2x_1 - 2x_2 + 5x_3 + 3x_4 = 4 \end{cases}$$Задание 14. Расширенная матрица системы приведена к ступенчатому виду:
$$\left(\begin{array}{cccc|c} 1 & 2 & 0 & 3 & 5 \\ 0 & 0 & 1 & -1 & 2 \end{array}\right)$$Укажи базисные и свободные переменные, запиши общее решение. Можно ли выбрать базисными переменные $x_2$ и $x_4$? Если да, запиши решение и в этом варианте.
Задание 15. Определи конфигурацию трёх плоскостей и число решений системы:
$$\begin{cases} x + y + z = 1 \\ x + y + z = 2 \\ x - y = 0 \end{cases}$$Задание 16. Исследуй систему и опиши геометрически множество решений:
$$\begin{cases} x + y + z = 0 \\ 2x - y + z = 3 \\ 3x + 2z = 3 \end{cases}$$Задание 17. Исследуй систему и объясни, почему конфигурация плоскостей называется «призмой»:
$$\begin{cases} x + y = 0 \\ y + z = 0 \\ x + 2y + z = 1 \end{cases}$$Задание 18. При каких значениях параметра $a$ система $\begin{cases} x + y = 1 \\ ax + y = 2 \end{cases}$ имеет единственное решение, при каких — не имеет решений, при каких — бесконечно много?
Задание 19. При каких значениях параметра $a$ система $\begin{cases} 2x + 3y = 5 \\ 4x + 6y = a \end{cases}$ совместна? Сколько у неё решений в этом случае?
Задание 20. В транспортной сети четыре узла $A, B, C, D$, соединённые односторонними участками: $A \to B$ (поток $x_1$), $B \to C$ (поток $x_2$), $C \to D$ (поток $x_3$), $D \to A$ (поток $x_4$). Извне в узел $A$ въезжает 100 машин в час, в узел $B$ — 50 машин в час; из узла $C$ выезжает 120 машин в час, из узла $D$ — 30 машин в час. Составь систему уравнений баланса и найди все допустимые потоки.
Продвинутые задания (21–30)
Задание 21. Исследуй систему при всех значениях параметра $a$:
$$\begin{cases} ax + y + z = 1 \\ x + ay + z = 1 \\ x + y + az = 1 \end{cases}$$Задание 22. При каком значении $b$ система совместна? Запиши в этом случае общее решение.
$$\begin{cases} x + 2y + 3z = 1 \\ 2x + 5y + 8z = 3 \\ 3x + 7y + 11z = b \end{cases}$$Задание 23. Исследуй систему $\begin{cases} 2x + y = a \\ 4x + 2y = b \end{cases}$ при всех значениях букв $a$ и $b$. Существует ли пара $(a, b)$, при которой решение единственно?
Задание 24. Исследуй систему при всех значениях параметра $\lambda$ и найди решение в общем случае:
$$\begin{cases} \lambda x + y + z = 1 \\ x + \lambda y + z = \lambda \\ x + y + \lambda z = \lambda^2 \end{cases}$$Задание 25. Исследуй переопределённую систему и объясни, почему такой результат возможен:
$$\begin{cases} x + y = 2 \\ 2x - y = 1 \\ x + 2y = 3 \end{cases}$$Затем замени правую часть третьего уравнения на 4 и повтори анализ.
Задание 26. Через четыре точки $(0, 1)$, $(1, 2)$, $(2, 5)$, $(3, 12)$ пытаются провести параболу $y = ax^2 + bx + c$. Составь систему, исследуй её и объясни, что делать дальше.
Задание 27. При каких значениях параметра $a$ совместна система
$$\begin{cases} x + 2y = 1 \\ 2x + ay = 2 \\ 3x + 6y = a \end{cases}$$Задание 28. Исследуй систему при всех значениях параметров $a$ и $b$:
$$\begin{cases} x_1 - x_2 + x_3 + x_4 = 1 \\ x_1 - x_2 + 2x_3 + 3x_4 = 2 \\ x_1 - x_2 + 3x_3 + a x_4 = b \end{cases}$$Задание 29. Расставь коэффициенты в реакции горения этана: $\mathrm{C_2H_6} + \mathrm{O_2} \to \mathrm{CO_2} + \mathrm{H_2O}$. Составь систему, объясни, почему у неё бесконечно много решений, и найди наименьший целочисленный набор.
Задание 30 (капстоун, ML). Датасет из пяти наблюдений с тремя признаками, причём третий признак равен сумме первых двух:
$$X = \begin{pmatrix} 1 & 2 & 3 \\ 2 & 1 & 3 \\ 3 & 3 & 6 \\ 0 & 4 & 4 \\ 2 & 2 & 4 \end{pmatrix}, \qquad y = \begin{pmatrix} 5 \\ 4 \\ 9 \\ 8 \\ 7 \end{pmatrix}$$Исследуй систему $Xw = y$. Что изменится, если заменить последнюю компоненту $y$ с 7 на 6?
Частые ошибки
Ошибка 1. Сравнивают ранг матрицы $A$ с числом уравнений $m$, а не с числом неизвестных $n$.
Как выглядит: «ранг равен 2, уравнений три, значит решений бесконечно много». Почему возникает: $m$ и $n$ путаются, потому что в школьных примерах они почти всегда совпадают. Как правильно: совместность определяется сравнением $\operatorname{rank} A$ с $\operatorname{rank}[A \mid b]$, а определённость — сравнением ранга с $n$, числом неизвестных. Число уравнений в критерий не входит вообще.
Ошибка 2. Считают ранг только матрицы $A$ и делают вывод о числе решений.
Как выглядит: «ранг равен 2, неизвестных 3, значит бесконечно много решений» — без проверки расширенной матрицы. Почему возникает: шаг с расширенной матрицей кажется формальностью. Как правильно: пока ранги не сравнены, о числе решений вообще ничего сказать нельзя. При $\operatorname{rank} A = 2 < n = 3$ система может как иметь бесконечно много решений, так и не иметь ни одного — ровно это мы видели в заданиях 16 и 17, где матрица $A$ имела ранг 2 в обоих случаях, а ответы были противоположными.
Ошибка 3. Забывают привести систему к каноническому виду перед выписыванием матрицы.
Как выглядит: из уравнения $3x - 5 = 2y + 1$ берут коэффициенты $(3, 2)$ и свободный член $1$. Почему возникает: матрицу выписывают «по внешнему виду» строки. Как правильно: сначала перенести все неизвестные влево, все числа вправо, привести подобные, и только потом читать коэффициенты. Здесь получится $3x - 2y = 6$, то есть коэффициенты $(3, -2)$ и свободный член 6.
Ошибка 4. Пропускают нули при составлении матрицы.
Как выглядит: уравнение $x + 2z = 5$ в системе с тремя неизвестными записывают строкой $(1, 2 \mid 5)$ вместо $(1, 0, 2 \mid 5)$. Почему возникает: коэффициенты читают подряд по написанным членам. Как правильно: у каждого неизвестного есть своя позиция в строке, и отсутствие члена означает коэффициент 0, а не отсутствие столбца. Проверка простая: длина каждой строки слева от черты обязана равняться $n$.
Ошибка 5. В задаче с параметром делят строку на выражение, не проверив, что оно не равно нулю.
Как выглядит: в системе с параметром $a$ делают преобразование $R_2 \to \frac{1}{a-1}R_2$ и получают один ответ на все значения $a$. Почему возникает: с числами такое деление привычно и безопасно. Как правильно: деление на $(a-1)$ законно только при $a \ne 1$, а случай $a = 1$ обязан разбираться отдельно — и почти всегда именно в нём и находится содержательный ответ (потеря ранга, несовместность или лишние свободные переменные). Хорошая привычка: сразу выписать список «подозрительных» значений параметра, при которых что-то обнуляется, и разобрать каждое.
Ошибка 6. Считают, что если уравнений столько же, сколько неизвестных, то решение обязательно единственно.
Как выглядит: «система три на три, значит ответ один набор чисел». Почему возникает: в школе квадратные системы почти всегда невырождены. Как правильно: при $m = n$ единственность равносильна условию $\det A \ne 0$. Если определитель равен нулю, система при разных правых частях бывает и несовместной, и неопределённой — задание 21 показывает обе возможности для одной и той же матрицы при разных значениях параметра.
Ошибка 7. В общем решении берут не то количество параметров.
Как выглядит: при $n - r = 2$ записывают ответ с одним параметром или, наоборот, вводят три буквы там, где хватило бы двух. Почему возникает: параметры вводят «по числу переменных, которые не удалось выразить», не сверяясь с формулой. Как правильно: количество параметров равно ровно $n - r$. Меньше — потеряется часть решений; больше — одни и те же решения будут описаны многократно, и запись перестанет быть взаимно однозначной.
Ошибка 8. Объявляют базисными произвольные переменные.
Как выглядит: «пусть базисными будут $x_1$ и $x_2$» без проверки, что соответствующие столбцы независимы. Почему возникает: кажется, что раз выбор не единственный, то он произволен. Как правильно: базисными могут быть только такие $r$ переменных, чьи столбцы в матрице коэффициентов независимы (определитель подматрицы из этих столбцов отличен от нуля). В задании 14 такая проверка выполнялась явно.
Ошибка 9. Умножают строку на ноль или «одновременно» заменяют две строки друг через друга.
Как выглядит: $R_1 \to R_1 + R_2$ и $R_2 \to R_2 + R_1$ выполняются в один шаг с использованием новых значений обеих строк. Почему возникает: экономия шагов. Как правильно: элементарное преобразование меняет ровно одну строку, а остальные остаются нетронутыми — только тогда преобразование обратимо и система остаётся эквивалентной. Умножение строки на ноль запрещено по той же причине: оно необратимо и уничтожает ограничение.
Ошибка 10. Воспринимают ответ «решений нет» как признак собственной ошибки.
Как выглядит: получив строку $(0, \dots, 0 \mid c)$ с ненулевым $c$, начинают заново пересчитывать всю систему. Почему возникает: школьная привычка, что у задачи всегда есть ответ. Как правильно: несовместность — это полноценный ответ, причём для систем из реальных измерений это ответ по умолчанию. Пересчитывать имеет смысл ровно один раз, для проверки арифметики, а дальше нужно писать «система несовместна» и, если задача прикладная, переходить к приближённому решению.
Главное запомнить
-
Система $m$ линейных уравнений с $n$ неизвестными записывается в матричной форме как $Ax = b$, где $A$ — матрица коэффициентов размера $m \times n$; расширенная матрица $[A \mid b]$ получается приписыванием столбца свободных членов справа.
-
Решение системы — упорядоченный набор из $n$ чисел, обращающий в верное равенство каждое уравнение одновременно.
-
Система бывает несовместной (решений нет), совместной определённой (ровно одно решение) и совместной неопределённой (бесконечно много). Конечного числа решений, большего единицы, у линейной системы не бывает: если решений два, то их сразу бесконечно много.
-
Теорема Кронекера — Капелли: система совместна тогда и только тогда, когда $\operatorname{rank} A = \operatorname{rank}[A \mid b]$.
-
Полный ответ про число решений: $r \ne \tilde{r}$ — решений нет; $r = \tilde{r} = n$ — ровно одно; $r = \tilde{r} < n$ — бесконечно много, с $n - r$ свободными переменными.
-
Содержательная причина работы теоремы: решить $Ax = b$ — значит собрать столбец $b$ из столбцов матрицы $A$ с какими-то множителями. Если $b$ собирается, приписывание его к матрице ранг не меняет; если не собирается, ранг растёт на единицу.
-
Базисные переменные — те, что стоят в столбцах с пивотами (их $r$ штук); свободные — все остальные (их $n - r$). Свободным присваивают произвольные значения, базисные вычисляют через них.
-
Общее решение — формула с $n - r$ параметрами, описывающая все решения сразу; частное решение — один конкретный набор чисел, получающийся при конкретных значениях параметров.
-
Выбор базисных переменных не единственный, но и не произволен: соответствующие столбцы обязаны быть независимыми. Разные допустимые выборы дают разные по виду формулы, описывающие одно и то же множество.
-
Элементарные преобразования строк расширенной матрицы (перестановка, умножение на ненулевое число, прибавление кратной строки) переводят систему в эквивалентную — множество решений не меняется. Именно это и делает законным решение системы через приведение матрицы к ступенчатому виду.
-
Если $m < n$ (недоопределённая система), единственного решения не бывает никогда: система либо несовместна, либо имеет бесконечно много решений.
-
Если $m > n$ (переопределённая система), совместность — редкое исключение, требующее точного согласования правых частей. Реальные данные с шумом дают несовместную систему почти всегда, и правильная реакция на это — метод наименьших квадратов, то есть поиск набора чисел с минимальной невязкой.
-
Геометрически множество решений — это точка, прямая, плоскость или их многомерный аналог; несовместность означает, что фигуры разъехались и общих точек нет (параллельные плоскости или «призма»).
-
В коде:
numpy.linalg.solveработает только с квадратной невырожденной матрицей и падает сLinAlgErrorв противном случае;numpy.linalg.lstsqработает всегда, возвращая решение по методу наименьших квадратов, и заодно сообщает ранг матрицы.
Связь с другими темами курса
Что нужно было знать до этого урока
Из урока про операции над матрицами (157) взято умножение матрицы на столбец — без него запись $Ax = b$ не имеет смысла, а разложение $Ax = x_1A_1 + \dots + x_nA_n$, на котором держится всё объяснение теоремы Кронекера — Капелли, просто нельзя было бы выписать.
Из уроков про определители (158–160) взят критерий $\det A \ne 0$ для квадратных систем: он даёт самый быстрый способ различить случаи «единственное решение» и «надо разбираться отдельно», и именно определитель мы приравнивали к нулю в задачах с параметром, чтобы найти подозрительные значения.
Из урока про обратную матрицу (161) взяты нормальные уравнения линейной регрессии и разговор про мультиколлинеарность — сегодня они получили точную формулировку на языке рангов: несовместная переопределённая система и вырожденная матрица $X^TX$.
Из урока про ранг матрицы (162) взято практически всё техническое оснащение: понятие ранга, элементарные преобразования, ступенчатый вид, подсчёт ненулевых строк. Сегодня ранг из характеристики таблицы чисел превратился в инструмент, отвечающий на вопрос о числе решений.
Из уроков про векторы (151–155) взята геометрия: уравнение плоскости, вектор нормали, взаимное расположение прямых и плоскостей. Именно оттуда берётся картинка, стоящая за словами «книжка» и «призма».
Что изучить дальше
Урок 164, метод Гаусса — полноценный алгоритм решения: прямой ход (приведение к ступенчатому виду), обратный ход (вычисление неизвестных снизу вверх), модификация Гаусса — Жордана, выбор ведущего элемента для численной устойчивости и оценка вычислительной сложности. Сегодня ты понял, что бывает; там ты научишься надёжно доходить до ответа.
Урок 165, правило Крамера — формулы, выражающие решение квадратной невырожденной системы через определители, их вывод и границы применимости.
Урок 166, матричный метод — решение через $x = A^{-1}b$, случай нескольких правых частей и понятие обусловленности матрицы: почему одна система решается устойчиво, а другая рассыпается от округлений.
Урок 167, однородные системы — важнейший частный случай $Ax = 0$, где правая часть нулевая. Такая система совместна всегда (нулевой набор подходит), и весь вопрос в том, есть ли у неё ненулевые решения. Множество её решений устроено особенно красиво и напрямую связано со структурой общего решения обычной системы.
Уроки 168–170, векторные пространства, линейная зависимость и базис — там понятия «собрать столбец из других столбцов», «независимые направления» и «базисные переменные», которыми мы сегодня пользовались на интуитивном уровне, получат строгую общую формулировку.
Где это нужно в жизни
💻 Программирование. Решатели линейных систем — фундамент вычислительных библиотек: LAPACK, BLAS, numpy.linalg, scipy.linalg, torch.linalg. Разреженные системы (где почти все коэффициенты нулевые) решают отдельными методами и встречают их в симуляторах электрических схем, движках физики, рендеринге и расчётах прочности конструкций.
🤖 ML/AI. Линейная регрессия — это несовместная система $Xw = y$, решаемая методом наименьших квадратов. Ранг матрицы признаков говорит о мультиколлинеарности; недоопределённые системы (признаков больше, чем наблюдений) — причина, по которой нужна регуляризация. Шаг метода Ньютона и оптимизаторы второго порядка на каждой итерации решают линейную систему с матрицей Гессе.
📊 Data Science. Балансировка данных, восстановление пропусков, калибровка моделей, реконструкция сигналов и томография — все эти задачи ставятся как линейные системы, часто заведомо несовместные или недоопределённые, и решаются с дополнительными критериями выбора.
🔬 Наука. Балансировка химических реакций, расчёт равновесия сил в механике, законы Кирхгофа в электротехнике, определение орбит небесных тел по наблюдениям (та самая задача Гаусса о Церере), кристаллография, обработка данных спектроскопии.
💰 Финансы. Модель межотраслевого баланса Леонтьева, построение портфелей с заданными характеристиками, калибровка процентных кривых по рыночным котировкам, распределение затрат между подразделениями компании — везде системы линейных уравнений, часто переопределённые и решаемые приближённо.
Интересные факты
-
В древнекитайском трактате «Цзю чжан суань шу» (около II века до нашей эры) системы линейных уравнений решались методом исключения по таблице коэффициентов — то есть за два тысячелетия до Гаусса и почти за два тысячелетия до появления самого понятия матрицы. Более того, в этой же главе встречаются отрицательные числа с правилами действий над ними — заметно раньше, чем они были приняты в европейской математике.
-
Теорема о совместности системы имеет разные имена в разных странах: в России её называют теоремой Кронекера — Капелли, в Испании и Латинской Америке — теоремой Руше — Фробениуса, во Франции — теоремой Руше — Фонтене, в Италии — теоремой Руше — Капелли. Причина в том, что близкие результаты были получены независимо Эженом Руше, Жоржем Фонтене, Фердинандом Фробениусом и Альфредо Капелли в промежутке между 1875 и 1892 годами.
-
Задача о поиске Цереры, которую Гаусс решил в 1801 году, была именно переопределённой несовместной системой: наблюдений больше, чем параметров орбиты, и точного согласования между ними нет из-за погрешностей измерений. Метод наименьших квадратов, придуманный ради неё, сегодня работает в каждой обученной линейной модели.
-
Одна из крупнейших линейных систем, решаемых на практике, возникает в численном прогнозе погоды и в задачах вычислительной гидродинамики: количество неизвестных там доходит до сотен миллиардов. Такие системы никогда не решают точными методами вроде исключения — только итерационными, которые приближаются к ответу шаг за шагом и не требуют хранить всю матрицу.
-
Алгоритм PageRank, с которого начался поисковик Google, по сути сводится к нахождению решения огромной линейной системы: вес страницы определяется как взвешенная сумма весов ссылающихся на неё страниц. Число неизвестных здесь равно числу страниц в интернете, а матрица чудовищно разрежена — в среднем у страницы лишь десятки исходящих ссылок при миллиардах столбцов.
Лайфхаки и полезные трюки
-
Сначала посчитай ранги, потом решай. Приведи расширенную матрицу к ступенчатому виду и посмотри на картину целиком: сколько ненулевых строк слева, сколько справа, каково $n$. Ты получишь ответ про число решений раньше, чем начнёшь что-то выражать, и дальше будешь считать, зная, что должно получиться. Пример: увидев в ступенчатом виде две ненулевые строки при трёх неизвестных и согласованной правой части, ты сразу знаешь, что в ответе будет ровно один параметр.
-
Ищи строку вида $(0,\dots,0 \mid c)$ — это стоп-сигнал. Как только такая строка с ненулевым $c$ появилась, дальше можно не считать: система несовместна. И наоборот, строка из одних нулей, включая свободный член, означает, что одно из уравнений было следствием остальных, — её просто вычёркивают.
-
Соотношение $m$ и $n$ смотри в первую очередь. Если уравнений меньше, чем неизвестных, единственного решения точно не будет — не трать время на его поиск. Если уравнений больше, готовься к несовместности и заранее подумай, нужен ли тебе приближённый ответ. Пример: увидев систему из 5 уравнений с 2 неизвестными, разумно сразу решить первые два уравнения и подставить результат в остальные — это быстрее, чем гнать полную редукцию.
-
В задачах с параметром сначала выпиши список «плохих» значений. Приравняй к нулю определитель (для квадратной системы) или все выражения, на которые собираешься делить, и получишь короткий список подозрительных точек. Дальше разбирай общий случай и каждую точку из списка отдельно. Пример: в задании 21 таких точек оказалось две, $a = 1$ и $a = -2$, и ответы в них были прямо противоположными — бесконечно много решений против полного их отсутствия.
-
Выбирай свободные переменные так, чтобы поменьше возиться с дробями. Если общее решение выходит с дробными коэффициентами вроде $z/3$, введи параметр с масштабом: положи $z = 3s$ вместо $z = s$. Ответ станет заметно чище — сравни $(1 - \frac{2t}{3},\ -1 - \frac{t}{3},\ t)$ и $(1 - 2s,\ -1 - s,\ 3s)$ из задания 16.
-
Всегда подставляй ответ обратно, причём в то уравнение, которое обнулилось. Уравнения, которые ты использовал при выражении переменных, выполнятся автоматически — проверять их бесполезно. А вот «схлопнувшаяся» строка ничем не защищена, и подстановка общего решения в исходное уравнение с параметром $t$ ловит ошибку мгновенно: если после раскрытия скобок члены с $t$ не сократились, где-то арифметическая описка.
-
Прикидывай геометрию, чтобы поймать бессмысленный ответ. Три плоскости не могут пересекаться ровно в двух точках, две прямые на плоскости — по отрезку, а совместная система с $m < n$ не может иметь единственного решения. Если результат противоречит такой прикидке, ошибка почти наверняка в вычислениях, а не в теории.
-
В коде используй
lstsqпо умолчанию иmatrix_rankдля диагностики.solveбросает исключение на вырожденной матрице и не даёт никакой информации о том, что именно пошло не так;lstsqвозвращает и решение, и ранг, и остаточную невязку — по этим трём числам сразу видно, с каким из трёх случаев теоремы Кронекера — Капелли ты имеешь дело.
Системы линейных уравнений — редкая тема, где школьный опыт скорее мешает, чем помогает. В школе система была задачей с единственным правильным ответом, и любой другой исход означал ошибку. Теперь картина другая: ответ «решений бесконечно много» — это описание целого множества, которое надо уметь записать; ответ «решений нет» — это содержательный факт о данных, а не приговор вычислениям. Ранг стал прибором, который заранее говорит, какой из трёх исходов тебя ждёт. Осталось научиться доводить дело до конца надёжно и быстро — этим и займёмся в следующем уроке, разбирая метод Гаусса как полноценный алгоритм.
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку