При сложении матриц 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])
Коммутативность – результат сложения матриц не зависит от их перестановки: A + B = B + A
Ассоциативность – результат сложения матриц не зависит от расстановки скобок: A + (B + C) = (A + B) + C
Сложение с нулевой матрицей – для любой матрицы существует нейтральный элемент, которым является нулевая матрица, сложение с которой не изменяет исходную матрицу: A + 0 = 0 + A = A
Существование противоположной матрицы – для ненулевой матрицы ( 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} $$
Умножение двух матриц 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} \]
Формат входных данных На вход программе подаются два натуральных числа 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)
Формат входных данных На вход программе подаётся натуральное число 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. Демонстрация операции перемножения матриц.