Доброго времени суток! Сегодня поговорим об обратных матрицах и транспонировании.
Описание матриц, я давал в другой своей статье, умножение матриц: https://dzen.ru/a/Y-yDOz7fkwLABh5Q
Обратной для матрицы A называют матрицу A^{-1}, которая удовлетворяет условию
AA^{-1}=A^{-1}A=E.
По определению обратной матрицы AA^{-1}=A^{-1}A=E, то есть матрица и обратная ей являются перестановочными. Значит, обратные матрицы существуют только для квадратных. Поэтому преобразование вектора из плоскости в пространство необратимо: матрица такого преобразования будет прямоугольной.
Обратные матрицы, как и обратные числа, заменяют собой операцию деления. Вместо деления на 5 можно умножить на обратное число 0.2. А вместо деления на матрицу — умножить на обратную матрицу.
У любого ненулевого числа есть всего одно, обратное ему. Точно так же дела обстоят и с матрицами.
У матрицы может быть не более одной обратной.
Вычисление обратной матрицы в коде.
Поиск обратной матрицы — трудоёмкое дело. Даже для матриц 2×2 нужен алгоритм в несколько действий, а в реальных задачах матрицы намного крупнее.
Поэтому сейчас мы будем вычислять обратные матрицы в Python.
Вычислим обратную для матрицы (-7 8
2 31)
Нам понадобится функция np.linalg.inv(a), где a — исходная матрица. Чтобы проверить, действительно ли получилась обратная матрица, а не хаотичный набор чисел, применим матричное произведение.
Теперь возьмём матрицу побольше: ( 9 -7 15
6 3 29
0 3 7 )
Вместо единичной матрицы получилось что-то странное, но мы всё объясним.
Дело в том, что все десятичные дроби код выводит в экспоненциальном виде. Это представление числа в виде произведения мантиссы, то есть числа не меньше 1 и не больше 10, и экспоненты — степени десятки, которая отделяется от мантиссы буквой e.
Чтобы проверка давала на выходе единичную матрицу в привычном формате, будем округлять результат до ближайшего целого. Для этого нужна функция .round().
Вот что получится для матрицы ( 9 -7 15
6 3 29
0 3 7 )
В коде получился отрицательный ноль, и это совершенно нормально. Дело в том, что Python относится к нулю как к любому другому числу со своим значением и знаком.
Свойства обратных матриц
Несколько свойств обратных матриц мы уже определили:
- AA^{-1}=A^{-1}A=E— коммутативность произведения матрицы и обратной ей;
- Обратная матрица определяется единственным образом;
- (AB)^{-1}=B^{-1}A^{-1}— расчёт матрицы, обратной произведению.
А вот и все остальные.
- Матрица, обратная обратной
Если A обратима, то A^{-1} также обратима, причём (A^{-1})^{-1}=A.
Для примера возьмём матрицу растяжения ( 2 0
0 2).
Обратная ей матрица сжимает вектор в 2 раза: (0.5 0
0 0.5).
Преобразование, обратное сжатию, — это растяжение. Матрица, обратная сжатию вектора в 2 раза, будет в 2 раза его растягивать. Это снова матрица:
( 2 0
0 2).
Транспонирование обратной матрицы
(A^−1)^T=(A^T)^−1
Вычислим в коде левую и правую части для матрицы сдвига: (1 4
0 1)
Здесь используется библиотека numpy. Она подключается оператором import -"import numpy as np".
Для того чтобы , библиотека numpy заработала необходимо установить ее сначала , командой pip install numpy и убедитесь , что используете последнюю версию Python. Команду необходимо вводить в cmd.exe.
В других ОС, существуют подобные командные строки, я работаю в операционной системе Windows.
Чтобы запустить этот код в среде разработки Python нужно в меню выбрать пункт File->New File, в появившемся окне набрать код или скопировать его туда, проверить ошибки, в меню появившегося окна выбрать Run->Run Module, программа выполнится.
Вот-так, относительно просто можно получить обратные матрицы и транспонировать матрицы в языке программирования Python.
Даю ссылку на другую мою статью, про умножение матриц:
https://dzen.ru/media/id/5f572502b7204709f04ab67c/primer-umnojeniia-matric-v-python-63ec833b3edf9302c0061e50
Маленькая просьба, поставить лайк в Дзене, если Вам понравилась публикация и подписаться, это поможет развитию канала: https://dzen.ru/id/5f572502b7204709f04ab67c