Скидка до 60% и курс в подарок 2 дня 09 :56 :09 Выбрать курс
Код
#статьи

Обратная матрица: что это такое и как её найти

Практическое руководство для матриц разной размерности.

Иллюстрация: Polina Vari для Skillbox Media

Матрицы используют, чтобы компактно записывать данные и выполнять преобразования сразу над несколькими значениями. С их помощью решают системы уравнений, изменяют координаты объектов в компьютерной графике, обрабатывают массивы данных и создают алгоритмы машинного обучения. Иногда результат такого преобразования нужно обратить — вернуть исходные значения. Для этого используют обратную матрицу.

В статье разберём, что такое обратная матрица, при каких условиях она существует и как найти её разными способами — вручную и с помощью Python.

Содержание


Что такое матрица, обратная и единичная матрица

Чтобы понять, как устроена обратная матрица, сначала разберём три понятия: обычную, квадратную и единичную матрицу.

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

Матрицы в алгебре обычно записывают в круглых скобках. Например, так выглядит матрица размером 2×2.

Изображение: Skillbox Media

Числа внутри таблицы называют элементами матрицы. У матрицы выше две строки и два столбца.

Размер матрицы обозначают m×n, где:

  • m — количество строк;
  • n — количество столбцов.

Например, матрица размером 2×3 состоит из двух строк и трёх столбцов, а матрица 3×3 — из трёх строк и трёх столбцов.

Другое важное понятие, которое нам пригодится, — единичная матрица. Она выполняет в матричных вычислениях ту же роль, что число 1 в обычном умножении: если умножить на неё другую матрицу, та не изменится.

На главной диагонали единичной матрицы стоят единицы, а на остальных позициях — нули. Единичная матрица размером 3×3 выглядит так.

Изображение: Skillbox Media

Обратной к матрице (A) называют такую матрицу A⁻¹, при умножении на которую получается единичная матрица:

A × A−1 = E

Единичная матрица (E) должна иметь тот же размер, что и исходная матрица (A). Если обратная матрица существует, матрицу (A) называют обратимой или невырожденной.

Похожий принцип работает с обычными числами. Обратным для числа 5 будет число 1/5​, потому что их произведение равно единице.

Изображение: Skillbox Media

Смысл обратной матрицы можно представить как отмену преобразования. Например, матрица (A) может повернуть, растянуть или сжать объект в пространстве. Матрица A⁻¹ выполняет противоположное действие и возвращает объект в исходное положение. Это часто используется в компьютерной графике.

Когда обратная матрица существует

Обратная матрица существует не всегда. Чтобы определить, можно ли её найти, вычисляют определитель исходной матрицы.

Определитель, или детерминант, — это число, которое вычисляют для квадратной матрицы и обозначают как det (A) или |A|. Он характеризует свойства матрицы и связанного с ней линейного преобразования.

Перед поиском обратной матрицы достаточно проверить значение определителя:

  • если det (A) ≠ 0, обратная матрица существует;
  • если det (A) = 0, обратной матрицы нет.

Матрицу с нулевым определителем называют вырожденной.

Чтобы не перегружать объяснение теорией, рассмотрим формулу для матрицы размером 2×2.

Представим матрицу.

Изображение: Skillbox Media

Определитель для неё вычисляется по формуле:

det = ad − bc, где det — это детерминант.

Например, для матрицы ниже детерминант равен:

det (A) = 5 × 6 − 2 × 3 = 30 − 6 = 24.

Определитель матрицы A не равен нулю, поэтому матрица обратима — для неё можно найти обратную матрицу.

Изображение: Skillbox Media

Как найти обратную матрицу 2×2

Для матриц размером 2×2 существует готовая формула, поэтому находить обратную матрицу для них сравнительно просто. В общем виде матрица 2×2 выглядит так.

Изображение: Skillbox Media

Найдём для неё определитель по формуле: det = ad − bc. Если он не равен нулю, то матрица обратима. В этом случае обратная матрица вычисляется по такой формуле.

Изображение: Skillbox Media

Чтобы разобраться в работе формулы, решим реальную задачу. Представим матрицу.

Изображение: Skillbox Media

Найдём для неё определитель:

det (A) = 3 × 6 − 2 × 4 = 10

Так как определитель не равен нулю — значит, матрица обратимая.

Используем формулу.

Изображение: Skillbox Media

Умножим каждый элемент матрицы на 1/10. В результате получим обратную матрицу.

Изображение: Skillbox Media

Как найти обратную матрицу 3×3, 4×4 и более

Для матриц с размерностью 3×3, 4×4 и больше одной формулы не существует. Для них придётся использовать один из двух методов:

  • вычисление с помощью алгебраических дополнений;
  • метод Гаусса — Жордана, который основан на элементарных преобразованиях строк.

Разберём каждый из них подробно.

Метод алгебраических дополнений

Представим матрицу 3×3.

Изображение: Skillbox Media

Шаг 1: проверим обратимость. Для этого убедимся, что определитель матрицы не равен нулю. Определитель будем считать по следующей формуле.

Изображение: Skillbox Media

Шаг 2: найдём матрицу миноров. На первый взгляд этот этап может показаться сложным, но принцип вычисления довольно прост.

Минор элемента — это определитель матрицы 2×2, которая остаётся после вычёркивания строки и столбца, где находится этот элемент. Чтобы не запутаться, удобно последовательно зачёркивать нужные строки и столбцы на бумаге.

Например, найдём минор элемента a в левом верхнем углу. Для этого вычеркнем из исходной матрицы первую строку и первый столбец. Останется матрица 2×2.

Изображение: Skillbox Media

Вычислим для неё определитель:

M11 = det (M) = e × i − f × h

Минор для (b): вычёркиваем первую строку и второй столбец и находим определитель.

Изображение: Skillbox Media

M12 = det (M) = d × i − f × g

Аналогично считаем миноры для остальных элементов матрицы:

M13 = d × h − e × g

M21 = b × i − c × h

M22 = a × i − c × g

M23 = a × h − b × g

M31 = b × f−c × e

M32 = a × f − c × d

M33 = a × e − b × d

Шаг 3: считаем матрицу алгебраических дополнений С. Для каждого элемента aij, где a — элемент матрицы, i — номер строки и j — номер столбца, нужно взять минор Mij и умножить на (−1)i+j.

Получается следующее распределение:

  • для элемента в первой строке и первом столбце: (−1)(1+1) = (−1)2 = 1, знак остаётся положительным;
  • для элемента в первой строке и втором столбце: (−1)(1+2) = (−1)3 = −1, знак меняется;
  • для элемента во второй строке и втором столбце: (−1)(2+2) = (−1)4 = 1, знак остаётся положительным.

В результате знаки для матрицы 3×3 располагаются в шахматном порядке.

Изображение: Skillbox Media

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

C11 = (+1) × (e × i − f × h) = e × i − f × h

C12 = (−1) × (d × i − f × g) = f × g − d × i

C13 = (+1) × (d × h − e × g) = d × h − e × g

И так далее для всех девяти элементов.

Шаг 3: транспонируем матрицу, то есть поменяем местами строки и столбцы.

Изображение: Skillbox Media

Теперь разделим полученную матрицу на определитель, то есть разделим на определитель каждый её элемент. В итоге получим обратную матрицу.

Изображение: Skillbox Media

Попрактикуемся на практике. Представим, что у нас есть матрица 3×3, для которой необходимо найти обратную.

Изображение: Skillbox Media

Рассчитаем определитель по формуле:

det (A) = a × (e x i − f x h) − b × (d × i − f × g) + c × (d × h − e × g)

Значения каждой переменной возьмём из матрицы.

Изображение: Skillbox Media

Подставим числа:

det (A) = 1 × (1 × 6 − 3×5) − 3 × (1 × 6 − 3 × 2) + 4 × (1 × 5 − 1 × 2) = 1 × (−9) − 3 × 0 + 4 × 3 = −9 + 0 + 12 = 3

Детерминант не равен 0 — значит, матрица обратимая.

Теперь найдём миноры.

Изображение: Skillbox Media

Учтём знаки и получим матрицу дополнений.

Изображение: Skillbox Media

Транспонируем матрицу.

Изображение: Skillbox Media

Разделим каждый элемент на определитель и получим обратную матрицу.

Изображение: Skillbox Media

Задача успешно решена.

Метод Гаусса — Жордана

Метод алгебраических дополнений нагляден, но с ростом размера матрицы становится громоздким — например, для матрицы 4×4 придётся считать 16 определителей 3×3.

