Сложение и вычитание матриц — правила и примеры

Матрица — это прямоугольная таблица чисел, символов или выражений, упорядоченных в строках и столбцах. Такая сетка широко применяется в математике, электротехнике и информатике. Изначально матрицы использовались для описания систем линейных уравнений.
Сегодня матрицы применяют в обработке изображений, генетическом анализе, анализе больших данных и программировании. Две самых частых операции над матрицами — сложение и вычитание. В этой статье вы узнаете, как складывать и вычитать две матрицы, какие есть ограничения и как это реализовать на популярных языках программирования.
Правила сложения матриц
Следуйте этим правилам при сложении двух матриц:
- Две матрицы можно складывать только если они одного порядка (одинаковое число строк и столбцов).
- Если матрицы одной размерности, складывайте соответствующие элементы: суммируйте элементы, стоящие в одинаковых позициях (по строке и столбцу).

В первом примере матрицы можно сложить, потому что они одинакового порядка. Во втором примере сложение невозможно — размеры различаются.
C++: программа сложения двух матриц
Ниже — C++ программа для сложения двух матриц (сохраните исходный код как есть при копировании):
// C++ program for addition of two matrices
#include
using namespace std;
// The order of the matrix is 3 x 3
#define size1 3
#define size2 3
// Function to add matrices mat1[][] & mat2[][],
// and store the result in matrix result[][]
void addMatrices(int mat1[][size2], int mat2[][size2], int result[][size2])
{
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
{
result[i][j] = mat1[i][j] + mat2[i][j];
}
}
}
// Driver code
int main()
{
// 1st Matrix
int mat1[size1][size2] = { {9, 8, 7},
{6, 8, 0},
{5, 9, 2} };
// 2nd Matrix
int mat2[size1][size2] = { {4, 7, 6},
{8, 8, 2},
{7, 3, 5} };
// Matrix to store the result
int result[size1][size2];
// Calling the addMatrices() function
addMatrices(mat1, mat2, result);
cout << "mat1 + mat2 = " << endl;
// Printing the sum of the 2 matrices
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
{
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
}
Output:
mat1 + mat2 =
13 15 13
14 16 2
12 12 7Python: программа сложения двух матриц
Ниже — реализация на Python. Код в блоке оставлен без перевода для корректного запуска:
# Python program for addition of two matrices
# The order of the matrix is 3 x 3
size1 = 3
size2 = 3
# Function to add matrices mat1[][] & mat2[][],
# and store the result in matrix result[][]
def addMatrices(mat1,mat2,result):
for i in range(size1):
for j in range(size2):
result[i][j] = mat1[i][j] + mat2[i][j]
# driver code
# 1st Matrix
mat1 = [ [9, 8, 7],
[6, 8, 0],
[5, 9, 2] ]
# 2nd Matrix
mat2 = [ [4, 7, 6],
[8, 8, 2],
[7, 3, 5] ]
# Matrix to store the result
result = mat1[:][:]
# Calling the addMatrices function
addMatrices(mat1, mat2, result)
# Printing the sum of the 2 matrices
print("mat1 + mat2 = ")
for i in range(size1):
for j in range(size2):
print(result[i][j], " ", end='')
print()
Output:
mat1 + mat2 =
13 15 13
14 16 2
12 12 7C: программа сложения двух матриц
C-реализация для сложения двух матриц (код без изменений для точности):
// C program for addition of two matrices
#include
// The order of the matrix is 3 x 3
#define size1 3
#define size2 3
// Function to add matrices mat1[][] & mat2[][],
// and store the result in matrix result[][]
void addMatrices(int mat1[][size2], int mat2[][size2], int result[][size2])
{
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
{
result[i][j] = mat1[i][j] + mat2[i][j];
}
}
}
// Driver code
int main()
{
// 1st Matrix
int mat1[size1][size2] = { {9, 8, 7},
{6, 8, 0},
{5, 9, 2} };
// 2nd Matrix
int mat2[size1][size2] = { {4, 7, 6},
{8, 8, 2},
{7, 3, 5} };
// Matrix to store the result
int result[size1][size2];
// Calling the addMatrices function
addMatrices(mat1, mat2, result);
printf("mat1 + mat2 = \n");
// Printing the sum of the 2 matrices
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
{
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
} Output:
mat1 + mat2 =
13 15 13
14 16 2
12 12 7JavaScript: программа сложения двух матриц
Пример на JavaScript (код оставлен оригинальным):
Output:
mat1 + mat2 =
13 15 13
14 16 2
12 12 7Правила вычитания матриц
Следуйте этим правилам при вычитании двух матриц:
- Две матрицы можно вычитать только если они одного порядка (одинаковая размерность).
- Если матрицы одной размерности, вычитайте соответствующие элементы: вычитайте элементы, стоящие в одинаковых позициях.

В первом примере матрицы можно вычесть, потому что они одинакового порядка. Во втором примере вычитание невозможно — размеры различаются.
C++: программа вычитания двух матриц
Ниже — C++ программа для вычитания двух матриц:
// C++ program for subtraction of two matrices
#include
using namespace std;
// The order of the matrix is 3 x 3
#define size1 3
#define size2 3
// Function to subtract matrices mat1[][] & mat2[][],
// and store the result in matrix result[][]
void subtractMatrices(int mat1[][size2], int mat2[][size2], int result[][size2])
{
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
{
result[i][j] = mat1[i][j] - mat2[i][j];
}
}
}
// Driver code
int main()
{
// 1st Matrix
int mat1[size1][size2] = { {9, 8, 7},
{6, 8, 0},
{5, 9, 2} };
// 2nd Matrix
int mat2[size1][size2] = { {4, 7, 6},
{8, 8, 2},
{7, 3, 5} };
// Matrix to store the result
int result[size1][size2];
// Calling the subtractMatrices() function
subtractMatrices(mat1, mat2, result);
cout << "mat1 - mat2 = " << endl;
// Printing the difference of the 2 matrices (mat1 - mat2)
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
{
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
} Output:
mat1 - mat2 =
5 1 1
-2 0 -2
-2 6 -3Python: программа вычитания двух матриц
Код на Python для вычитания (оригинал сохранён):
# Python program for subtraction of two matrices
# The order of the matrix is 3 x 3
size1 = 3
size2 = 3
# Function to subtract matrices mat1[][] & mat2[][],
# and store the result in matrix result[][]
def subtractMatrices(mat1,mat2,result):
for i in range(size1):
for j in range(size2):
result[i][j] = mat1[i][j] - mat2[i][j]
# driver code
# 1st Matrix
mat1 = [ [9, 8, 7],
[6, 8, 0],
[5, 9, 2] ]
# 2nd Matrix
mat2 = [ [4, 7, 6],
[8, 8, 2],
[7, 3, 5] ]
# Matrix to store the result
result = mat1[:][:]
# Calling the subtractMatrices function
subtractMatrices(mat1, mat2, result)
# Printing the difference of the 2 matrices (mat1 - mat2)
print("mat1 - mat2 = ")
for i in range(size1):
for j in range(size2):
print(result[i][j], " ", end='')
print()
Output:
mat1 - mat2 =
5 1 1
-2 0 -2
-2 6 -3C: программа вычитания двух матриц
C-версия вычитания (код сохранён):
// C program for subtraction of two matrices
#include
// The order of the matrix is 3 x 3
#define size1 3
#define size2 3
// Function to subtract matrices mat1[][] & mat2[][],
// and store the result in matrix result[][]
void subtractMatrices(int mat1[][size2], int mat2[][size2], int result[][size2])
{
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
{
result[i][j] = mat1[i][j] - mat2[i][j];
}
}
}
// Driver code
int main()
{
// 1st Matrix
int mat1[size1][size2] = { {9, 8, 7},
{6, 8, 0},
{5, 9, 2} };
// 2nd Matrix
int mat2[size1][size2] = { {4, 7, 6},
{8, 8, 2},
{7, 3, 5} };
// Matrix to store the result
int result[size1][size2];
// Calling the subtractMatrices() function
subtractMatrices(mat1, mat2, result);
printf("mat1 - mat2 = \n");
// Printing the difference of the 2 matrices (mat1 - mat2)
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
{
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
} Output:
mat1 - mat2 =
5 1 1
-2 0 -2
-2 6 -3JavaScript: программа вычитания двух матриц
Пример на JavaScript для вычитания матриц (код сохранён):
Output:
mat1 - mat2 =
5 1 1
-2 0 -2
-2 6 -3Если вы хотите посмотреть полный исходный код, используемый в этой статье, он доступен в репозитории на GitHub.
Как улучшить свои программные навыки
Регулярная практика задач по программированию развивает базовые принципы: структурирование данных, управление памятью, сложность алгоритмов и чистый код. Эти навыки необходимы для эффективной работы с матрицами и не только.
Практические заметки и дополнительные материалы
Важно: операции сложения и вычитания — элементарны, но в реальных задачах часто используют оптимизации, библиотеки и векторизованные реализации для больших матриц.
Когда это не сработает (контрпримеры)
- Матрицы разной размерности: (2×3) и (3×2) нельзя сложить/вычесть.
- При наличии специальных структур (разреженные матрицы) обычное поэлементное хранение занимает лишнюю память и время.
- Если элементы — не числа (например, строки или объекты), необходима корректная семантика операции «+»/“-“.
Альтернативные подходы
- NumPy (Python): использование numpy.add/numpy.subtract — быстро и компактно для больших массивов.
- BLAS/LAPACK: для числовых вычислений в высокопроизводительных приложениях.
- Разреженные матрицы: scipy.sparse или специальные структуры для экономии памяти.
- Векторизированный код на SIMD/GPU: для ускорения обработки больших матриц.
Интеллектуальная модель (ментальные эвристики)
- Представляйте матрицу как таблицу или изображение: операция поэлементна и не перемешивает позиции.
- Сложение/вычитание — локальные операции: каждая ячейка зависит только от соответствующих ячеек операндов.
Факт-бокс: ключевые моменты
- Условие: матрицы должны иметь одинаковое число строк и столбцов.
- Временная сложность: O(n·m) для матрицы размера n×m (проход по всем элементам).
- Память: нужен результат того же размера; для in-place-операций можно писать в первый операнд при допустимости изменения.
Чек-листы по ролям
- Студент:
- Проверь размеры матриц перед операцией.
- Покройте случаем тестов с разными размерами.
- Инженер ПО:
- Используйте библиотеки (NumPy, Eigen, Armadillo) для производительности.
- Обработайте разреженные матрицы отдельно.
- Тестировщик:
- Добавьте тесты на граничные случаи: пустые матрицы, отрицательные значения, неверные размеры.
Критерии приёмки (тесты)
- Тест 1: одинаковые матрицы 3×3 — результат равен сумме поэлементно.
- Тест 2: несоответствующие размеры — операция должна вернуть ошибку/исключение или сигнал невозможности.
- Тест 3: присутствие нулей и отрицательных чисел — корректные вычисления.
- Тест 4: разреженные матрицы — проверить производительность и корректность при использовании специальной структуры.
Краткий глоссарий (1 строка)
- Матрица: прямоугольная таблица чисел; порядок/размерность — количество строк × столбцов.
Ключевые выводы в конце: сложение и вычитание матриц просты по сути, но важна проверка размерностей и выбор подходящей реализации для задач разного масштаба.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента