Калькулятор матриц

Матрица — это таблица чисел, с которой можно делать обычную арифметику: складывать, умножать, искать определитель и обратную матрицу. Калькулятор считает результат для матриц 2×2 и 3×3, показывает тепловую карту значений и разбирает ход метода Гаусса — включая случай вырожденной матрицы, у которой обратной не существует.

Данные

Матрицы A и B размера 2×2 или 3×3. Ячейки заполняются числами; пустая ячейка — ошибка, а не ноль.

Размер матриц
Матрица A
Матрица B

Поля B нужны для сложения, вычитания и умножения; для определителя, обратной и транспонированной используется только A. При смене размера подставляется пример соответствующего размера.

Результат

—det

—

det(A)
—
tr(A)
—
det(B)
—

Тепловая карта

—

Цвет ячейки показывает величину элемента: от минимума (тёмный) к максимуму (красный). Значение подписано прямо в ячейке.

—
—

Метод Гаусса

—

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

Как считается Определитель, след, сложение, умножение, транспонирование и обратная матрица.

Матрица — прямоугольная таблица чисел. Здесь рассматриваются квадратные матрицы 2×2 и 3×3. Элемент в строке i и столбце j обозначается A[i][j]; нумерация строк идёт сверху вниз, столбцов — слева направо.

Определитель 2×2: det(A) = a·d − b·c для A = [[a, b], [c, d]]. Определитель 3×3 раскладывается по первой строке: det(A) = a·(e·i − f·h) − b·(d·i − f·g) + c·(d·h − e·g) для A = [[a, b, c], [d, e, f], [g, h, i]]. Это разложение совпадает с формулой Саррюса (правилом треугольников).

След tr(A) — сумма диагональных элементов A[1][1] + A[2][2] (и + A[3][3] для 3×3). Сложение и вычитание выполняются поэлементно: (A ± B)[i][j] = A[i][j] ± B[i][j]. Умножение — обычное матричное: (A·B)[i][j] = Σ A[i][k]·B[k][j], поэтому порядок множителей важен. Транспонирование меняет строки и столбцы местами: Aᵀ[i][j] = A[j][i].

Обратная матрица существует, только если определитель не равен нулю, и находится через алгебраические дополнения: A⁻¹ = adj(A) / det(A), где adj(A) — транспонированная матрица алгебраических дополнений. Если |det(A)| < 1e-10, матрица вырождена и обратной у неё нет — калькулятор показывает ошибку, а не число.

Контрольный пример: A = [[1, 2], [3, 4]], B = [[5, 6], [7, 8]]. Тогда det(A) = 1·4 − 2·3 = −2, tr(A) = 1 + 4 = 5, A + B = [[6, 8], [10, 12]], A − B = [[−4, −4], [−4, −4]] (её определитель равен нулю), A × B = [[19, 22], [43, 50]], Aᵀ = [[1, 3], [2, 4]], а A⁻¹ = [[−2, 1], [1,5, −0,5]].

Границы модели: расчёты идут в числах двойной точности, поэтому вывод округляется и проверка подстановкой может дать очень малую ненулевую величину вместо строгого нуля. При вычитании близких матриц и при обращении почти вырожденных матриц погрешность растёт: маленькая ошибка во входных данных сильно меняет обратную матрицу. Умножение не коммутативно: A × B и B × A — вообще говоря, разные матрицы.

Матрица — это таблица чисел, и почти вся работа с ней сводится к нескольким операциям: сложить, вычесть, перемножить, найти определитель, транспонировать или обратить. Калькулятор делает это для матриц 2×2 и 3×3, а заодно показывает, откуда берётся каждое число: тепловая карта подкрашивает элементы по величине, а панель «Метод Гаусса» раскрывает прямой ход с выбором ведущего элемента.

Что считает калькулятор

Матрица A хранит первую таблицу, матрица B — вторую. Для сложения, вычитания и умножения нужны обе; для определителя, обратной и транспонированной — только A, и тогда поля B скрываются. Размер выбирается переключателем: 2×2 по умолчанию, 3×3 по кнопке.

Крупное число в панели результата — определитель матрицы, стоящей в ответе. Под ним написано, обратима эта матрица или вырождена. Сетка результата показывает саму матрицу: для поэлементных операций — ответ, для определителя — исходную A, потому что скаляр некуда разложить по клеткам. Список ниже выводит det(A), tr(A) и det(B).

Определитель det(A) — это одно число, по которому судят об обратимости. След tr(A) — сумма элементов главной диагонали. Обратная матрица A⁻¹ существует только у матрицы с ненулевым определителем; произведение возвращает исходную: A·A⁻¹ = E, где E — единичная матрица.

Как заполнять поля

Каждая ячейка — отдельное числовое поле. Введите числа построчно: сначала верхняя строка, затем нижняя. Знак минус и десятичная дробь (через точку или запятую) принимаются как обычно. Размер переключается радиокнопками «2 × 2» и «3 × 3»; при переключении подставляется пример соответствующего размера, а операция выбирается из списка.

Пустая ячейка — ошибка, а не ноль. Пока хотя бы одно нужное поле не заполнено, результат скрывается целиком, чтобы старое число не выглядело новым ответом, а рядом появляется пояснение. Все поля обновляются на лету: ничего нажимать не нужно. Кнопка «Сбросить к примеру» возвращает размер 2×2, операцию сложения и исходные числа.

Как получается результат

Обозначения одни и те же во всех формулах: A и B — матрицы, A[i][j] — элемент в строке i и столбце j.

  • Определитель 2×2: det(A) = a·d − b·c для A = [[a, b], [c, d]].
  • Определитель 3×3: разложение по первой строке, det(A) = a·(e·i − f·h) − b·(d·i − f·g) + c·(d·h − e·g) для A = [[a, b, c], [d, e, f], [g, h, i]]. Это то же, что формула Саррюса.
  • След: tr(A) = A[1][1] + A[2][2] (и + A[3][3] для 3×3).
  • Сложение и вычитание поэлементно: (A ± B)[i][j] = A[i][j] ± B[i][j].
  • Умножение: (A·B)[i][j] = Σ A[i][k]·B[k][j] — строка A умножается на столбец B.
  • Транспонирование: Aᵀ[i][j] = A[j][i].
  • Обратная: A⁻¹ = adj(A) / det(A), где adj(A) — транспонированная матрица алгебраических дополнений.

Панель «Метод Гаусса» показывает прямой ход на матрице A. На каждом шаге выбирается ведущий элемент — наибольший по модулю в текущем столбце, начиная с текущей строки; если он не на диагонали, строки меняются местами, а нижележащие строки обнуляются вычитанием кратной ведущей строки. Красная рамка отмечает ведущую ячейку. Если в столбце нет ненулевого элемента и обмен не помогает, матрица вырождена, и об этом сообщается текстом.

Пример, который можно повторить

Возьмём A = [[1, 2], [3, 4]] и B = [[5, 6], [7, 8]] — это и есть пример по умолчанию на экране. Определитель A: det(A) = 1·4 − 2·3 = 4 − 6 = −2. След: tr(A) = 1 + 4 = 5.

Сложение: A + B = [[1 + 5, 2 + 6], [3 + 7, 4 + 8]] = [[6, 8], [10, 12]]. Вычитание: A − B = [[1 − 5, 2 − 6], [3 − 7, 4 − 8]] = [[−4, −4], [−4, −4]]; у этой матрицы обе строки одинаковы, поэтому её определитель равен нулю и она вырождена.

Умножение: (A·B)[1][1] = 1·5 + 2·7 = 19, (A·B)[1][2] = 1·6 + 2·8 = 22, (A·B)[2][1] = 3·5 + 4·7 = 43, (A·B)[2][2] = 3·6 + 4·8 = 50, то есть A × B = [[19, 22], [43, 50]], а её определитель равен 19·50 − 22·43 = 950 − 946 = 4.

Транспонирование: Aᵀ = [[1, 3], [2, 4]]. Обратная: определитель равен −2, поэтому A⁻¹ = (1/−2)·[[4, −2], [−3, 1]]. В первой строке обратной матрицы стоят −2 и 1, во второй 1,5 и −0,5. Проверка подстановкой: A·A⁻¹ даёт единичную матрицу [[1, 0], [0, 1]], как и должно быть.

Для 3×3 отдельный контрольный пример: A = [[1, 2, 3], [0, 1, 0], [5, 2, 1]]. Разложение по первой строке даёт 1·(1·1 − 0·2) − 2·(0·1 − 0·5) + 3·(0·2 − 1·5) = 1 − 0 − 15 = −14, а след равен 1 + 1 + 1 = 3.

Что показывают тепловая карта и метод Гаусса

Тепловая карта — это та же матрица, но каждая ячейка подкрашена по величине элемента: минимум тёмный, максимум красный. Цвет не меняет чисел, он только помогает заметить, где значения большие, а где почти нулевые. Легенда снизу подписывает минимальное и максимальное значение.

Панель «Метод Гаусса» разворачивает прямой ход по шагам: на каждом шаге видно, какой элемент выбран ведущим и как обнулились строки ниже. Для вырожденной матрицы ход останавливается на шаге, где ведущего элемента нет, и выводится сообщение. Это тот же процесс, что стоит за вычислением определителя и обратной матрицы, только показанный по шагам.

Где модель не работает

Главное ограничение — вырожденность. Если определитель равен нулю, обратной матрицы не существует: у системы нет единственного решения, столбцы линейно зависимы. Калькулятор в этом случае честно сообщает об ошибке, а не выдаёт бесконечность или мусор. Вычитание почти равных матриц легко приводит к вырожденной разности: в примере выше A − B дала одинаковые строки.

Умножение не коммутативно: A × B и B × A, вообще говоря, разные матрицы, и менять множители местами нельзя. В нашем примере A × B = [[19, 22], [43, 50]], а B × A = [[23, 34], [31, 46]] — числа заметно отличаются. Это не ошибка округления, а свойство самой операции.

Численная неустойчивость проявляется у почти вырожденных матриц. Обратная матрица содержит деление на определитель: если он мал, то крошечная погрешность во входных числах сильно меняет ответ. Практический признак — сравнить |det(A)| с порядком самих элементов: если определитель много меньше их произведения, обращению доверять нельзя. Все расчёты идут в числах двойной точности, результат выводится с округлением до значащих цифр, поэтому проверка подстановкой может дать очень малую ненулевую величину вместо строгого нуля — это округление вывода, а не ошибка метода. И наконец, здесь считаются только квадратные матрицы 2×2 и 3×3: прямоугольные, системы линейных уравнений и собственные значения остаются за рамками.