Правило Крамера 📐
У тебя уже есть рабочий инструмент для решения систем линейных уравнений — метод Гаусса. Он универсален, он работает для любых размеров, он не боится прямоугольных систем и бесконечных семейств решений. Казалось бы, вопрос закрыт: бери и решай. Но есть класс задач, где Гаусс отвечает не на тот вопрос, который тебя интересует.
Представь, что тебе нужна не «система решена», а формула: как именно неизвестная $x_1$ зависит от правой части? Что произойдёт с решением, если один коэффициент чуть-чуть изменится? При каких значениях параметра решение вообще существует? Метод Гаусса, прогнанный до конца с конкретными числами, даёт ответ-число и стирает всю структуру задачи. А иногда нужна не точка, а зависимость.
Правило Крамера отвечает именно на этот запрос. Оно записывает каждую неизвестную квадратной системы как отношение двух определителей — и никакой пошаговой процедуры, никакого «прямого и обратного хода», просто формула, в которую подставляются коэффициенты. Из такой формулы сразу видно, от чего решение зависит, где оно взрывается, и что случится при малом изменении данных.
У этой красоты есть цена, и она чудовищная. Наивно посчитанное правило Крамера для системы из 20 уравнений потребует такого количества операций, что современный процессор будет считать его тысячи лет — при том, что метод Гаусса справится за пять микросекунд. Мы посчитаем эти числа честно, в конце урока, и ты увидишь, почему ни в одной серьёзной библиотеке — ни в NumPy, ни в SciPy, ни в PyTorch — правило Крамера не реализовано как решатель систем.
Так зачем оно тогда нужно? Затем же, зачем нужна формула корней квадратного уравнения, когда есть численные методы: она не быстрее, но она говорит. Правило Крамера — это способ понимать структуру решения, доказывать теоремы, выводить формулы в аналитическом виде (в том числе ту самую формулу наклона прямой из метода наименьших квадратов, которую ты видел в любом учебнике по статистике) и решать в уме системы $2\times2$ и $3\times3$, не разводя писанину с элементарными преобразованиями.
И ещё одно. Именно правило Крамера даёт самый выпуклый ответ на вопрос, который в методе Гаусса тонет в технике: что означает вырожденность системы. Когда главный определитель равен нулю, формула Крамера ломается — и то, как именно она ломается, оказывается точным диагнозом состояния системы. Разбор этого случая — самая тонкая часть урока, и именно на нём срезается больше всего людей.
🎯 Ты узнаешь:
-
как правило Крамера выводится из свойств определителей, а не берётся с неба — и почему алгебраические дополнения умеют «вытаскивать» ровно одну неизвестную;
-
как быстро решать системы $2\times2$ и $3\times3$ через отношения определителей, не прибегая к элементарным преобразованиям;
-
что означает главный определитель геометрически: площадь параллелограмма, объём параллелепипеда и решение как отношение объёмов;
-
что делать, когда $\Delta = 0$, и почему случай «все $\Delta_i$ тоже нули» не даёт вообще никакой информации о системе;
-
сколько на самом деле стоит правило Крамера в операциях — с точными числами для $n = 10$ и $n = 20$ и переводом в секунды и годы;
-
где правило Крамера остаётся незаменимым: буквенные системы, анализ чувствительности решения к коэффициентам, вывод аналитических формул;
-
почему определители всё-таки живут в машинном обучении — в нормировке многомерного нормального распределения, в
torch.slogdetи в нормализующих потоках, — хотя решателем систем правило Крамера так и не стало.
История: откуда это взялось?
Габриэль Крамер (1704–1752) — женевский математик, профессор Женевской академии, человек с репутацией блестящего популяризатора и добросовестного редактора чужих трудов (он готовил к изданию наследие семейства Бернулли). В 1750 году он выпустил книгу «Introduction à l'analyse des lignes courbes algébriques» — «Введение в анализ алгебраических кривых». Тема книги — вовсе не системы уравнений, а геометрия кривых. Но в первом приложении к книге Крамер решает вспомогательную задачу: как провести алгебраическую кривую заданного порядка через заданный набор точек? Каждая точка даёт одно линейное уравнение на коэффициенты кривой — и получается система, которую надо решить.
Именно там, в приложении, и появляется правило, носящее его имя: неизвестные выражаются как отношения величин, которые Крамер строил комбинаторно, без слова «определитель» (термин ещё не существовал) и, что важно, без доказательства. Он просто описал схему построения числителей и знаменателей и предъявил её как рецепт.
Приоритет здесь не бесспорен. Шотландский математик Колин Маклорен (1698–1746) изложил по существу то же правило для систем из двух и трёх уравнений в «Treatise of Algebra», изданном посмертно в 1748 году; рукописные заметки Маклорена, содержащие это правило, датируются примерно 1729 годом — то есть более чем за двадцать лет до книги Крамера. Историки математики (в частности, Карл Бойер в статье 1966 года) специально разбирали этот сюжет и пришли к выводу, что имя за правилом закрепилось за Крамером не по праву первенства, а по праву удобной нотации и широкого распространения его книги.
Ещё раньше идея мелькала у Готфрида Лейбница: в письме к Лопиталю от 1693 года он описывал условие совместности системы линейных уравнений через комбинаторные выражения, которые сегодня мы узнали бы как определители. Письмо не было опубликовано при жизни Лейбница и на развитие темы не повлияло. А совершенно независимо от европейцев японский математик Сэки Такакадзу примерно в 1683 году ввёл в трактате «Kai Fukudai no Ho» конструкцию, эквивалентную определителю, для исключения неизвестных из системы уравнений.
Слово «определитель» (déterminant) в современном смысле ввёл Огюстен Луи Коши в мемуаре 1812 года (опубликован в 1815-м); Карл Фридрих Гаусс использовал термин раньше, в «Disquisitiones Arithmeticae» 1801 года, но для другого объекта — дискриминанта квадратичной формы. Компактную запись через вертикальные черты и всю привычную нам алгебру определителей достроили уже во второй половине XIX века Кэли, Сильвестр и Фробениус.
Отдельная и очень поучительная история — парадокс Крамера. Алгебраическая кривая порядка $n$ на плоскости задаётся $\dfrac{n(n+3)}{2}$ точками: для прямой ($n=1$) это две точки, для коники ($n=2$) — пять, для кубики ($n=3$) — девять. Но по теореме Безу две кривые порядка $n$ пересекаются в $n^2$ точках, и для $n = 3$ это тоже девять. Получается противоречие: девять точек должны определять кубику однозначно, но через девять точек пересечения двух разных кубик проходят как минимум две разные кривые. Крамер обсуждал этот парадокс в переписке с Леонардом Эйлером в 1744–1750 годах; Эйлер разрешил его, заметив, что в таких особых конфигурациях уравнения системы перестают быть независимыми — часть из них оказывается следствием остальных. На современном языке это ровно про ранг матрицы системы: девять уравнений могут иметь ранг меньше девяти. То есть уже сам автор правила упёрся в тот самый случай $\Delta = 0$, разбору которого посвящён отдельный раздел этого урока.
Постановка: квадратная система и главный определитель
Правило Крамера работает в одной-единственной ситуации, и её нужно зафиксировать сразу, потому что половина ошибок берётся из попытки применить формулу там, где она неприменима.
Рассматриваем систему из $n$ линейных уравнений с $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 \\ \ \ \vdots \\ a_{n1}x_1 + a_{n2}x_2 + \dots + a_{nn}x_n = b_n \end{cases}$$В матричной записи, которая тебе уже знакома, это $Ax = b$, где $A$ — квадратная матрица коэффициентов размера $n \times n$, $x$ — столбец неизвестных, $b$ — столбец свободных членов.
Определение: Главным определителем системы называется определитель матрицы коэффициентов:
$$\Delta = \det A = \begin{vmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \dots & a_{nn} \end{vmatrix}$$
Определение: Вспомогательным определителем $\Delta_i$ называется определитель матрицы, полученной из $A$ заменой её $i$-го столбца на столбец свободных членов $b$:
$$\Delta_i = \begin{vmatrix} a_{11} & \dots & b_1 & \dots & a_{1n} \\ a_{21} & \dots & b_2 & \dots & a_{2n} \\ \vdots & & \vdots & & \vdots \\ a_{n1} & \dots & b_n & \dots & a_{nn} \end{vmatrix} \quad (\text{столбец } b \text{ стоит на } i\text{-м месте})$$
Всего таких вспомогательных определителей ровно $n$ — по одному на каждую неизвестную. Вместе с главным получается $n + 1$ определитель, и это число нам ещё пригодится, когда мы будем считать стоимость метода.
Три момента, которые стоит проговорить сразу.
Столбец, а не строка. Заменяется именно столбец, потому что $i$-й столбец матрицы $A$ — это в точности набор коэффициентов при неизвестной $x_i$ во всех уравнениях. Замена строки не имеет никакого смысла и является самой массовой механической ошибкой в этой теме.
Матрица $A$ каждый раз исходная. Строя $\Delta_2$, ты берёшь оригинальную $A$ и заменяешь в ней второй столбец — а не ту матрицу, в которой уже заменён первый. Определители строятся независимо друг от друга.
Порядок неизвестных зафиксирован. Прежде чем что-либо считать, система должна быть приведена к каноническому виду: все неизвестные слева в одном и том же порядке, свободные члены справа, пропущенные неизвестные записаны с нулевыми коэффициентами. Уравнение $3z - 2 = x$ в системе с порядком $(x, y, z)$ даёт строку коэффициентов $(-1,\ 0,\ 3)$ и свободный член $2$ — и никак иначе.
Вывод правила Крамера
Формулу Крамера можно просто заявить, но тогда она останется магией. Давай выведем её честно — сначала на случае $2\times2$, где всё видно руками, потом в общем виде, где работает тот самый механизм с алгебраическими дополнениями.
Интуиция: как «вытащить» ровно одну неизвестную
Идея решения любой системы — исключение. Мы комбинируем уравнения так, чтобы все неизвестные, кроме одной, взаимно уничтожились. В методе Гаусса это делается пошагово: обнулили один столбец, обнулили следующий, дошли до треугольного вида. Правило Крамера делает то же самое, но за один ход: подбирает такие множители для уравнений, что после сложения от всей системы остаётся ровно одно слагаемое с нужной неизвестной.
Вопрос в том, где взять эти множители. И вот здесь вступают в игру алгебраические дополнения из урока 160: оказывается, что нужные множители — это в точности алгебраические дополнения элементов того столбца, который отвечает за интересующую нас неизвестную. Ниже мы увидим, почему это работает: коэффициент при «лишней» неизвестной оказывается определителем матрицы с двумя одинаковыми столбцами, а такой определитель по свойству из урока 159 равен нулю.
Случай 2×2 руками
Возьмём систему
$$\begin{cases} a_{11}x_1 + a_{12}x_2 = b_1 \\ a_{21}x_1 + a_{22}x_2 = b_2 \end{cases}$$Хотим избавиться от $x_2$. Умножим первое уравнение на $a_{22}$, второе — на $-a_{12}$ и сложим:
$$a_{22}(a_{11}x_1 + a_{12}x_2) - a_{12}(a_{21}x_1 + a_{22}x_2) = a_{22}b_1 - a_{12}b_2$$Слева раскрываем скобки:
$$(a_{11}a_{22} - a_{12}a_{21})\,x_1 + (a_{12}a_{22} - a_{12}a_{22})\,x_2 = a_{22}b_1 - a_{12}b_2$$Коэффициент при $x_2$ обнулился — множители были подобраны именно для этого. Остаётся:
$$(a_{11}a_{22} - a_{12}a_{21})\,x_1 = b_1a_{22} - b_2a_{12}$$Слева в скобках стоит $\Delta = \det A$. Справа — определитель $\begin{vmatrix} b_1 & a_{12} \\ b_2 & a_{22} \end{vmatrix}$, то есть матрица $A$ с первым столбцом, заменённым на $b$. Это и есть $\Delta_1$. Итого при $\Delta \ne 0$:
$$x_1 = \frac{\Delta_1}{\Delta}$$Симметрично, умножив первое уравнение на $-a_{21}$, второе на $a_{11}$ и сложив, получим $(a_{11}a_{22} - a_{12}a_{21})x_2 = a_{11}b_2 - a_{21}b_1$, то есть $x_2 = \Delta_2/\Delta$, где $\Delta_2 = \begin{vmatrix} a_{11} & b_1 \\ a_{21} & b_2 \end{vmatrix}$.
Обрати внимание на множители, которые пришлось подобрать: чтобы вытащить $x_1$, мы взяли $(a_{22},\ -a_{12})$ — это в точности алгебраические дополнения $A_{11}$ и $A_{21}$ элементов первого столбца. Чтобы вытащить $x_2$ — $(-a_{21},\ a_{11})$, то есть $A_{12}$ и $A_{22}$, алгебраические дополнения второго столбца. Это не совпадение, а общий закон.
Общий случай: алгебраические дополнения делают всю работу
Пусть система $Ax = b$ имеет $n$ уравнений и $n$ неизвестных, и мы хотим выразить неизвестную с номером $k$. Обозначим через $A_{ik}$ алгебраическое дополнение элемента $a_{ik}$ матрицы $A$ (напомню обозначение из урока 160: это минор $M_{ik}$ со знаком $(-1)^{i+k}$).
Шаг 1. Умножим $i$-е уравнение системы на $A_{ik}$ и сложим все получившиеся уравнения по $i$ от $1$ до $n$:
$$\sum_{i=1}^{n} A_{ik}\left(\sum_{j=1}^{n} a_{ij}x_j\right) = \sum_{i=1}^{n} A_{ik}\,b_i$$Шаг 2. В левой части меняем порядок суммирования — сначала по $i$, потом по $j$:
$$\sum_{j=1}^{n} x_j \left(\sum_{i=1}^{n} a_{ij}A_{ik}\right) = \sum_{i=1}^{n} A_{ik}\,b_i$$Вся суть выведена в скобку. Разберёмся, чему равна внутренняя сумма $S_{jk} = \sum_{i} a_{ij}A_{ik}$.
Шаг 3. Посмотри на неё внимательно: это сумма произведений элементов $j$-го столбца матрицы $A$ на алгебраические дополнения $k$-го столбца. Из урока 160 ты знаешь формулу разложения определителя по столбцу: если бы индексы совпадали ($j = k$), мы бы получили ровно разложение $\det A$ по $k$-му столбцу:
$$S_{kk} = \sum_{i=1}^{n} a_{ik}A_{ik} = \det A = \Delta$$А что если $j \ne k$? Тогда мы всё ещё считаем разложение по $k$-му столбцу — но подставляем туда «чужие» числа, элементы $j$-го столбца. Разложение по столбцу нечувствительно к тому, что стоит в самом этом столбце: алгебраические дополнения $A_{ik}$ вычисляются вычёркиванием $k$-го столбца и от его содержимого не зависят. Значит, сумма $S_{jk}$ — это определитель матрицы, полученной из $A$ заменой $k$-го столбца на копию $j$-го столбца. В такой матрице два одинаковых столбца (на месте $j$ стоит $j$-й столбец, и на месте $k$ стоит он же), а определитель матрицы с двумя одинаковыми столбцами равен нулю — это свойство определителей из урока 159. Итого:
$$S_{jk} = \begin{cases} \Delta, & j = k \\ 0, & j \ne k \end{cases}$$Шаг 4. Подставляем это в равенство из шага 2. Из всей суммы по $j$ выживает единственное слагаемое — то, где $j = k$:
$$x_k \cdot \Delta = \sum_{i=1}^{n} A_{ik}\,b_i$$Шаг 5. Осталось понять, что стоит справа. Сумма $\sum_i b_i A_{ik}$ — это опять разложение по $k$-му столбцу, но теперь в этот столбец подставлены свободные члены $b_i$. То есть справа стоит определитель матрицы $A$, у которой $k$-й столбец заменён на столбец $b$. А это в точности $\Delta_k$:
$$x_k\,\Delta = \Delta_k$$Шаг 6. Если $\Delta \ne 0$, делим на него и получаем формулу.
Правило Крамера. Если главный определитель квадратной системы $Ax = b$ отличен от нуля, то система имеет единственное решение, и оно задаётся формулами
$$x_i = \frac{\Delta_i}{\Delta}, \qquad i = 1, 2, \dots, n$$где $\Delta = \det A$, а $\Delta_i$ — определитель матрицы $A$ с $i$-м столбцом, заменённым на столбец свободных членов.
Пара слов о логике доказательства, чтобы не осталось дыр. Шаги 1–5 показывают: если решение существует, то оно обязано иметь именно такой вид — то есть решение единственно. Существование решения при $\Delta \ne 0$ доказывать отдельно не нужно: из $\Delta \ne 0$ следует $\operatorname{rank} A = n$, а значит и $\operatorname{rank}[A \mid b] = n$ (больше $n$ ранг быть не может), и по теореме Кронекера — Капелли из урока 163 система совместна и определённа. Можно и прямо: подстановка найденных $x_i$ в систему обращает каждое уравнение в тождество — проверка проводится ровно теми же выкладками, только в обратном порядке.
Почему это важно
Заметь, насколько экономно устроен этот вывод. Мы не решали систему — мы сконструировали комбинацию уравнений, в которой все неизвестные, кроме одной, обязаны исчезнуть, причём исчезнуть не в силу удачных чисел, а в силу структурного свойства определителя: два одинаковых столбца дают ноль. Каждая неизвестная получает свою собственную комбинацию, независимую от остальных, — поэтому правило Крамера умеет находить одну неизвестную, не вычисляя остальные. Ни один другой метод решения систем так не умеет.
Правило Крамера в действии: 2×2 и 3×3
Общая формула красива, но работать руками ты будешь почти всегда с системами двух и трёх уравнений. Выпишем для них всё явно.
Система 2×2
$$\begin{cases} a_1x + b_1y = c_1 \\ a_2x + b_2y = c_2 \end{cases}$$$$\Delta = \begin{vmatrix} a_1 & b_1 \\ a_2 & b_2 \end{vmatrix} = a_1b_2 - a_2b_1, \qquad \Delta_x = \begin{vmatrix} c_1 & b_1 \\ c_2 & b_2 \end{vmatrix} = c_1b_2 - c_2b_1, \qquad \Delta_y = \begin{vmatrix} a_1 & c_1 \\ a_2 & c_2 \end{vmatrix} = a_1c_2 - a_2c_1$$$$x = \frac{\Delta_x}{\Delta}, \qquad y = \frac{\Delta_y}{\Delta} \qquad (\Delta \ne 0)$$Это ровно те три определителя $2\times2$, которые считаются по формуле «крест-накрест» из урока 158. Полное решение системы двух уравнений — три умножения-вычитания и два деления. Быстрее в уме уже некуда.
Система 3×3
$$\begin{cases} a_1x + b_1y + c_1z = d_1 \\ a_2x + b_2y + c_2z = d_2 \\ a_3x + b_3y + c_3z = d_3 \end{cases}$$$$\Delta = \begin{vmatrix} a_1 & b_1 & c_1 \\ a_2 & b_2 & c_2 \\ a_3 & b_3 & c_3 \end{vmatrix}, \qquad \Delta_x = \begin{vmatrix} d_1 & b_1 & c_1 \\ d_2 & b_2 & c_2 \\ d_3 & b_3 & c_3 \end{vmatrix}$$$$\Delta_y = \begin{vmatrix} a_1 & d_1 & c_1 \\ a_2 & d_2 & c_2 \\ a_3 & d_3 & c_3 \end{vmatrix}, \qquad \Delta_z = \begin{vmatrix} a_1 & b_1 & d_1 \\ a_2 & b_2 & d_2 \\ a_3 & b_3 & d_3 \end{vmatrix}$$$$x = \frac{\Delta_x}{\Delta}, \qquad y = \frac{\Delta_y}{\Delta}, \qquad z = \frac{\Delta_z}{\Delta} \qquad (\Delta \ne 0)$$Четыре определителя третьего порядка — по правилу Саррюса или разложением по строке, как тебе удобнее (уроки 158 и 160). Практический совет: столбец $d$ всегда «переезжает» на место того столбца, чью неизвестную мы ищем, а остальные два столбца остаются на своих местах в том же порядке. Если держать это в голове как шаблон, переписывание матриц перестаёт быть источником ошибок.
Разбор примеров
Пример 1. Простая система 2×2.
$$\begin{cases} 4x + 3y = 18 \\ 2x - y = 4 \end{cases}$$Главный определитель:
$$\Delta = \begin{vmatrix} 4 & 3 \\ 2 & -1 \end{vmatrix} = 4\cdot(-1) - 2\cdot 3 = -4 - 6 = -10 \ne 0$$Определитель не равен нулю — правило Крамера применимо, решение существует и единственно.
$$\Delta_x = \begin{vmatrix} 18 & 3 \\ 4 & -1 \end{vmatrix} = 18\cdot(-1) - 4\cdot 3 = -18 - 12 = -30$$$$\Delta_y = \begin{vmatrix} 4 & 18 \\ 2 & 4 \end{vmatrix} = 4\cdot 4 - 2\cdot 18 = 16 - 36 = -20$$$$x = \frac{-30}{-10} = 3, \qquad y = \frac{-20}{-10} = 2$$Проверка подстановкой: $4\cdot3 + 3\cdot2 = 12 + 6 = 18$ ✓, $2\cdot3 - 2 = 4$ ✓.
Пример 2. Ответ не обязан быть целым.
$$\begin{cases} 2x + 3y = 4 \\ 4x - y = 1 \end{cases}$$$$\Delta = \begin{vmatrix} 2 & 3 \\ 4 & -1 \end{vmatrix} = -2 - 12 = -14$$$$\Delta_x = \begin{vmatrix} 4 & 3 \\ 1 & -1 \end{vmatrix} = -4 - 3 = -7, \qquad \Delta_y = \begin{vmatrix} 2 & 4 \\ 4 & 1 \end{vmatrix} = 2 - 16 = -14$$$$x = \frac{-7}{-14} = \frac{1}{2}, \qquad y = \frac{-14}{-14} = 1$$Проверка: $2\cdot\tfrac12 + 3 = 1 + 3 = 4$ ✓, $4\cdot\tfrac12 - 1 = 2 - 1 = 1$ ✓. Дробные ответы — норма: знаменатель у всех неизвестных один и тот же, это $\Delta$, поэтому дроби всегда приводятся к общему знаменателю сами собой.
Пример 3. Система 3×3 с целым ответом.
$$\begin{cases} 2x + y - z = 1 \\ 3x + 2y + 2z = 13 \\ x - y + 3z = 8 \end{cases}$$Главный определитель раскроем разложением по первой строке:
$$\Delta = \begin{vmatrix} 2 & 1 & -1 \\ 3 & 2 & 2 \\ 1 & -1 & 3 \end{vmatrix} = 2\begin{vmatrix} 2 & 2 \\ -1 & 3\end{vmatrix} - 1\begin{vmatrix} 3 & 2 \\ 1 & 3\end{vmatrix} + (-1)\begin{vmatrix} 3 & 2 \\ 1 & -1\end{vmatrix}$$$$= 2(6 + 2) - (9 - 2) - (-3 - 2) = 16 - 7 + 5 = 14 \ne 0$$Теперь три вспомогательных. Заменяем первый столбец на $(1, 13, 8)$:
$$\Delta_x = \begin{vmatrix} 1 & 1 & -1 \\ 13 & 2 & 2 \\ 8 & -1 & 3 \end{vmatrix} = 1(6+2) - 1(39 - 16) + (-1)(-13 - 16) = 8 - 23 + 29 = 14$$Второй столбец:
$$\Delta_y = \begin{vmatrix} 2 & 1 & -1 \\ 3 & 13 & 2 \\ 1 & 8 & 3 \end{vmatrix} = 2(39 - 16) - 1(9 - 2) + (-1)(24 - 13) = 46 - 7 - 11 = 28$$Третий столбец:
$$\Delta_z = \begin{vmatrix} 2 & 1 & 1 \\ 3 & 2 & 13 \\ 1 & -1 & 8 \end{vmatrix} = 2(16 + 13) - 1(24 - 13) + 1(-3 - 2) = 58 - 11 - 5 = 42$$$$x = \frac{14}{14} = 1, \qquad y = \frac{28}{14} = 2, \qquad z = \frac{42}{14} = 3$$Проверка по всем трём уравнениям: $2 + 2 - 3 = 1$ ✓, $3 + 4 + 6 = 13$ ✓, $1 - 2 + 9 = 8$ ✓.
Пример 4. Когда нужна одна-единственная неизвестная.
$$\begin{cases} x + 2y + 3z = 14 \\ 2x - y + z = 3 \\ 3x + y - z = 2 \end{cases}$$Задача: найти только $z$, остальные неизвестные не интересуют. По Крамеру для этого достаточно двух определителей — $\Delta$ и $\Delta_z$:
$$\Delta = \begin{vmatrix} 1 & 2 & 3 \\ 2 & -1 & 1 \\ 3 & 1 & -1 \end{vmatrix} = 1(1 - 1) - 2(-2 - 3) + 3(2 + 3) = 0 + 10 + 15 = 25$$$$\Delta_z = \begin{vmatrix} 1 & 2 & 14 \\ 2 & -1 & 3 \\ 3 & 1 & 2 \end{vmatrix} = 1(-2 - 3) - 2(4 - 9) + 14(2 + 3) = -5 + 10 + 70 = 75$$$$z = \frac{75}{25} = 3$$Метод Гаусса такой роскоши не даёт: чтобы добраться до любой одной неизвестной, нужно проделать весь прямой ход, а потом ещё часть обратного. Крамер же считает каждую неизвестную по отдельной, самостоятельной формуле — это прямое следствие того, как устроен вывод: для каждого номера $k$ строится своя комбинация уравнений. (Полное решение этой системы, если оно понадобится, — $x = 1$, $y = 2$, $z = 3$.)
Пример 5. Система с нулями: считать легче, чем кажется.
$$\begin{cases} 2x = 4 \\ x + 3y = 8 \\ 2y - z = 1 \end{cases}$$Матрица коэффициентов нижнетреугольная:
$$A = \begin{pmatrix} 2 & 0 & 0 \\ 1 & 3 & 0 \\ 0 & 2 & -1 \end{pmatrix}, \qquad \Delta = 2\cdot 3\cdot(-1) = -6$$Определитель треугольной матрицы равен произведению диагональных элементов — свойство из урока 159, экономящее здесь всю работу.
$$\Delta_x = \begin{vmatrix} 4 & 0 & 0 \\ 8 & 3 & 0 \\ 1 & 2 & -1 \end{vmatrix} = 4\cdot(3\cdot(-1) - 0\cdot 2) = -12$$$$\Delta_y = \begin{vmatrix} 2 & 4 & 0 \\ 1 & 8 & 0 \\ 0 & 1 & -1 \end{vmatrix} = -1 \cdot \begin{vmatrix} 2 & 4 \\ 1 & 8 \end{vmatrix} = -1\cdot(16 - 4) = -12$$(разложили по третьему столбцу — там всего один ненулевой элемент)
$$\Delta_z = \begin{vmatrix} 2 & 0 & 4 \\ 1 & 3 & 8 \\ 0 & 2 & 1 \end{vmatrix} = 2(3 - 16) - 0 + 4(2 - 0) = -26 + 8 = -18$$$$x = \frac{-12}{-6} = 2, \qquad y = \frac{-12}{-6} = 2, \qquad z = \frac{-18}{-6} = 3$$Проверка: $2\cdot2 = 4$ ✓, $2 + 6 = 8$ ✓, $4 - 3 = 1$ ✓. Мораль примера: перед раскрытием каждого определителя стоит потратить секунду на поиск строки или столбца с нулями — разложение по нему сокращает работу в разы.
Почему это важно
Для систем $2\times2$ и $3\times3$ правило Крамера — самый быстрый способ получить ответ на бумаге. Оно не требует следить за порядком преобразований, не накапливает промежуточные матрицы, не порождает дробей в середине вычислений (все дроби появляются ровно один раз, в конце) и позволяет проверить себя на любом шаге: каждый определитель считается независимо от остальных.
Но главное — свойство, которое понадобится нам дальше: правило Крамера даёт решение в виде явной функции от коэффициентов. Каждая неизвестная — это дробь, числитель и знаменатель которой суть многочлены от элементов $A$ и $b$. Именно из этого вырастают и анализ чувствительности, и решение буквенных систем, и разбор случая $\Delta = 0$, к которому мы сейчас и переходим.
Геометрический смысл: решение как отношение объёмов
Формулы Крамера выглядят как алгебраический фокус, пока не посмотришь на них глазами геометрии. Тогда они превращаются в почти очевидное утверждение о площадях и объёмах — и заодно дают второй, полностью независимый вывод правила.
Интуиция: определитель — это площадь
Из урока 158 ты знаешь: определитель $2\times2$ — это ориентированная площадь параллелограмма, натянутого на два вектора-столбца. Из урока 155: определитель $3\times3$ — это смешанное произведение трёх векторов, то есть ориентированный объём параллелепипеда, натянутого на три вектора-столбца. Слово «ориентированный» означает, что знак определителя кодирует взаимное расположение векторов (по часовой стрелке или против), а модуль — саму площадь или объём.
Теперь посмотри на систему $Ax = b$ под другим углом. Обозначим столбцы матрицы $A$ через $u_1, u_2, \dots, u_n$. Тогда произведение $Ax$ — это в точности линейная комбинация столбцов с коэффициентами-неизвестными:
$$Ax = x_1u_1 + x_2u_2 + \dots + x_nu_n = b$$Решить систему — значит разложить вектор $b$ по столбцам матрицы $A$. Неизвестные $x_i$ — это координаты $b$ в косоугольной системе, построенной на векторах $u_i$. И вот тут определители дают ответ практически даром.
Вывод через площади (случай 2×2)
Пусть $b = x\,u + y\,v$, где $u$ и $v$ — столбцы матрицы. Посчитаем определитель $\Delta_x = \det(b,\ v)$ — то есть площадь параллелограмма, натянутого на $b$ и $v$. Определитель линеен по каждому столбцу (свойство из урока 159), поэтому:
$$\Delta_x = \det(x\,u + y\,v,\ v) = x\det(u,\ v) + y\det(v,\ v)$$Второе слагаемое равно нулю: у определителя $\det(v, v)$ два одинаковых столбца. Остаётся
$$\Delta_x = x\,\det(u,\ v) = x\,\Delta \quad\Longrightarrow\quad x = \frac{\Delta_x}{\Delta}$$Это тот же самый вывод, что и раньше, но записанный на языке площадей. Читается он так: координата $x$ — это отношение площади параллелограмма, натянутого на $b$ и $v$, к площади параллелограмма, натянутого на $u$ и $v$. Замена столбца $u$ на $b$ в определителе — это буквально замена одной стороны параллелограмма на вектор $b$, а вклад составляющей $b$ вдоль $v$ схлопывается, потому что параллелограмм, натянутый на $v$ и $v$, вырожден и имеет нулевую площадь.
Абсолютно так же работает трёхмерный случай: если $b = xu + yv + zw$, то
$$\Delta_x = \det(b, v, w) = x\det(u,v,w) + y\underbrace{\det(v,v,w)}_{=\,0} + z\underbrace{\det(w,v,w)}_{=\,0} = x\,\Delta$$и координата $x$ оказывается отношением объёма параллелепипеда на векторах $(b, v, w)$ к объёму параллелепипеда на $(u, v, w)$.
Разбор примеров
Пример 6. Разложение вектора по двум векторам на плоскости.
Даны $u = (2, 1)$, $v = (1, 3)$ и $b = (5, 5)$. Найдём коэффициенты разложения $b = xu + yv$, то есть решим систему
$$\begin{cases} 2x + y = 5 \\ x + 3y = 5 \end{cases}$$$$\Delta = \begin{vmatrix} 2 & 1 \\ 1 & 3\end{vmatrix} = 6 - 1 = 5$$Это площадь «базового» параллелограмма на $u$ и $v$: она равна 5 квадратным единицам, и знак плюс говорит, что пара $(u, v)$ ориентирована положительно.
$$\Delta_x = \begin{vmatrix} 5 & 1 \\ 5 & 3\end{vmatrix} = 15 - 5 = 10, \qquad \Delta_y = \begin{vmatrix} 2 & 5 \\ 1 & 5\end{vmatrix} = 10 - 5 = 5$$$$x = \frac{10}{5} = 2, \qquad y = \frac{5}{5} = 1$$Проверка: $2(2,1) + 1(1,3) = (4,2) + (1,3) = (5,5)$ ✓. Геометрический пересказ: параллелограмм на $b$ и $v$ ровно вдвое больше базового по площади, поэтому вклад $u$ в разложение — двукратный.
Пример 7. Три вектора в пространстве и объём.
Даны $u = (1, 1, 0)$, $v = (0, 1, 1)$, $w = (1, 0, 1)$, $b = (4, 3, 5)$. Разложим $b$ по $u, v, w$.
$$\Delta = \begin{vmatrix} 1 & 0 & 1 \\ 1 & 1 & 0 \\ 0 & 1 & 1 \end{vmatrix} = 1(1 - 0) - 0(1 - 0) + 1(1 - 0) = 2$$Смешанное произведение $(u, v, w) = 2$: параллелепипед на этих трёх векторах имеет объём 2, тройка ориентирована положительно. Раз объём не нулевой, векторы не лежат в одной плоскости, и разложение существует и единственно.
$$\Delta_x = \begin{vmatrix} 4 & 0 & 1 \\ 3 & 1 & 0 \\ 5 & 1 & 1 \end{vmatrix} = 4(1 - 0) - 0(3 - 0) + 1(3 - 5) = 4 - 2 = 2$$$$\Delta_y = \begin{vmatrix} 1 & 4 & 1 \\ 1 & 3 & 0 \\ 0 & 5 & 1 \end{vmatrix} = 1(3 - 0) - 4(1 - 0) + 1(5 - 0) = 3 - 4 + 5 = 4$$$$\Delta_z = \begin{vmatrix} 1 & 0 & 4 \\ 1 & 1 & 3 \\ 0 & 1 & 5 \end{vmatrix} = 1(5 - 3) - 0(5 - 0) + 4(1 - 0) = 2 + 4 = 6$$$$x = \frac{2}{2} = 1, \qquad y = \frac{4}{2} = 2, \qquad z = \frac{6}{2} = 3$$Проверка: $1(1,1,0) + 2(0,1,1) + 3(1,0,1) = (1 + 3,\ 1 + 2,\ 2 + 3) = (4,3,5)$ ✓.
Пример 8. Что происходит геометрически при $\Delta = 0$.
Возьмём $u = (1, 2)$, $v = (2, 4)$. Здесь $v = 2u$: векторы коллинеарны, параллелограмм на них вырожден в отрезок, его площадь равна нулю:
$$\Delta = \begin{vmatrix} 1 & 2 \\ 2 & 4\end{vmatrix} = 4 - 4 = 0$$Что это значит для системы $xu + yv = b$? Все комбинации $xu + yv$ лежат на одной прямой — той, что задаётся вектором $u$. Значит:
-
если $b$ лежит на этой прямой (например, $b = (3, 6)$), разложений бесконечно много: $b = 3u + 0v$, но и $b = 1u + 1v$, и $b = (3 - 2t)u + t\,v$ при любом $t$;
-
если $b$ не лежит на прямой (например, $b = (1, 0)$), разложений нет вообще — никакая комбинация коллинеарных векторов не выведет из прямой.
Ровно два случая, оба с нулевым знаменателем в формуле Крамера. Отличить их по одному лишь $\Delta$ невозможно — нужна дополнительная информация. Какая именно, разбираем в следующем разделе.
Почему это важно
Геометрическая картинка объясняет, почему знаменатель у всех неизвестных общий и почему он именно такой. $\Delta$ — это «объём базиса», масштаб системы координат, построенной на столбцах матрицы. Когда базис хороший (объём большой), координаты вычисляются устойчиво. Когда базис почти вырожден (объём близок к нулю, векторы почти коллинеарны), любая крошечная погрешность в $b$ делится на почти ноль и раздувается до огромной ошибки в решении. Это и есть первопричина численной неустойчивости, о которой пойдёт речь в разделе про машинное обучение и которая в следующем уроке получит количественную меру.
И ещё: та же картинка мгновенно даёт геометрическую интерпретацию систем из урока 163. Для двух уравнений с двумя неизвестными $\Delta \ne 0$ означает, что две прямые не параллельны и пересекаются ровно в одной точке. Для трёх уравнений с тремя неизвестными $\Delta \ne 0$ означает, что три плоскости пересекаются ровно в одной точке пространства, — потому что нормали этих плоскостей (строки матрицы) не лежат в одной плоскости и их смешанное произведение отлично от нуля.
Главная ловушка темы: что делать, когда $\Delta = 0$
Условие применимости правила Крамера состоит из двух частей, и обе обязательны.
Условия применимости правила Крамера:
Система должна быть квадратной: число уравнений равно числу неизвестных. Для системы $3\times4$ или $4\times3$ определитель матрицы коэффициентов просто не определён, и формулы $x_i = \Delta_i/\Delta$ не имеют смысла ни в каком виде.
Главный определитель должен быть отличен от нуля: $\Delta \ne 0$. При $\Delta = 0$ деление невозможно.
Первое условие никого не удивляет. Второе — источник почти всех ошибок в этой теме, потому что очень хочется как-то «доиграть» формулу и в вырожденном случае: раз $\Delta = 0$, а $\Delta_1 = 0$, то, может быть, $0/0$ намекает на бесконечность решений? Не намекает. Сейчас разберём это до конца.
Ключевое тождество
Всё держится на одном соотношении, которое мы фактически уже вывели в шаге 4 доказательства:
$$x_i\,\Delta = \Delta_i$$Важно: это равенство верно для любого решения системы, независимо от того, равен $\Delta$ нулю или нет. Проверим ещё раз через столбцы. Если $x = (x_1, \dots, x_n)$ — какое-то решение, то $b = x_1u_1 + \dots + x_nu_n$, где $u_j$ — столбцы матрицы $A$. Подставим это в $\Delta_i$ и раскроем по линейности определителя по $i$-му столбцу:
$$\Delta_i = \det(u_1, \dots, \underbrace{b}_{i}, \dots, u_n) = \sum_{j=1}^n x_j \det(u_1, \dots, \underbrace{u_j}_{i}, \dots, u_n)$$В каждом слагаемом с $j \ne i$ вектор $u_j$ встречается дважды — на своём месте $j$ и на месте $i$, — а определитель с двумя одинаковыми столбцами равен нулю. Выживает только слагаемое $j = i$, где на месте $i$ оказался родной столбец $u_i$, то есть определитель равен $\Delta$:
$$\Delta_i = x_i\,\Delta$$Из этого тождества вытекает всё остальное.
Случай 1: $\Delta = 0$, но хотя бы один $\Delta_i \ne 0$ — система несовместна
Предположим, что решение $x$ существует. Тогда для каждого $i$ выполнено $\Delta_i = x_i \cdot \Delta = x_i \cdot 0 = 0$, то есть все вспомогательные определители обязаны быть нулями. Значит, если хотя бы один $\Delta_i$ оказался ненулевым, предположение неверно и решений нет.
Вывод: если $\Delta = 0$ и найдётся хотя бы один $\Delta_i \ne 0$, то система несовместна — решений нет вообще.
Это единственный случай, в котором правило Крамера при $\Delta = 0$ даёт полноценный ответ. Причём ответ окончательный: искать дальше нечего.
Пример 9.
$$\begin{cases} x + y + z = 1 \\ 2x + 2y + 2z = 3 \\ x - y + z = 0 \end{cases}$$Первые две строки матрицы коэффициентов пропорциональны, поэтому
$$\Delta = \begin{vmatrix} 1 & 1 & 1 \\ 2 & 2 & 2 \\ 1 & -1 & 1 \end{vmatrix} = 0$$Считаем вспомогательные:
$$\Delta_x = \begin{vmatrix} 1 & 1 & 1 \\ 3 & 2 & 2 \\ 0 & -1 & 1 \end{vmatrix} = 1(2 + 2) - 1(3 - 0) + 1(-3 - 0) = 4 - 3 - 3 = -2$$Уже достаточно: $\Delta = 0$, а $\Delta_x = -2 \ne 0$, значит система несовместна. Ради полноты картины: $\Delta_y = 0$, $\Delta_z = 2$.
Здравый смысл подтверждает вывод напрямую: первое уравнение требует $x + y + z = 1$, второе (после деления на 2) требует $x + y + z = 1{,}5$. Одна и та же величина не может равняться двум разным числам.
Случай 2: $\Delta = 0$ и все $\Delta_i = 0$ — правило Крамера бессильно
Здесь начинается самое интересное. Обратное к случаю 1 утверждение неверно. Из того, что все определители обнулились, не следует ни совместность, ни несовместность — обе ситуации дают ровно одну и ту же картину нулей. Правило Крамера в этом случае не даёт никакой информации, и это нужно принять как факт, а не как повод дорисовать вывод.
Убедимся на паре систем с одинаковой матрицей коэффициентов.
Пример 10. Система с бесконечным множеством решений.
$$\begin{cases} x + 2y - z = 1 \\ 2x + 4y - 2z = 2 \\ 3x + 6y - 3z = 3 \end{cases}$$Все три строки матрицы пропорциональны первой, поэтому $\Delta = 0$. Каждый вспомогательный определитель тоже содержит два пропорциональных столбца или две пропорциональные строки — посчитаем, например, $\Delta_x$: заменяем первый столбец на $(1, 2, 3)$:
$$\Delta_x = \begin{vmatrix} 1 & 2 & -1 \\ 2 & 4 & -2 \\ 3 & 6 & -3 \end{vmatrix} = 0$$(вторая строка вдвое больше первой). Аналогично $\Delta_y = 0$ и $\Delta_z = 0$.
Что на самом деле происходит с системой: второе уравнение — это первое, умноженное на 2, третье — умноженное на 3. Реально уравнение только одно: $x + 2y - z = 1$. Оно задаёт целую плоскость решений, то есть решений бесконечно много: $x = 1 - 2y + z$ при любых $y$ и $z$.
Пример 11. Система без решений — с той же самой картиной нулей.
$$\begin{cases} x + 2y - z = 1 \\ 2x + 4y - 2z = 2 \\ 3x + 6y - 3z = 5 \end{cases}$$Матрица коэффициентов та же, значит и $\Delta = 0$. Проверим вспомогательные. Столбец свободных членов теперь $(1, 2, 5)$:
$$\Delta_x = \begin{vmatrix} 1 & 2 & -1 \\ 2 & 4 & -2 \\ 5 & 6 & -3 \end{vmatrix} = 0$$Первая и вторая строки по-прежнему пропорциональны — определитель равен нулю независимо от того, что стоит в третьей строке. То же самое с $\Delta_y$ и $\Delta_z$: в каждом из них первые две строки остаются пропорциональными, поэтому все три вспомогательных определителя равны нулю.
А система при этом решений не имеет: третье уравнение после деления на 3 требует $x + 2y - z = \tfrac53$, что противоречит первому уравнению $x + 2y - z = 1$.
Сопоставь два примера. Обе системы дают
$$\Delta = 0, \qquad \Delta_x = \Delta_y = \Delta_z = 0$$— картина нулей идентична до последнего числа. При этом одна система имеет бесконечно много решений, а вторая не имеет ни одного. Никакая интерпретация набора $(0, 0, 0, 0)$ не может различить эти случаи, потому что различие спрятано не в определителях, а в том, согласованы ли между собой правые части зависимых уравнений.
Вывод: если $\Delta = 0$ и все $\Delta_i = 0$, правило Крамера не даёт ответа. Система может быть как неопределённой (бесконечно много решений), так и несовместной. Нужен другой инструмент.
Что делать вместо Крамера
Инструмент у тебя уже есть, и не один.
Теорема Кронекера — Капелли (урок 163). Сравни $\operatorname{rank} A$ и $\operatorname{rank}[A \mid b]$. Если ранги различны — система несовместна. Если совпадают и равны числу неизвестных — решение единственно (что при $\Delta = 0$ для квадратной системы невозможно). Если совпадают и меньше числа неизвестных — решений бесконечно много. Для примера 10: $\operatorname{rank} A = 1 = \operatorname{rank}[A \mid b] < 3$, отсюда бесконечное множество. Для примера 11: $\operatorname{rank} A = 1$, а $\operatorname{rank}[A\mid b] = 2$, отсюда несовместность.
Метод Гаусса (урок 164). Универсальный ответ на все вопросы сразу: он и диагностирует систему, и выдаёт общее решение, если оно есть. Практическое правило: как только увидел $\Delta = 0$ и не смог закрыть вопрос через случай 1 — переключайся на Гаусса и не трать время на оставшиеся вспомогательные определители.
Отдельно стоит отметить однородные системы — те, у которых весь столбец свободных членов нулевой, $b = 0$. У них всегда есть тривиальное решение $x = 0$, поэтому несовместными они не бывают никогда. При $\Delta \ne 0$ правило Крамера даёт $\Delta_i = 0$ для всех $i$ (столбец из нулей обнуляет определитель), то есть решение единственно и равно нулевому. А вот при $\Delta = 0$ у однородной системы, помимо нулевого, обязательно есть и ненулевые решения — этому случаю и структуре таких решений посвящён отдельный урок дальше в курсе.
Почему это важно
Случай $\Delta = 0$ — это не «редкий вырожденный сценарий», а рабочая ситуация. В прикладных задачах он означает, что уравнения системы не независимы: датчики дублируют друг друга, признаки в датасете линейно связаны, три плоскости пересекаются по прямой, а не в точке. И самое опасное здесь — привычка достроить логику там, где её нет. Утверждение «$\Delta = 0$ и все $\Delta_i = 0$, значит решений бесконечно много» встречается в конспектах, в чужих ответах и даже в некоторых учебниках — и оно неверно, что показывает пример 11.
Правильная формулировка звучит скромнее и честнее: правило Крамера умеет доказывать несовместность (случай 1) и умеет давать единственное решение ($\Delta \ne 0$), но не умеет распознавать неопределённые системы. Это её принципиальное ограничение, а не пробел в твоих вычислениях.
Цена вопроса: Крамер против Гаусса
Правило Крамера выглядит компактнее метода Гаусса: одна формула вместо алгоритма. Но компактность записи и стоимость вычисления — разные вещи. Посчитаем честно, в операциях.
Интуиция: определитель дорог
Метод Гаусса из урока 164 обходится примерно в $\frac{2}{3}n^3$ арифметических операций — это кубический рост: удвоил размер системы, получил в восемь раз больше работы. Правило Крамера требует $n + 1$ определитель. Значит, вся его стоимость определяется тем, сколько стоит один определитель.
Способ первый: по определению. Определитель $n$-го порядка — это сумма по всем перестановкам, то есть $n!$ слагаемых, в каждом произведение из $n$ элементов ($n - 1$ умножение). Итого около $n!\,(n-1)$ умножений и $n! - 1$ сложений на один определитель.
Способ второй: разложение по строке (урок 160). Определитель порядка $n$ сводится к $n$ определителям порядка $n - 1$. Если обозначить через $M(n)$ число умножений, получается рекуррентное соотношение
$$M(n) = n\,M(n-1) + n, \qquad M(1) = 0$$Отсюда $M(2) = 2$, $M(3) = 9$, $M(4) = 40$, $M(5) = 205$. Кажется, что разложение сильно экономнее прямого перебора перестановок, — и на маленьких порядках это так. Но рост всё равно факториальный: можно проверить, что $M(n)$ ведёт себя как $(e - 1)\,n! \approx 1{,}718\,n!$. Для $n = 20$ отношение $M(20)/20!$ равно $1{,}71828\ldots$ — то есть разложение по строке экономит константу, а не порядок роста.
Считаем в числах
Возьмём в качестве оценки стоимости правила Крамера величину $(n+1)\,M(n)$ — $n+1$ определитель, каждый разложением по строке (это более выгодный из двух школьных способов). Сравним с $\frac{2}{3}n^3$ для Гаусса.
| $n$ | Крамер, операций | Гаусс, операций | Во сколько раз хуже |
|---|---|---|---|
| 3 | 36 | 18 | 2 |
| 4 | 200 | 43 | 4,7 |
| 5 | 1 230 | 83 | 15 |
| 10 | 68 588 300 | 667 | $1{,}0\cdot10^5$ |
| 15 | $3{,}6\cdot10^{13}$ | 2 250 | $1{,}6\cdot10^{10}$ |
| 20 | $8{,}8\cdot10^{19}$ | 5 333 | $1{,}6\cdot10^{16}$ |
Переведём в время, взяв за ориентир производительность в $10^9$ арифметических операций в секунду (порядок величины для одного ядра современного процессора):
Система $10\times10$.
-
Крамер, определители по определению: $11 \cdot 10! \cdot 9 = 359\,251\,200 \approx 3{,}6\cdot10^8$ операций — около 0,36 секунды.
-
Крамер, определители разложением по строке: $11 \cdot 6\,235\,300 = 68\,588\,300$ операций — около 0,07 секунды.
-
Метод Гаусса: $\frac{2}{3}\cdot 1000 \approx 667$ операций — около 0,7 микросекунды.
Разрыв — в сто тысяч раз. Для системы из десяти уравнений это ещё «терпимо»: доли секунды никого не убивают.
Система $20\times20$.
-
Крамер, определители по определению: $21 \cdot 20! \cdot 19 \approx 9{,}7\cdot10^{20}$ операций. Это $9{,}7\cdot10^{11}$ секунд, то есть примерно 31 тысяча лет.
-
Крамер, определители разложением по строке: $21 \cdot M(20) \approx 8{,}8\cdot10^{19}$ операций, то есть $8{,}8\cdot10^{10}$ секунд — примерно 2 800 лет.
-
Метод Гаусса: $\frac{2}{3}\cdot 8000 \approx 5\,333$ операции — около 5 микросекунд.
Двадцать уравнений — это очень маленькая система. В реальных задачах машинного обучения решают системы с тысячами и миллионами неизвестных. Если бы правило Крамера считалось наивно, ни одна из этих задач не была бы решена никогда.
Честная оговорка: а если считать определители умно?
Справедливости ради: никто не обязан вычислять определитель разложением по строке. Определитель можно посчитать приведением матрицы к треугольному виду — по свойству из урока 159 он равен произведению диагональных элементов с поправкой на перестановки строк, а приведение стоит те же $O(n^3)$ операций. Тогда правило Крамера обойдётся примерно в $(n+1)\cdot\frac{2}{3}n^3 \approx \frac{2}{3}n^4$ операций.
Это уже не катастрофа — но всё равно в $n+1$ раз дороже метода Гаусса, который решает ту же задачу целиком. Для $n = 1000$ это тысячекратный проигрыш. Плюс к этому у наивной реализации есть вторая, менее заметная беда: числитель и знаменатель считаются независимо, и когда $\Delta$ мал, ошибки округления в $\Delta_i$ и $\Delta$ не компенсируют друг друга, а складываются. Метод Гаусса с выбором ведущего элемента такого не допускает.
Любопытно, что задачу «сделать Крамера пригодным» всё же решали всерьёз. В 2012 году Кен Хабгуд и Итамар Арел опубликовали в Journal of Discrete Algorithms работу «A condensation-based application of Cramer's rule for solving large-scale linear systems», где показали реализацию правила Крамера за $O(n^3)$ на основе конденсации определителей — с прицелом на массивно-параллельные вычисления, где независимость $n+1$ определителей друг от друга становится плюсом. Практика, впрочем, за этим не пошла: в стандартных библиотеках линейной алгебры правила Крамера как решателя нет.
Почему это важно
Вывод формулируется прямо и без сантиментов: правило Крамера — не производственный алгоритм. Это теоретический инструмент и способ решать системы $2\times2$ и $3\times3$ на бумаге или в уме. Для всего остального есть метод Гаусса и его промышленные потомки.
Такой вывод не обесценивает тему. Формула корней квадратного уравнения тоже не используется для численного решения полиномов высокой степени — но никому не приходит в голову объявить её бесполезной. Ценность формулы не в скорости, а в том, что она показывает устройство ответа. Именно за этим мы и переходим к разделу о том, где Крамер работает лучше любого алгоритма.
Где правило Крамера действительно полезно
Буквенные системы и вывод формул
Если коэффициенты системы — не числа, а буквы, метод Гаусса становится мучением: на каждом шаге нужно делить на ведущий элемент, а он буквенный, значит нужно отдельно разбирать случай, когда он равен нулю, и выражения разрастаются с каждым шагом. Правило Крамера же выдаёт ответ одной формулой, в которой всё видно сразу.
Классический пример — общее решение системы $2\times2$:
$$\begin{cases} ax + by = e \\ cx + dy = f \end{cases} \quad\Longrightarrow\quad x = \frac{ed - bf}{ad - bc}, \qquad y = \frac{af - ec}{ad - bc}$$Условие применимости написано прямо в знаменателе: $ad - bc \ne 0$. Никакого разбора случаев по ходу решения — вся особенность собрана в одном месте.
Анализ чувствительности
Второе, за что ценят Крамера, — возможность увидеть, как решение реагирует на изменение данных. Пусть один коэффициент системы — параметр. Тогда $x_i(\varepsilon) = \Delta_i(\varepsilon)/\Delta(\varepsilon)$ — обычная рациональная функция параметра, которую можно исследовать всеми школьными средствами: искать нули знаменателя, считать пределы, дифференцировать.
Пример 12. Рассмотрим систему с малым возмущением второго уравнения:
$$\begin{cases} x + 2y = 3 \\ 2x + (4 + \varepsilon)y = 7 \end{cases}$$$$\Delta = 1\cdot(4+\varepsilon) - 2\cdot 2 = \varepsilon$$$$\Delta_x = 3(4 + \varepsilon) - 2\cdot 7 = 3\varepsilon - 2, \qquad \Delta_y = 1\cdot 7 - 2\cdot 3 = 1$$$$x = \frac{3\varepsilon - 2}{\varepsilon} = 3 - \frac{2}{\varepsilon}, \qquad y = \frac{1}{\varepsilon}$$Формула читается как диагноз. При $\varepsilon = 0{,}1$ решение $x = 3 - 20 = -17$, $y = 10$. При $\varepsilon = 0{,}01$ уже $x = -197$, $y = 100$. При $\varepsilon \to 0$ решение уходит на бесконечность, а при $\varepsilon = 0$ система становится несовместной ($x + 2y = 3$ и $x + 2y = 3{,}5$). Изменение коэффициента на одну сотую меняет ответ в десять раз — и правило Крамера показывает это одной строкой, тогда как численное решение при $\varepsilon = 0{,}1$ и при $\varepsilon = 0{,}01$ дало бы два числа без всякого намёка на связь между ними.
Такая ситуация — коэффициент почти вырожденный, решение сверхчувствительно — в вычислительной практике называется плохой обусловленностью системы, и подробный количественный разговор о ней ждёт тебя в следующем уроке.
Системы с параметром
Смежная задача: при каких значениях параметра система разрешима? Правило Крамера сводит её к решению одного уравнения $\Delta(\lambda) = 0$ относительно параметра. Все «плохие» значения находятся сразу, а для остальных ответ выписывается формулой.
Пример 13. Исследуем систему
$$\begin{cases} \lambda x + y + z = 1 \\ x + \lambda y + z = 1 \\ x + y + \lambda z = 1 \end{cases}$$Считаем главный определитель разложением по первой строке:
$$\Delta = \lambda(\lambda^2 - 1) - 1(\lambda - 1) + 1(1 - \lambda) = \lambda^3 - \lambda - \lambda + 1 + 1 - \lambda = \lambda^3 - 3\lambda + 2$$Раскладываем на множители: $\lambda = 1$ — корень ($1 - 3 + 2 = 0$), делим на $(\lambda - 1)$ и получаем
$$\Delta = (\lambda - 1)^2(\lambda + 2)$$Значит, при $\lambda \ne 1$ и $\lambda \ne -2$ правило Крамера применимо. Считаем $\Delta_x$ (заменяем первый столбец на столбец из единиц):
$$\Delta_x = \begin{vmatrix} 1 & 1 & 1 \\ 1 & \lambda & 1 \\ 1 & 1 & \lambda \end{vmatrix} = 1(\lambda^2 - 1) - 1(\lambda - 1) + 1(1 - \lambda) = \lambda^2 - 2\lambda + 1 = (\lambda - 1)^2$$По симметрии системы $\Delta_y = \Delta_z = (\lambda - 1)^2$, и тогда
$$x = y = z = \frac{(\lambda-1)^2}{(\lambda-1)^2(\lambda+2)} = \frac{1}{\lambda + 2}$$Особые значения разбираем отдельно. При $\lambda = 1$ все три уравнения превращаются в $x + y + z = 1$ — система совместна, решений бесконечно много. При $\lambda = -2$ сложим все три уравнения: слева каждая неизвестная входит с коэффициентом $-2 + 1 + 1 = 0$, значит слева ноль, а справа $3$ — система несовместна.
Обрати внимание, насколько по-разному ломается формула в двух особых точках. При $\lambda = -2$ имеем $\Delta = 0$, но $\Delta_x = (\lambda - 1)^2 = 9 \ne 0$ — это случай 1 из предыдущего раздела, и несовместность получается прямо из правила Крамера, без всякого дополнительного анализа. А при $\lambda = 1$ обнуляется всё сразу: $\Delta = 0$ и $\Delta_x = \Delta_y = \Delta_z = 0$ — тут правило Крамера молчит, и вывод о бесконечном множестве решений сделан вручную, взглядом на сами уравнения. Один и тот же нулевой главный определитель, два совершенно разных сценария.
Маленькие системы в реальном времени
Есть и чисто инженерная ниша. В компьютерной графике, физических движках и робототехнике постоянно решаются системы $2\times2$ и $3\times3$: пересечение луча с треугольником, разложение вектора по локальному базису, обратная кинематика простого механизма. Для таких размеров правило Крамера разворачивается в несколько строк арифметики без циклов, ветвлений и выделения памяти — и оказывается быстрее общего решателя, который тратит больше времени на служебную работу, чем на само вычисление. Известный алгоритм пересечения луча и треугольника Мёллера — Трумбора именно так и устроен: он решает систему $3\times3$ через смешанные произведения, то есть по сути через отношения определителей.
Почему это важно
Все четыре ниши объединяет одно: в них ценен не сам ответ, а вид ответа. Буквенная система нужна тогда, когда результат должен работать при любых входных данных; анализ чувствительности — когда важно не значение, а его производная по коэффициенту; система с параметром — когда нужно знать границы применимости модели, а не одну её точку. Метод Гаусса на все эти вопросы отвечает молчанием: он выдаёт числа. Правило Крамера выдаёт функцию — и именно поэтому оно осталось в курсе линейной алгебры спустя двести семьдесят лет после того, как перестало быть практичным способом считать.
Правило Крамера и определители в машинном обучении
Начнём с честного признания: как решателя систем правила Крамера в машинном обучении нет. Ни в NumPy, ни в SciPy, ни в PyTorch, ни в JAX не существует функции cramer_solve — и это не упущение авторов библиотек, а осознанное решение. Зато определители, на которых правило построено, в ML присутствуют повсеместно, и в очень характерной форме. Разберём и то, и другое.
Почему np.linalg.solve не использует Крамера
Когда ты пишешь numpy.linalg.solve(A, b), под капотом вызывается процедура gesv из библиотеки LAPACK. Она делает LU-разложение матрицы с частичным выбором ведущего элемента (тот самый pivoting из урока 164), а затем два прохода подстановки. Стоимость — $O(n^3)$, ровно как у метода Гаусса, потомком которого LU-разложение и является. То же самое стоит за scipy.linalg.solve, torch.linalg.solve и jax.numpy.linalg.solve.
Причин, по которым Крамер туда не попал, ровно три, и все три мы уже разобрали:
-
стоимость. Даже при вычислении определителей через LU-разложение правило Крамера обходится примерно в $(n+1)\cdot\frac{2}{3}n^3$ операций против $\frac{2}{3}n^3$ у прямого решателя — проигрыш в $n+1$ раз. Для матрицы $1000\times1000$ это разница между секундой и четвертью часа;
-
устойчивость. Числитель $\Delta_i$ и знаменатель $\Delta$ вычисляются независимо. Когда матрица близка к вырожденной, оба числа малы, оба посчитаны с погрешностью, и при делении погрешности не гасятся, а накапливаются. Прямой решатель с выбором ведущего элемента контролирует это гораздо лучше;
-
область применения. Правило Крамера работает только для квадратных невырожденных систем, а в реальных задачах чаще нужно что-то ещё: переопределённые системы (
lstsq), разреженные матрицы, специальные структуры (симметричные, положительно определённые — там используют разложение Холецкого).
Единственное место, где правило Крамера реально встречается в коде, — это жёстко зашитые формулы для $2\times2$ и $3\times3$ внутри графических и геометрических библиотек, где важна каждая наносекунда и где размер известен заранее.
Определитель в вероятностных моделях
А вот сами определители в машинном обучении никуда не делись — они сидят в самом сердце вероятностных моделей. Плотность многомерного нормального распределения в $d$ измерениях с вектором средних $\mu$ и ковариационной матрицей $\Sigma$ выглядит так:
$$p(x) = \frac{1}{(2\pi)^{d/2}\,\bigl(\det\Sigma\bigr)^{1/2}}\exp\!\left(-\tfrac12 (x-\mu)^{\!\top}\Sigma^{-1}(x-\mu)\right)$$Множитель $\det\Sigma$ стоит в нормировке — он отвечает за то, чтобы полный интеграл плотности равнялся единице. Геометрически это ровно та интерпретация, которую мы разбирали: $\det\Sigma$ — «объём» облака данных, характеристика того, насколько широко разбросаны точки. В статистике эту величину так и называют — обобщённая дисперсия. Если $\det\Sigma = 0$, распределение вырождено: данные лежат в подпространстве меньшей размерности, плотности в обычном смысле не существует, а $\Sigma^{-1}$ не определена.
При обучении моделей работают не с плотностью, а с её логарифмом — логарифмом правдоподобия:
$$\log p(x) = -\frac{d}{2}\log(2\pi) - \frac12\log\det\Sigma - \frac12 (x-\mu)^{\!\top}\Sigma^{-1}(x-\mu)$$Здесь и появляется величина $\log\det\Sigma$, которая в коде встречается на порядок чаще, чем сам определитель.
Почему считают именно логарифм определителя
Причина сугубо практическая — переполнение и потеря значимости. Определитель матрицы порядка $d$ — это произведение $d$ собственных значений. Пусть $d = 1000$, а типичное собственное значение ковариационной матрицы равно $0{,}1$. Тогда
$$\det\Sigma \approx 0{,}1^{1000} = 10^{-1000}$$Наименьшее положительное число в формате float64 — примерно $2{,}2\cdot10^{-308}$. Значит, $\det\Sigma$ обнулится при вычислении, и следующий шаг — логарифм нуля — даст минус бесконечность. Обучение развалится не из-за ошибки в модели, а из-за арифметики.
Решение — никогда не собирать произведение целиком, а сразу суммировать логарифмы. Именно это делают специальные функции:
import torch
Sigma = torch.tensor([[2.0, 0.3], [0.3, 1.5]])
torch.logdet(Sigma) # log(det Sigma), если det > 0
torch.linalg.slogdet(Sigma) # (sign, logabsdet) — знак и логарифм модуля
import numpy as np
sign, logabsdet = np.linalg.slogdet(Sigma_np) # то же самое в NumPy
Функция slogdet («sign and log-determinant») возвращает пару: знак определителя и логарифм его модуля. Внутри она делает LU- или (для симметричных положительно определённых матриц) Холецкого-разложение и складывает логарифмы диагональных элементов:
Сумма тысячи чисел вида $\log 0{,}1 \approx -2{,}3$ даёт около $-2300$ — совершенно безобидное значение для float64. Ровно этот приём используется в scipy.stats.multivariate_normal.logpdf, в реализациях гауссовских смесей (sklearn.mixture.GaussianMixture) и в логарифме маргинального правдоподобия гауссовских процессов, где слагаемое $\frac12\log\det(K + \sigma^2 I)$ штрафует модель за «слишком объёмное» распределение и тем самым борется с переобучением.
Определители в нормализующих потоках
Ещё одно место, где определитель работает на переднем крае, — генеративные модели класса нормализующих потоков (normalizing flows). Идея такая: берётся простое распределение (обычно стандартное нормальное) и пропускается через обратимое преобразование $f$, которое учится нейросетью. Плотность после преобразования считается по формуле замены переменных, где появляется определитель матрицы Якоби — якобиан, знакомый тебе по уроку 158:
$$\log p_X(x) = \log p_Z\bigl(f(x)\bigr) + \log\bigl|\det J_f(x)\bigr|$$Слагаемое $\log|\det J_f|$ входит в функцию потерь и вычисляется на каждом шаге обучения для каждого примера в батче. Если бы его пришлось считать в лоб — за $O(d^3)$ на объект при размерности $d$ в тысячи, — обучение было бы невозможным. Поэтому архитектуры потоков проектируются так, чтобы матрица Якоби имела специальную структуру, у которой определитель считается почти даром: треугольную (авторегрессионные потоки, связывающие слои в RealNVP) или заранее разложенную на множители (обратимая свёртка $1\times1$ в модели Glow, где веса параметризуются сразу через LU-разложение). Определитель треугольной матрицы — произведение диагональных элементов, и его логарифм превращается в сумму $d$ логарифмов вместо кубической работы.
Техническую сторону потоков мы здесь не разбираем — важна мотивация. Определитель в этих моделях играет роль «коэффициента растяжения объёма», ровно в том смысле, в котором мы разбирали его геометрически в этом уроке: преобразование сжимает или растягивает пространство, и плотность обязана измениться во столько же раз.
Символьные вычисления: там, где Крамер жив
Есть одна библиотека, где правило Крамера реализовано явно, — это SymPy, система символьных вычислений. И это логично: символьные системы обычно маленькие, а формула-ответ там ценнее скорости.
from sympy import Matrix, symbols, linsolve
a, b, c, d, e, f = symbols('a b c d e f')
A = Matrix([[a, b], [c, d]])
rhs = Matrix([e, f])
A.cramer_solve(rhs) # решение по правилу Крамера
A.solve(rhs, method='CRAMER') # то же самое через общий интерфейс
linsolve((A, rhs), symbols('x y'))
Для буквенной системы $2\times2$ SymPy вернёт в точности те дроби, которые мы выписали руками: $x = \dfrac{ed - bf}{ad - bc}$, $y = \dfrac{af - ec}{ad - bc}$. Это ровно тот сценарий, ради которого правило Крамера и стоит держать в арсенале: получить формулу, а не число. В прикладной работе такое нужно, когда выводят аналитическое выражение для оценки параметра, исследуют, как ответ зависит от гиперпараметра, или проверяют вручную выведенную формулу на предмет опечатки.
Кстати, самый известный в анализе данных результат такого вывода ты наверняка видел. Оценки коэффициентов простой линейной регрессии $y = \beta_0 + \beta_1 x$ по методу наименьших квадратов получаются решением системы из двух нормальных уравнений — и решается эта система именно по Крамеру, что и даёт хрестоматийную формулу для наклона:
$$\beta_1 = \frac{n\sum x_iy_i - \sum x_i\sum y_i}{n\sum x_i^2 - \left(\sum x_i\right)^2}$$Знаменатель здесь — главный определитель системы, числитель — вспомогательный. Разбору этого вывода посвящено последнее задание урока.
Практика: 30 заданий
Базовые задания (1–10)
Задание 1. Реши систему по правилу Крамера: $\begin{cases} 3x + 2y = 7 \\ x - y = -1 \end{cases}$
Задание 2. Реши систему по правилу Крамера: $\begin{cases} 5x - 2y = 4 \\ 3x + 4y = 5 \end{cases}$
Задание 3. Реши систему по правилу Крамера: $\begin{cases} x + y = 5 \\ 2x - y = 1 \end{cases}$
Задание 4. Примени правило Крамера к системе $\begin{cases} 2x - 4y = 6 \\ -x + 2y = 1 \end{cases}$ и сделай вывод о её решениях.
Задание 5. Примени правило Крамера к системе $\begin{cases} x - 3y = 2 \\ 2x - 6y = 4 \end{cases}$ и разберись, что происходит.
Задание 6. Реши по правилу Крамера: $\begin{cases} x + y + z = 6 \\ 2x - y + z = 3 \\ x + 2y - z = 2 \end{cases}$
Задание 7. Реши по правилу Крамера: $\begin{cases} x + z = 3 \\ 2x - y = 1 \\ y + 3z = 7 \end{cases}$
Задание 8. Найди точку пересечения прямых $2x + y = 5$ и $x - 3y = -1$, используя правило Крамера. Что означает знак и величина главного определителя?
Задание 9. Нужно получить 20 кг сплава с содержанием меди 45%, смешав два сплава — с содержанием меди 30% и 70%. Сколько килограммов каждого сплава взять? Реши по правилу Крамера.
Задание 10. Реши по правилу Крамера: $\begin{cases} 2x + y - z = 6 \\ x - y + 2z = -1 \\ 3x + 2y + z = 7 \end{cases}$
Средние задания (11–20)
Задание 11. Реши по правилу Крамера: $\begin{cases} 3x - y + 2z = 7 \\ x + 2y - z = 1 \\ 2x + 3y + z = 10 \end{cases}$
Задание 12. При каких значениях параметра $a$ к системе $\begin{cases} ax + y = 1 \\ x + ay = 1 \end{cases}$ применимо правило Крамера? Реши систему для этих значений и разбери оставшиеся случаи отдельно.
Задание 13. Реши буквенную систему $\begin{cases} 2x + 3y = p \\ x - y = q \end{cases}$ и выпиши ответ в виде формул от $p$ и $q$.
Задание 14. Три плоскости заданы уравнениями $x + y + z = 1$, $2x - y + z = 0$, $x + 2y - z = 3$. Выясни, пересекаются ли они в одной точке, и найди её.
Задание 15. В электрической цепи токи $I_1$, $I_2$, $I_3$ удовлетворяют законам Кирхгофа: ток разветвляется в узле ($I_1 = I_2 + I_3$), а для двух контуров выполнено $2I_1 + 3I_2 = 12$ и $3I_2 - 6I_3 = 0$. Найди токи по правилу Крамера.
Задание 16. На складе три вида сырья с ценами 2, 3 и 5 денежных единиц за килограмм. Нужно составить смесь массой 100 кг стоимостью 380 единиц так, чтобы первого вида было ровно вдвое больше по массе, чем второго. Найди массы всех трёх видов по правилу Крамера.
Задание 17. Оцени, сколько умножений потребует решение системы $4\times4$ по правилу Крамера, если каждый определитель считать разложением по строке. Сравни с методом Гаусса, стоимость которого оценивается как $\frac{2}{3}n^3$ операций.
Задание 18. Дана система $\begin{cases} 2x_1 + x_2 = 4 \\ x_1 + 2x_2 + x_3 = 8 \\ x_2 + 2x_3 + x_4 = 12 \\ x_3 + 2x_4 = 11 \end{cases}$ Найди только $x_3$, не вычисляя остальных неизвестных.
Задание 19. Исследуй систему $\begin{cases} (1+a)x + y = a \\ x + (1+a)y = a \end{cases}$ — при каких $a$ применимо правило Крамера, каково решение, и что происходит в остальных случаях?
Задание 20. Разложи вектор $b = (7, 4)$ по векторам $u = (3, 1)$ и $v = (1, 2)$, то есть найди $x$ и $y$ в равенстве $b = xu + yv$. Объясни результат через площади параллелограммов.
Продвинутые задания (21–30)
Задание 21. Полностью исследуй систему с параметром: $\begin{cases} ax + y + z = 1 \\ x + ay + z = a \\ x + y + az = a^2 \end{cases}$ — при каких $a$ решение единственно, чему оно равно, и что происходит при остальных значениях?
Задание 22. Через три точки $(1;\alpha)$, $(2;\beta)$, $(3;\gamma)$ проводится парабола $p(t) = x + yt + zt^2$. Выведи формулы для коэффициентов $x$, $y$, $z$ через $\alpha$, $\beta$, $\gamma$ по правилу Крамера и проверь их на случае $p(t) = t^2$.
Задание 23. Даны две системы с одной и той же матрицей коэффициентов:
(а) $\begin{cases} 2x - y + 3z = 1 \\ 4x - 2y + 6z = 2 \\ -6x + 3y - 9z = -3 \end{cases}$ и (б) $\begin{cases} 2x - y + 3z = 1 \\ 4x - 2y + 6z = 2 \\ -6x + 3y - 9z = 5 \end{cases}$
Вычисли для каждой все четыре определителя и сделай выводы.
Задание 24. Дана система $\begin{cases} x + ay = 3 \\ 2x + 5y = 8 \end{cases}$ Выпиши решение как функцию параметра $a$, найди производные $\dfrac{dx}{da}$ и $\dfrac{dy}{da}$ в точке $a = 2$ и оцени, насколько решение чувствительно к изменению коэффициента.
Задание 25. Реши систему $4\times4$ по правилу Крамера: $\begin{cases} x + 2y = 3 \\ y + 2z = 3 \\ z + 2w = 3 \\ 2x + w = 3 \end{cases}$
Задание 26. Сравни стоимость решения систем $10\times10$ и $20\times20$ правилом Крамера (определители — разложением по строке) и методом Гаусса ($\frac23 n^3$ операций). Переведи результат во время при производительности $10^9$ операций в секунду.
Задание 27. Для каждой из систем определи взаимное расположение трёх плоскостей, опираясь на определители:
(а) $\begin{cases} x + y + z = 1 \\ x + y + z = 2 \\ x - y = 0 \end{cases}$ и (б) $\begin{cases} x + 2y + 3z = 1 \\ 2x + 4y + 6z = 2 \\ x - y + z = 0 \end{cases}$
Задание 28. В узле конструкции сходятся три стержня, и условия равновесия по трём осям дают систему на усилия $T_1$, $T_2$, $T_3$: $\begin{cases} T_1 - T_2 + 2T_3 = 7 \\ 2T_1 + T_2 - T_3 = 2 \\ T_1 + 3T_2 + T_3 = 8 \end{cases}$ Найди усилия по правилу Крамера.
Задание 29. Исследуй систему с параметром $\lambda$: $\begin{cases} x + 2y + z = 1 \\ 2x + y + 3z = 2 \\ 3x + \lambda y + 4z = 5 \end{cases}$ Найди решение как функцию $\lambda$, разбери особый случай и объясни, что происходит с решением при приближении $\lambda$ к особому значению.
Задание 30 (капстоун). Выведи по правилу Крамера классические формулы метода наименьших квадратов для прямой $y = \beta_0 + \beta_1 x$ и примени их к данным $x = (1, 2, 3, 4, 5)$, $y = (2, 4, 5, 4, 5)$.
Частые ошибки
Ошибка 1. Применяют правило Крамера к неквадратной системе.
Как выглядит: система из двух уравнений с тремя неизвестными, человек пытается посчитать «главный определитель» матрицы $2\times3$.
Почему возникает: формула $x_i = \Delta_i/\Delta$ выглядит универсальной, и границы её применимости не запоминаются, потому что в примерах они всегда выполнены.
Как правильно: определитель существует только для квадратной матрицы. Если уравнений и неизвестных разное количество — правило Крамера не применяется ни в каком виде, нужен метод Гаусса и анализ рангов по теореме Кронекера — Капелли.
Ошибка 2. Из $\Delta = 0$ и всех $\Delta_i = 0$ делают вывод «решений бесконечно много».
Как выглядит: «$\Delta = 0$, $\Delta_x = \Delta_y = \Delta_z = 0$, значит система неопределённа, ответ — бесконечное множество решений».
Почему возникает: по аналогии со случаем 1 хочется, чтобы обнуление определителей тоже что-то однозначно означало, а дробь $0/0$ подсознательно ассоциируется с «чем угодно», то есть с бесконечностью решений.
Как правильно: этот случай не даёт информации вообще. Система может быть и неопределённой, и несовместной — сравни задание 23, где две системы с одинаковой картиной нулей ведут себя противоположным образом. Нужен метод Гаусса или сравнение рангов.
Ошибка 3. Заменяют строку вместо столбца.
Как выглядит: при поиске $\Delta_2$ человек подставляет вектор свободных членов во вторую строку матрицы.
Почему возникает: в системе свободные члены записаны справа от каждого уравнения, то есть «в строке», и рука тянется поставить их туда же.
Как правильно: заменяется $i$-й столбец, потому что именно он состоит из коэффициентов при неизвестной $x_i$. Мнемоника: номер неизвестной — номер столбца.
Ошибка 4. Строят $\Delta_2$ из уже изменённой матрицы.
Как выглядит: сначала заменили первый столбец на $b$, посчитали $\Delta_1$, а потом в этой же матрице заменили второй столбец и назвали результат $\Delta_2$.
Почему возникает: экономия писанины при работе в одной таблице.
Как правильно: каждый вспомогательный определитель строится из исходной матрицы $A$ заменой ровно одного столбца. В матрице для $\Delta_2$ первый столбец должен быть родным.
Ошибка 5. Переворачивают дробь: $x_i = \Delta/\Delta_i$.
Как выглядит: ответ получается обратным к правильному, и при $\Delta_i = 0$ возникает деление на ноль там, где на самом деле $x_i = 0$.
Почему возникает: обе величины называются «определителями», и порядок в дроби не закрепляется.
Как правильно: в знаменателе всегда стоит главный определитель, один и тот же для всех неизвестных. Простая проверка: если у всех неизвестных знаменатель разный — формула записана неверно.
Ошибка 6. Не приводят систему к каноническому виду перед составлением матрицы.
Как выглядит: в уравнении $3z - 2 = x$ коэффициенты записывают как $(3, 0, -1)$ со свободным членом $-2$, не перенеся слагаемые.
Почему возникает: спешка и привычка читать уравнение слева направо.
Как правильно: сначала все неизвестные переносятся влево в фиксированном порядке, свободные члены — вправо, отсутствующие неизвестные записываются с коэффициентом 0. Уравнение $3z - 2 = x$ в порядке $(x,y,z)$ даёт строку $(-1, 0, 3)$ и свободный член $2$.
Ошибка 7. Подставляют запрещённое значение параметра в готовую формулу.
Как выглядит: получили $x = \dfrac{a}{a+2}$ при условии $a \ne 0$, а потом подставляют $a = 0$ и объявляют $(0;0)$ единственным решением.
Почему возникает: формула выглядит «рабочей» при подстановке, и ограничение, записанное строчкой выше, теряется.
Как правильно: значения параметра, при которых $\Delta = 0$, разбираются отдельно, подстановкой в исходную систему. Полученное из формулы число может случайно оказаться одним из решений — но это не делает его единственным (задание 19).
Ошибка 8. Считают правило Крамера быстрым методом.
Как выглядит: «формула же одна, значит быстрее алгоритма» — и попытка применить Крамера к системе $10\times10$ или запрограммировать его как решатель.
Почему возникает: компактность записи путается со стоимостью вычисления.
Как правильно: правило Крамера дороже метода Гаусса минимум в $n+1$ раз даже при самой аккуратной реализации, а при наивном подсчёте определителей — факториально дороже. Для $n > 4$ на бумаге и для любого $n$ в коде используется метод Гаусса или его потомки.
Ошибка 9. Забывают проверить $\Delta \ne 0$ и сразу считают вспомогательные определители.
Как выглядит: посчитаны все четыре определителя системы $3\times3$, и только в конце обнаруживается, что $\Delta = 0$ и делить не на что.
Почему возникает: желание «посчитать всё сразу», порядок действий не закреплён.
Как правильно: главный определитель считается первым. Если он нулевой, дальше считается ровно один вспомогательный: если тот ненулевой — система несовместна, вопрос закрыт; если нулевой — переключаемся на метод Гаусса, не тратя время на остальные.
Ошибка 10. Применяют правило Крамера численно к системе с почти нулевым определителем.
Как выглядит: в программе считается $\Delta = 10^{-14}$, потом $\Delta_i$, и результат деления объявляется решением.
Почему возникает: формула не сигнализирует о проблеме — деление на очень маленькое число технически выполняется.
Как правильно: при малом $\Delta$ погрешности округления в числителе и знаменателе не гасят друг друга, и ответ может не иметь ни одной верной цифры. Практически это означает: в коде решать системы через numpy.linalg.solve (LU-разложение с выбором ведущего элемента), а не через отношения определителей.
Главное запомнить
-
Правило Крамера применимо только к квадратной системе $n$ уравнений с $n$ неизвестными и только при $\Delta = \det A \ne 0$.
-
Формулы: $x_i = \dfrac{\Delta_i}{\Delta}$, где $\Delta_i$ — определитель матрицы $A$ с $i$-м столбцом, заменённым на столбец свободных членов; исходная матрица берётся каждый раз заново.
-
Вывод держится на двух свойствах определителя: разложении по столбцу через алгебраические дополнения (урок 160) и равенстве нулю определителя с двумя одинаковыми столбцами (урок 159). Комбинация уравнений с коэффициентами-дополнениями уничтожает все неизвестные, кроме одной.
-
Ключевое тождество $x_i\,\Delta = \Delta_i$ верно для любого решения системы, в том числе при $\Delta = 0$ — из него и следует весь разбор вырожденного случая.
-
Если $\Delta = 0$ и хотя бы один $\Delta_i \ne 0$, система несовместна — это единственный вывод, который правило Крамера делает при нулевом главном определителе.
-
Если $\Delta = 0$ и все $\Delta_i = 0$, правило Крамера не даёт ответа: система может быть и неопределённой, и несовместной. Разбирать такой случай нужно методом Гаусса или через сравнение рангов.
-
Геометрически $\Delta$ — ориентированная площадь (для $2\times2$) или объём (для $3\times3$) фигуры, натянутой на столбцы матрицы, а $x_i$ — отношение объёмов: в числителе объём с заменённым на $b$ ребром.
-
Правило Крамера — не производственный алгоритм. Наивно оно факториально дорого ($n+1$ определитель), аккуратно — в $n+1$ раз дороже метода Гаусса, и всегда менее устойчиво численно.
-
Реальная ниша правила: системы $2\times2$ и $3\times3$ на бумаге, буквенные системы, вывод формул в аналитическом виде, исследование зависимости решения от параметра, поиск одной-единственной неизвестной без вычисления остальных.
-
В машинном обучении используется не правило Крамера, а сами определители: множитель $\det\Sigma$ в нормировке многомерного нормального распределения, $\log\det$ в функциях правдоподобия (
torch.slogdet,numpy.linalg.slogdet) и якобиан в нормализующих потоках.
Связь с другими темами курса
Что нужно было знать до этого урока
Правило Крамера — прямая надстройка над теорией определителей. Из урока 158 взяты формула $ad - bc$ и правило Саррюса: без них не посчитать ни одного из $n+1$ определителей. Из урока 159 — свойства определителей, и два из них работают в самом сердце вывода: определитель с двумя одинаковыми столбцами равен нулю, и определитель линеен по каждому столбцу. Из урока 160 — миноры, алгебраические дополнения и разложение определителя по строке или столбцу: именно алгебраические дополнения оказались теми множителями, которые «вытаскивают» одну неизвестную из системы. Из урока 155 — смешанное произведение, давшее геометрическую интерпретацию главного определителя как объёма. Из урока 163 — язык систем: совместность, определённость и теорема Кронекера — Капелли, к которой мы отсылаем всякий раз, когда $\Delta$ обращается в ноль. Из урока 164 — метод Гаусса и его стоимость $O(n^3)$, служившая эталоном во всех сравнениях.
Что изучить дальше
Следующий урок (166, матричный метод) закрывает третий классический способ решения квадратных систем: $x = A^{-1}b$. Он использует обратную матрицу из урока 161 и оказывается близким родственником правила Крамера — формула обратной матрицы через союзную состоит из тех же алгебраических дополнений. Там же появится количественная мера «плохости» системы, к которой мы несколько раз подступались в этом уроке: число обусловленности, объясняющее, почему при малом $\Delta$ решение так чувствительно к данным.
Дальше, в уроке 167, разбираются однородные системы $Ax = 0$ — ровно тот случай, где $\Delta = 0$ перестаёт быть проблемой и становится содержанием: при нулевом определителе у такой системы обязательно есть ненулевые решения, и они образуют структуру, которую описывает фундаментальная система решений. А ещё дальше, в темах про собственные значения, условие $\det(A - \lambda I) = 0$ станет главным рабочим уравнением — и там пригодится всё, что ты сейчас узнал о том, что означает обращение определителя в ноль.
Где это нужно в жизни
💻 Программирование. В графических движках и геометрических библиотеках системы $2\times2$ и $3\times3$ решаются по Крамеру напрямую, без вызова общего решателя: пересечение луча с треугольником (алгоритм Мёллера — Трумбора), барицентрические координаты точки в треугольнике, пересечение отрезков, обратная кинематика простых механизмов. На таких размерах развёрнутая формула без циклов и ветвлений быстрее любого универсального кода.
🤖 ML/AI. Сам решатель — нет, определители — да. Нормировочный множитель $\det\Sigma$ в плотности многомерного нормального распределения, слагаемое $\log\det$ в логарифме правдоподобия гауссовских смесей и гауссовских процессов, логарифм якобиана в нормализующих потоках, где от эффективности его вычисления зависит вся архитектура модели.
📊 Data Science. Формулы коэффициентов простой линейной регрессии — это буквально правило Крамера, применённое к системе нормальных уравнений (задание 30). Знаменатель $n\sum x_i^2 - (\sum x_i)^2$ в этих формулах и есть главный определитель, а его обращение в ноль означает отсутствие разброса по независимой переменной.
🔬 Наука. Расчёт токов в электрических цепях по законам Кирхгофа, разложение сил в статике, балансировка химических уравнений, определение концентраций в смесях — все эти задачи дают маленькие квадратные системы, для которых правило Крамера остаётся самым удобным ручным инструментом. Исторически именно так его и применяли полтора столетия.
💰 Финансы. Подбор портфеля из нескольких инструментов под заданные ограничения по доходности и риску, распределение затрат между статьями, задачи о смешении с ценовыми ограничениями — типовые системы двух-трёх уравнений. Отдельная ценность формул Крамера здесь в том, что они сразу показывают, как ответ зависит от исходных параметров: можно оценить, насколько сильно изменится результат при сдвиге входного показателя, не пересчитывая всё заново.
Интересные факты
-
Правило, которым сегодня открывается любой курс линейной алгебры, Габриэль Крамер опубликовал в 1750 году без доказательства и вовсе не как главный результат: оно спрятано в первом приложении к книге «Introduction à l'analyse des lignes courbes algébriques», посвящённой геометрии алгебраических кривых. Крамеру нужен был рабочий рецепт, чтобы проводить кривую через заданные точки, и он его просто описал.
-
Приоритет, скорее всего, принадлежит не Крамеру. Колин Маклорен изложил то же правило для двух и трёх уравнений в «Treatise of Algebra», вышедшем посмертно в 1748 году, а его рукописные заметки с этим результатом датируются примерно 1729 годом — на два десятилетия раньше книги Крамера. Историк математики Карл Бойер разобрал этот сюжет в статье 1966 года; имя закрепилось за Крамером во многом благодаря более удобной нотации и широкому распространению его книги.
-
В 2012 году Кен Хабгуд и Итамар Арел опубликовали в Journal of Discrete Algorithms работу «A condensation-based application of Cramer's rule for solving large-scale linear systems», где показали, что правило Крамера можно реализовать за $O(n^3)$ — с прицелом на массивно-параллельные вычисления, где независимость $n+1$ определителей друг от друга оборачивается преимуществом. В стандартные библиотеки этот подход, впрочем, так и не вошёл.
-
Один из самых экономных способов вычисления определителей — метод конденсации — придумал в 1866 году Чарльз Латвидж Доджсон, более известный как Льюис Кэрролл, автор «Алисы в Стране чудес». Он же выпустил в 1867 году «An Elementary Treatise on Determinants» — полноценный учебник по определителям, написанный тем же человеком, что и «Охота на Снарка».
-
Правило Крамера сегодня реализовано в системах символьных вычислений и отсутствует в численных. В SymPy есть метод
Matrix.cramer_solveи вариантMatrix.solve(b, method='CRAMER'), а в NumPy, SciPy, PyTorch и JAX ничего похожего нет — там системы решаются через LU-разложение. Это разделение точно отражает роль правила: инструмент для формул, а не для чисел.
Лайфхаки и полезные трюки
1. Считай $\Delta$ первым и не спеши считать остальное. Если главный определитель оказался нулевым, вычисли ровно один вспомогательный. Ненулевой — система несовместна, работа окончена. Нулевой — сразу переключайся на метод Гаусса, остальные вспомогательные определители всё равно ничего не скажут. Например, в системе с $\Delta = 0$ и $\Delta_x = 16$ (задание 4) ответ получен после двух определителей вместо трёх.
2. Ищи строку или столбец с нулями перед раскрытием определителя. Разложение по строке с двумя нулями превращает определитель $4\times4$ в два определителя $3\times3$ вместо четырёх. В задании 18 разложение $\Delta_3$ по последнему столбцу сократило работу вдвое, а в примере 5 нижнетреугольная матрица дала определитель одним умножением.
3. Проверяй ответ подстановкой — это почти бесплатно. Правило Крамера не самопроверяется: ошибка в одном знаке внутри определителя даёт правдоподобное, но неверное число. Подстановка найденных значений в одно-два исходных уравнения занимает секунды и ловит опечатки надёжнее пересчёта.
4. Если столбец свободных членов равен сумме столбцов матрицы — ответ сразу известен. Он равен $(1, 1, \dots, 1)$, потому что $Ax$ с единичными коэффициентами и есть сумма столбцов. Это заметно экономит время (задание 25) и работает как быстрый способ придумать себе систему с заранее известным ответом для тренировки.
5. Для одной неизвестной используй Крамера, даже если систему решаешь Гауссом. Если из системы $4\times4$ нужна только третья координата, два определителя дадут ответ быстрее, чем полный прямой и обратный ход. Ни один другой метод не умеет добираться до отдельной неизвестной, минуя остальные.
6. В буквенных задачах сначала разложи $\Delta$ на множители. Корни $\Delta(\lambda) = 0$ — это полный список «плохих» значений параметра, и найти их лучше до того, как считать вспомогательные определители: тогда сразу видно, какие множители сократятся в дроби. В задании 21 множитель $(a-1)^2$ ушёл из всех трёх ответов, и итоговые формулы оказались простыми.
7. Проверяй себя в коде, но правильными инструментами. Для численного ответа — numpy.linalg.solve(A, b); для определителей — numpy.linalg.det(A) или, если матрица большая, numpy.linalg.slogdet(A); для буквенных систем — sympy.Matrix(...).cramer_solve(...) или sympy.linsolve. Проверять ручные выкладки через символьный движок особенно полезно в задачах с параметром, где ошибку в знаке легко не заметить.
Правило Крамера — редкий пример темы, где главное знание не «как считать», а «где границы». Считать три определителя $3\times3$ научится любой; понимать, что нулевая четвёрка определителей не означает ничего, что двадцать уравнений по этой формуле процессор будет решать тысячелетиями и что настоящая ценность формулы — в возможности посмотреть на решение как на функцию коэффициентов, — вот это и отличает человека, который тему прошёл, от человека, который её знает. В следующем уроке мы разберём третий классический способ решения квадратных систем — через обратную матрицу — и увидим, насколько близко он родственен тому, что мы только что вывели.
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку