Четвертый урок из цикла “Линейная алгебра на Python“, посвящен понятию определителя матрицы и его свойствам.
Определитель матрицы
Определитель матрицы размера (n-го порядка) является одной из ее численных характеристик. Определитель матрицы A обозначается как |A| или det(A), его также называют детерминантом. Рассмотрим квадратную матрицу 2×2 в общем виде:
Определитель такой матрицы вычисляется следующим образом:
➣ Численный пример
Перед тем, как привести методику расчета определителя в общем виде, введем понятие минора элемента определителя. Минор элемента определителя – это определитель, полученный из данного, путем вычеркивания всех элементов строки и столбца, на пересечении которых стоит данный элемент. Для матрицы 3×3 следующего вида:
Минор M23 будет выглядеть так:
Введем еще одно понятие – алгебраическое дополнение элемента определителя – это минор этого элемента, взятый со знаком плюс или минус:
В общем виде вычислить определитель матрицы можно через разложение определителя по элементам строки или столбца. Суть в том, что определитель равен сумме произведений элементов любой строки или столбца на их алгебраические дополнения. Для матрицы 3×3 это правило будет выполняться следующим образом:
Это правило распространяется на матрицы любой размерности.
➣ Численный пример
➤ Пример на Python
На Python определитель посчитать очень просто. Создадим матрицу A размера 3×3 из приведенного выше численного примера:
>>> A = np.matrix('-4 -1 2; 10 4 -1; 8 3 1') >>> print(A) [[-4 -1 2] [10 4 -1] [ 8 3 1]]
Для вычисления определителя этой матрицы воспользуемся функцией det() из пакета linalg.
>>> np.linalg.det(A) -14.000000000000009
Мы уже говорили про особенность работы Python с числами с плавающей точкой, поэтому можете полученное значение округлить до -14.
Свойства определителя матрицы.
Свойство 1. Определитель матрицы остается неизменным при ее транспонировании:
➤Пример на Python
Для округления чисел будем использовать функцию round().
>>> A = np.matrix('-4 -1 2; 10 4 -1; 8 3 1') >>> print(A) [[-4 -1 2] [10 4 -1] [ 8 3 1]] >>> print(A.T) [[-4 10 8] [-1 4 3] [ 2 -1 1]] >>> det_A = round(np.linalg.det(A), 3) >>> det_A_t = round(np.linalg.det(A.T), 3) >>> print(det_A) -14.0 >>> print(det_A_t) -14.0
Свойство 2. Если у матрицы есть строка или столбец, состоящие из нулей, то определитель такой матрицы равен нулю:
➤ Пример на Python
>>> A = np.matrix('-4 -1 2; 0 0 0; 8 3 1') >>> print(A) [[-4 -1 2] [ 0 0 0] [ 8 3 1]] >>> np.linalg.det(A) 0.0
Свойство 3. При перестановке строк матрицы знак ее определителя меняется на противоположный:
➤ Пример на Python
>>> A = np.matrix('-4 -1 2; 10 4 -1; 8 3 1') >>> print(A) [[-4 -1 2] [10 4 -1] [ 8 3 1]] >>> B = np.matrix('10 4 -1; -4 -1 2; 8 3 1') >>> print(B) [[10 4 -1] [-4 -1 2] [ 8 3 1]] >>> round(np.linalg.det(A), 3) -14.0 >>> round(np.linalg.det(B), 3) 14.0
Свойство 4. Если у матрицы есть две одинаковые строки, то ее определитель равен нулю:
➤ Пример на Python
>>> A = np.matrix('-4 -1 2; -4 -1 2; 8 3 1') >>> print(A) [[-4 -1 2] [-4 -1 2] [ 8 3 1]] >>> np.linalg.det(A) 0.0
Свойство 5. Если все элементы строки или столбца матрицы умножить на какое-то число, то и определитель будет умножен на это число:
➤ Пример на Python
>>> A = np.matrix('-4 -1 2; 10 4 -1; 8 3 1') >>> print(A) [[-4 -1 2] [10 4 -1] [ 8 3 1]] >>> k = 2 >>> B = A.copy() >>> B[2, :] = k * B[2, :] >>> print(B) [[-4 -1 2] [10 4 -1] [16 6 2]] >>> det_A = round(np.linalg.det(A), 3) >>> det_B = round(np.linalg.det(B), 3) >>> det_A * k -28.0 >>> det_B -28.0
Свойство 6. Если все элементы строки или столбца можно представить как сумму двух слагаемых, то определитель такой матрицы равен сумме определителей двух соответствующих матриц:
➤ Пример на Python
>>> A = np.matrix('-4 -1 2; -4 -1 2; 8 3 1') >>> B = np.matrix('-4 -1 2; 8 3 2; 8 3 1') >>> C = A.copy() >>> C[1, :] += B[1, :] >>> print(C) [[-4 -1 2] [ 4 2 4] [ 8 3 1]] >>> print(A) [[-4 -1 2] [-4 -1 2] [ 8 3 1]] >>> print(B) [[-4 -1 2] [ 8 3 2] [ 8 3 1]] >>> round(np.linalg.det(C), 3) 4.0 >>> round(np.linalg.det(A), 3) + round(np.linalg.det(B), 3) 4.0
Свойство 7. Если к элементам одной строки прибавить элементы другой строки, умноженные на одно и тоже число, то определитель матрицы не изменится:
➤ Пример на Python
>>> A = np.matrix('-4 -1 2; 10 4 -1; 8 3 1') >>> k = 2 >>> B = A.copy() >>> B[1, :] = B[1, :] + k * B[0, :] >>> print(A) [[-4 -1 2] [10 4 -1] [ 8 3 1]] >>> print(B) [[-4 -1 2] [ 2 2 3] [ 8 3 1]] >>> round(np.linalg.det(A), 3) -14.0 >>> round(np.linalg.det(B), 3) -14.0
Свойство 8. Если строка или столбец матрицы является линейной комбинацией других строк (столбцов), то определитель такой матрицы равен нулю:
➤ Пример на Python
>>> A = np.matrix('-4 -1 2; 10 4 -1; 8 3 1') >>> print(A) [[-4 -1 2] [10 4 -1] [ 8 3 1]] >>> k = 2 >>> A[1, :] = A[0, :] + k * A[2, :] >>> round(np.linalg.det(A), 3) 0.0
Свойство 9. Если матрица содержит пропорциональные строки, то ее определитель равен нулю:
➤ Пример на Python
>>> A = np.matrix('-4 -1 2; 10 4 -1; 8 3 1') >>> print(A) [[-4 -1 2] [10 4 -1] [ 8 3 1]] >>> k = 2 >>> A[1, :] = k * A[0, :] >>> print(A) [[-4 -1 2] [-8 -2 4] [ 8 3 1]] >>> round(np.linalg.det(A), 3) 0.0
P.S.
Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.