Гид по технологиям

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

4 min read Математика Обновлено 11 Apr 2026
Сложение и вычитание матриц — правила и примеры
Сложение и вычитание матриц — правила и примеры

Прямоугольная сетка чисел — иллюстрация матрицы

Матрица — это прямоугольная таблица чисел, символов или выражений, упорядоченных в строках и столбцах. Такая сетка широко применяется в математике, электротехнике и информатике. Изначально матрицы использовались для описания систем линейных уравнений.

Сегодня матрицы применяют в обработке изображений, генетическом анализе, анализе больших данных и программировании. Две самых частых операции над матрицами — сложение и вычитание. В этой статье вы узнаете, как складывать и вычитать две матрицы, какие есть ограничения и как это реализовать на популярных языках программирования.

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

Следуйте этим правилам при сложении двух матриц:

  • Две матрицы можно складывать только если они одного порядка (одинаковое число строк и столбцов).
  • Если матрицы одной размерности, складывайте соответствующие элементы: суммируйте элементы, стоящие в одинаковых позициях (по строке и столбцу).

Иллюстрация сложения матриц: поэлементное суммирование

В первом примере матрицы можно сложить, потому что они одинакового порядка. Во втором примере сложение невозможно — размеры различаются.

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 7

Python: программа сложения двух матриц

Ниже — реализация на 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 7

C: программа сложения двух матриц

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 7

JavaScript: программа сложения двух матриц

Пример на 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 -3

Python: программа вычитания двух матриц

Код на 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 -3

C: программа вычитания двух матриц

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 -3

JavaScript: программа вычитания двух матриц

Пример на 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 строка)

  • Матрица: прямоугольная таблица чисел; порядок/размерность — количество строк × столбцов.

Ключевые выводы в конце: сложение и вычитание матриц просты по сути, но важна проверка размерностей и выбор подходящей реализации для задач разного масштаба.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро