Операции над матрицами


  1. Сложение матриц
  2. Умножение матрицы на число
  3. Умножение матриц

Сложение матриц

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

Каждый элемент искомой матрицы равен сумме соответствующих элементов заданных матриц:

$$ c_{ij} = a_{ij} + b_{ij} $$

Пример. Даны две матрицы:

A = \begin{bmatrix} 2 & -3 & 1 \\ 5 & 4 & -2 \end{bmatrix} B = \begin{bmatrix} 4 & 2 & -5 \\ -4 & 1 & 3 \end{bmatrix}

Найти сумму матриц ( A + B ).

Решение. Имеем:

A + B = \begin{bmatrix} 2 & -3 & 1 \\ 5 & 4 & -2 \end{bmatrix} + \begin{bmatrix} 4 & 2 & -5 \\ -4 & 1 & 3 \end{bmatrix} = \begin{bmatrix} 6 & -1 & -4 \\ 1 & 5 & 1 \end{bmatrix}

Программа для вычисления суммы двух матриц

На вход программе подаются два натуральных числа n и m — количество строк и столбцов в матрицах, затем элементы первой матрицы, затем пустая строка, далее следуют элементы второй матрицы.

Программа для вычисления суммы двух матриц

На вход программе подаются два натуральных числа n и m — количество строк и столбцов в матрицах, затем элементы первой матрицы, затем пустая строка, далее следуют элементы второй матрицы.

n, m = input().split() matrix_1 = [] for _ in range(int(n)): row = input().split() matrix_1.append([int(i) for i in row]) input() matrix_2 = [] for _ in range(int(n)): row = input().split() matrix_2.append([int(i) for i in row]) matrix = [] for i in range(int(n)): temp = [] for j in range(int(m)): temp.append(matrix_1[i][j] + matrix_2[i][j]) matrix.append(temp) print(*matrix[i])

Свойства сложения матриц

  1. Коммутативность – результат сложения матриц не зависит от их перестановки: A + B = B + A

  2. Ассоциативность – результат сложения матриц не зависит от расстановки скобок: A + (B + C) = (A + B) + C

  3. Сложение с нулевой матрицей – для любой матрицы существует нейтральный элемент, которым является нулевая матрица, сложение с которой не изменяет исходную матрицу: A + 0 = 0 + A = A

  4. Существование противоположной матрицы – для ненулевой матрицы ( A ) всегда есть матрица ( -A ), сложение с которой даст в результате нулевую матрицу:

    A + (-A) = 0

Умножение матрицы на число

Операция умножения матрицы ( A ) на число ( k ) заключается в построении матрицы $$ kA = [k \cdot a_{ij}] $$ . Умножать на число можно матрицы любого размера. В результате умножения получается матрица того же размера, что и исходная.

Произведение матрицы ( A ) на число ( k ) – это результирующая матрица ( B = kA ), полученная умножением каждого из элементов $$ a_{ij} $$ исходной матрицы на заданное число.

Пример. Даны матрица ( A ) и число ( k ):

$$ A = \begin{bmatrix} 5 & -2 & 4 \\ 3 & 1 & -3 \end{bmatrix}, \quad k = 7 $$

Найти произведение матрицы и числа.
Решение. Имеем

$$ k \cdot A = 7 \cdot \begin{bmatrix} 5 & -2 & 4 \\ 3 & 1 & -3 \end{bmatrix} = \begin{bmatrix} 35 & -14 & 28 \\ 21 & 7 & -21 \end{bmatrix} $$

Свойства умножения матрицы на число

  1. Единица – нейтральное число умножения любой матрицы. Результат умножения на нейтральное число – исходная матрица: $$ 1 \cdot A = A $$.
  2. Ноль – результат умножения любой матрицы на ноль – нулевая матрица, все элементы которой равны нулю: $$ 0 \cdot A = 0 $$ .
  3. Для матриц одного размера и действительного числа выполняется свойство дистрибутивности умножения относительно сложения: $$ k \cdot (A + B) = k \cdot A + k \cdot B $$ .
  4. Для любой матрицы и суммы действительных чисел выполняется свойство дистрибутивности: $$ (k + n) \cdot A = k \cdot A + n \cdot A $$ .
  5. Для любой матрицы и произведения любых действительных чисел выполняется свойство ассоциативности умножения: $$ (k \cdot n) \cdot A = k \cdot (n \cdot A) $$ .

Умножение матрицы на матрицу

Определение

Умножение двух матриц A и B — это процесс вычисления результирующей матрицы C , где каждый элемент $$ c_{ij} $$ равен сумме произведений элементов соответствующей строки первой матрицы $$ a_{ir} $$ и столбца второй матрицы $$ b_{rj} $$ .

Одну матрицу можно умножать на другую только тогда, когда количество столбцов в первой матрице совпадает с количеством строк во второй матрице. То есть матрицы должны быть согласованы по размерности. Результат умножения матрицы размера $$ n \times m $$ на матрицу размером $$ m \times k $$ – матрица размером $$ n \times k $$ .

Итак, произведение матрицы $$ A_{n \times m} $$ на матрицу $$ B_{m \times k} $$ – матрица $$ C_{n \times k} $$ , элемент $$ c_{ij} $$ которой, находящийся в ( i )-ой строке и ( j )-ом столбце, равен сумме произведений элементов ( i )-ой строки матрицы ( A ) на соответствующие элементы ( j )-ого столбца матрицы ( B ).

Каждый элемент матрицы $$ C_{n \times k} $$ равен:

$$ c_{ij} = \sum_{r=1}^{m} a_{ir} \cdot b_{rj} = a_{i1} \cdot b_{1j} + a_{i2} \cdot b_{2j} + \ldots + a_{im} \cdot b_{mj} $$

где \( r \) принимает значения от \( 1 \) до \( m \).

Пример. Даны матрицы:

\[ A = \begin{bmatrix} 2 & -3 & 1 \\ 5 & 4 & -2 \end{bmatrix}, \quad B = \begin{bmatrix} -7 & 5 \\ 2 & -1 \\ 4 & 3 \end{bmatrix} \]

Решение. При перемножении матрицы \( A_{2 \times 3} \) на матрицу \( B_{3 \times 2} \) мы получаем матрицу \( C_{2 \times 2} \). Имеем:

\[ c_{11} = 2 \cdot (-7) + (-3) \cdot 2 + 1 \cdot 4 = -16, \quad c_{12} = 2 \cdot 5 + (-3) \cdot (-1) + 1 \cdot 3 = 16 \]

\[ c_{21} = 5 \cdot (-7) + 4 \cdot 2 + (-2) \cdot 4 = -35, \quad c_{22} = 5 \cdot 5 + 4 \cdot (-1) + (-2) \cdot 3 = 15 \]

Таким образом,

\[ A \cdot B = \begin{bmatrix} 2 & -3 & 1 \\ 5 & 4 & -2 \end{bmatrix} \cdot \begin{bmatrix} -7 & 5 \\ 2 & -1 \\ 4 & 3 \end{bmatrix} = \begin{bmatrix} -16 & 16 \\ -35 & 15 \end{bmatrix} \]

Свойства умножения матриц

  1. Ассоциативность: \((A \times B) \times C = A \times (B \times C)\)
  2. Дистрибутивность: \(A \times (B + C) = A \times B + A \times C\) и \((A + B) \times C = A \times C + B \times C\)
  3. Ассоциативность и коммутативность относительно умножения на число: \((k \times A) \times B = k \times (A \times B) = A \times (k \times B)\)
  4. В общем случае умножение матриц не коммутативно: \(A \times B \neq B \times A\)

Программа для умножения двух матриц

Формат входных данных На вход программе подаются два натуральных числа nn и mm — количество строк и столбцов в первой матрице, затем элементы первой матрицы, затем пустая строка. Далее следуют числа mm и kk — количество строк и столбцов второй матрицы затем элементы второй матрицы.

Формат выходных данных Программа должна вывести результирующую матрицу, разделяя элементы символом пробела

n, m = input().split() matrix_1 = [] for _ in range(int(n)): row = input().split() matrix_1.append([int(i) for i in row]) input() p, k = input().split() matrix_2 = [] for _ in range(int(p)): row = input().split() matrix_2.append([int(i) for i in row]) matrix = [] for i in range(int(n)): row = [] for j in range(int(k)): cell = 0 for r in range(int(m)): cell += matrix_1[i][r]*matrix_2[r][j] row.append(cell) matrix.append(row) # Можно и не создавать эту матрицу, просто печатать row print(*row)

Программа для возведения матрицы в n-ю степень

Формат входных данных На вход программе подаётся натуральное число nn — количество строк и столбцов в матрице, затем элементы матрицы, затем натуральное число mm.

Формат выходных данных Программа должна вывести результирующую матрицу, разделяя элементы символом пробела.

n = int(input()) matrix = [] for _ in range(n): row = input().split() matrix.append([int(i) for i in row]) m = int(input()) matrix_sqwr = [] for i in range(n): row = [] for j in range(n): cell = 0 for r in range(n): cell += matrix[i][r]*matrix[r][j] row.append(cell) matrix_sqwr.append(row) def matrix_to_power(m, mat): if m == 2: return mat else: for k in range(m-2): temp = [] for i in range(n): row = [] for j in range(n): cell = 0 for r in range(n): cell += matrix[i][r]*mat[r][j] row.append(cell) temp.append(row) mat = temp return mat result = matrix_to_power(m, matrix_sqwr) for num in result: print(*num)

Примечания

Примечание 1. Демонстрация операции перемножения матриц.