На практике для матриц 3×3 и больше чаще используют метод Гаусса — Жордана. Он основан на элементарных преобразованиях строк и одинаково хорошо работает для матриц любой размерности.

Идея метода такая. Рядом с исходной матрицей A записывают единичную матрицу E того же размера — получается расширенная матрица [A | E]. Затем над строками выполняют элементарные преобразования, приводя левую часть к единичной матрице. Те же преобразования автоматически применяются и к правой части — и когда слева получается E, справа оказывается обратная матрица A⁻¹.

В методе разрешены три вида элементарных преобразований строк: перестановка двух строк местами, умножение строки на ненулевое число и прибавление к одной строке другой строки, умноженной на число.

Разберём на примере. Возьмём матрицу.

Изображение: Skillbox Media

Запишем для неё расширенную матрицу [A | E].

Изображение: Skillbox Media

Шаг 1: получаем единицу в левом верхнем углу. Удобнее всего поменять местами первую и третью строки — тогда в левом верхнем углу окажется 1, и не придётся работать с дробями.

Изображение: Skillbox Media

Шаг 2: обнуляем первый столбец под ведущей единицей. В первой строке единица уже стоит, во второй строке первый элемент — ноль, трогать её не нужно. Из третьей строки вычитаем первую, умноженную на 2.

Изображение: Skillbox Media

Шаг 3: получаем единицу во втором столбце. Поменяем местами вторую и третью строки, чтобы ведущим элементом стала 1, а не 3.

Изображение: Skillbox Media

Теперь обнулим второй столбец в третьей строке — вычтем из неё вторую строку, умноженную на 3.

Изображение: Skillbox Media

Шаг 4: получаем единицу в третьем столбце. Делим третью строку на 25.

Изображение: Skillbox Media

Шаг 5: обнуляем третий столбец выше ведущей единицы. Из первой строки вычитаем третью, умноженную на 4; ко второй прибавляем третью, умноженную на 8.

Изображение: Skillbox Media

Слева получилась единичная матрица — значит, справа стоит обратная. Переведём дроби в десятичный вид.

Изображение: Skillbox Media

Всё получилось. Мы получили обратную матрицу, а значит задача решена.

Метод Гаусса — Жордана масштабируется на матрицы любого размера: для 4×4, 5×5 и больше алгоритм тот же, меняется лишь число шагов. Если в процессе преобразований какой-то столбец не удаётся сделать ведущим — то есть на нужной позиции и ниже стоят одни нули, — значит, определитель матрицы равен нулю и обратной матрицы не существует.

Как проверить вычисления

Есть достаточно простой способ проверить, что рассчитанная матрица — действительно обратная к исходной: детерминант обратной матрицы должен удовлетворять такому уравнению.

Изображение: Skillbox Media

Найдём детерминант рассчитанной выше матрицы — просто подставим значения в формулу.

Изображение: Skillbox Media

Когда определители двух матриц известны, можно проверить точность вычислений.

Изображение: Skillbox Media
Изображение: Skillbox Media

Обратная матрица посчитана правильно.

Как рассчитать обратную матрицу на Python

Находить обратную матрицу вручную удобно для небольших учебных примеров. При работе с реальными данными проще использовать библиотеку NumPy, в которой есть функции для автоматизации вычислений.

Найдём обратную матрицу для матрицы 3×3:

import numpy as np

# Задаём исходную матрицу A
A = np.array([
   [2, 1, 0],
   [0, 5, 1],
   [2, 1, 1]
], dtype=float)

# Вычисляем обратную матрицу
A_inv = np.linalg.inv(A)

# Выводим результат
print("Обратная матрица для A:")
print(A_inv)

В результате получим:

Обратная матрица для A:
[[ 0.4 -0.1  0.1]
 [ 0.2  0.2 -0.2]
 [-1.   0.   1. ]]

Важно учитывать, что функция np.linalg.inv () работает только для квадратных матриц с ненулевым определителем. Если обратной матрицы не существует, NumPy выдаст ошибку LinAlgError. Чтобы программа не завершилась с ошибкой, вычисление можно поместить в блок try:

try:
    A_inv = np.linalg.inv(A)
    print(A_inv)
except np.linalg.LinAlgError:
    print("Обратной матрицы не существует")

Если вы хотите понять, как работает код на Python без использования NumPy, можно написать функции определения детерминанта и расчёта по методу алгебраических преобразований без использования специализированных библиотек.

Посмотреть код

# Функция для вычисления детерминанта 3x3 матрицы
def det3x3(M):
   return (
           M[0][0] * (M[1][1] * M[2][2] - M[1][2] * M[2][1])
           - M[0][1] * (M[1][0] * M[2][2] - M[1][2] * M[2][0])
           + M[0][2] * (M[1][0] * M[2][1] - M[1][1] * M[2][0])
   )


# Функция для вычисления обратной матрицы
def inverse_matrix(M):
   det = det3x3(M)
   print(f"Детерминант исходной матрицы: {det}")

   if det == 0:
       raise ValueError("Матрица вырожденная, обратной не существует")

   cofactors = [
       [
           (M[1][1] * M[2][2] - M[1][2] * M[2][1]),
           -(M[1][0] * M[2][2] - M[1][2] * M[2][0]),
           (M[1][0] * M[2][1] - M[1][1] * M[2][0])
       ],
       [
           -(M[0][1] * M[2][2] - M[0][2] * M[2][1]),
           (M[0][0] * M[2][2] - M[0][2] * M[2][0]),
           -(M[0][0] * M[2][1] - M[0][1] * M[2][0])
       ],
       [
           (M[0][1] * M[1][2] - M[0][2] * M[1][1]),
           -(M[0][0] * M[1][2] - M[0][2] * M[1][0]),
           (M[0][0] * M[1][1] - M[0][1] * M[1][0])
       ]
   ]

   # Транспонирование матрицы дополнений
   adjugate = [[cofactors[j][i] for j in range(3)] for i in range(3)]

   # Деление на детерминант
   inverse = [[adjugate[i][j] / det for j in range(3)] for i in range(3)]

   return inverse, det


# Пример матрицы (det ≠ 1)
A = [
   [2, 1, 0],
   [0, 3, 1],
   [1, 0, 4]
]

# Вычисляем обратную матрицу
A_inv, det_A = inverse_matrix(A)

print("\nОбратная матрица A^-1:")
for row in A_inv:
   print(row)

# Детерминант обратной матрицы
det_inverse = det3x3(A_inv)
print(f"\nДетерминант обратной матрицы: {det_inverse}")

# Проверка свойства
print(f"1 / det(A) = {1 / det_A}")

if abs(det_inverse - 1 / det_A) < 1e-9:
   print("\nПроверка пройдена: det(A^-1) = 1 / det(A)")
else:
   print("\nОшибка: свойство не выполняется")

В результате получим:

Детерминант исходной матрицы: 25

Обратная матрица A^-1:
[0.48, -0.16, 0.04]
[0.04, 0.32, -0.08]
[-0.12, 0.04, 0.24]

Детерминант обратной матрицы: 0.03999999999999999
1 / det(A) = 0.04

Проверка пройдена: det(A^-1) = 1 / det(A)

Что нужно запомнить

Обратная матрица помогает «отменить» действие исходной матрицы. С её помощью можно решать системы линейных уравнений, восстанавливать исходные данные после преобразования и выполнять обратные вычисления. Однако обратная матрица существует только у квадратных матриц с ненулевым определителем.

Как выбрать метод для нахождения обратной матрицы:

  • Матрица 2×2: используйте готовую формулу. Это самый быстрый способ для небольшой матрицы.
  • Матрица 3×3: применяйте метод алгебраических дополнений. Для этого потребуется найти миноры, составить матрицу алгебраических дополнений, транспонировать её и разделить на определитель.
  • Матрица 3×3 и больше: используйте метод Гаусса — Жордана. Допишите справа единичную матрицу и с помощью элементарных преобразований превратите левую часть в единичную. Справа получится обратная матрица.
  • Матрица любого размера — используйте специализированные библиотеки, например NumPy. Это ускорит вычисления и снизит риск арифметических ошибок.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Интересуетесь технологиями? Выберите бесплатный курс и попробуйте себя в IT
Получите реальный опыт работы ИТ-специалиста на бесплатных курсах Skillbox
Попробуйте 4 бесплатных курса и выберите подходящую ИТ-профессию:

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе.
Смотреть программу
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована