Линейная алгебра на Python. [Урок 4]. Определитель матрицы

Четвертый урок из цикла “Линейная алгебра на 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”.
Книга: Линейная алгебра на Python
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas.  Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Книга: Pandas. Работа с данными

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *