Арифметические действия с матрицами.


Довольно часто в программировании мы сталкиваемся с двумерными матрицами. Матрица - это такая структура, в которой m-cтрок и n-столбцов. Поэтому возникла необходимость написать статью про то, что можно совершать действия с матрицами(умножение, сложение, вычитание, вынесение минуса из матрицы, внесение минуса в матрицу и мн.другое). Но сегодня разберём только разность, сумму, произведение матриц.

$$ { A = \begin{pmatrix} A_{11} A_{12} \\ A_{21} A_{22} \\ \end{pmatrix} B = \begin{pmatrix} B_{11} B_{12} \\ B_{21} B_{22} \\ \end{pmatrix} } $$ $$ { C_{11} = A_{11} + B_{11} \\ C_{12} = A_{11} + B_{12} \\ C_{21} = A_{21} + B_{11} \\ C_{22} = A_{21} + B_{12} \\ } $$

Операция сложения двух матриц А и В представляет собой вычисление результирующей матрицы С , каждый элемент $$ c_{ij} $$ которой равен сумме $$ a_{ij} + b_{ij} $$.

$$ { A = \begin{pmatrix} 1 \quad 2 \quad 3\\ 4 \quad 5 \quad 6\\ 7 \quad 8 \quad 9 \end{pmatrix} B = \begin{pmatrix} 9 \quad 8 \quad 7\\ 6 \quad 5 \quad 4\\ 3 \quad 2 \quad 1 \end{pmatrix} } $$ $$ { C_{11} = 1 + 9 = 10 \\ C_{12} = 2 + 8 = 10 \\ C_{13} = 3 + 7 = 10 \\ C_{21} = 4 + 6 = 10 \\ C_{22} = 5 + 5 = 10 \\ C_{23} = 6 + 4 = 10 \\ C_{31} = 7 + 3 = 10 \\ C_{32} = 8 + 2 = 10 \\ C_{33} = 9 + 1 = 10 \\ } $$

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

Сумма матриц (C++)

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int a[n][n], b[n][n], c[n][n];
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
            cin >> a[i][j]; // вводим элементы матрицы A

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
            cin >> b[i][j]; // вводим элементы матрицы B

    // cумма матриц
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
            c[i][j] = a[i][j] + b[i][j];
    // выводим результат
    for(int i = 0; i < n; ++i){
        for(int j = 0; j < n; ++j)
            cout << c[i][j] << " ";
        cout << endl;
    }
    return 0;
}

$$ { A = \begin{pmatrix} A_{11} A_{12} \\ A_{21} A_{22} \\ \end{pmatrix} B = \begin{pmatrix} B_{11} B_{12} \\ B_{21} B_{22} \\ \end{pmatrix} } $$ $$ { C_{11} = A_{11} - B_{11} \\ C_{12} = A_{11} - B_{12} \\ C_{21} = A_{21} - B_{11} \\ C_{22} = A_{21} - B_{12} \\ } $$

Операция вычитания двух матриц А и В представляет собой вычисление результирующей матрицы С , каждый элемент $$ c_{ij} $$ которой равен разности $$ a_{ij} - b_{ij} $$.

$$ { A = \begin{pmatrix} 1 \quad 2 \quad 3\\ 4 \quad 5 \quad 6\\ 7 \quad 8 \quad 9 \end{pmatrix} B = \begin{pmatrix} 9 \quad 8 \quad 7\\ 6 \quad 5 \quad 4\\ 3 \quad 2 \quad 1 \end{pmatrix} } $$ $$ { C_{11} = 1 - 9 = -8 \\ C_{12} = 2 - 8 = -6 \\ C_{13} = 3 - 7 = -4 \\ C_{21} = 4 - 6 = -2 \\ C_{22} = 5 - 5 = 0 \\ C_{23} = 6 - 4 = 2 \\ C_{31} = 7 - 3 = 4 \\ C_{32} = 8 - 2 = 6 \\ C_{33} = 9 - 1 = 8 \\ } $$

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

Разность матриц (С++)

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int a[n][n], b[n][n], c[n][n];
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
            cin >> a[i][j]; // вводим элементы матрицы A

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
            cin >> b[i][j]; // вводим элементы матрицы B

    // разность матриц
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
            c[i][j] = a[i][j] - b[i][j];
    // выводим результат
    for(int i = 0; i < n; ++i){
        for(int j = 0; j < n; ++j)
            cout << c[i][j] << " ";
        cout << endl;
    }
    return 0;
}



$$ { A = \begin{pmatrix} A_{11} A_{12} \\ A_{21} A_{22} \\ A_{31} A_{32} \end{pmatrix} B = \begin{pmatrix} B_{11} B_{12} \\ B_{21} B_{22} \\ B_{31} B_{32} \end{pmatrix} } $$ $$ { C_{11} = A_{11} * B_{11} + A_{12} * B_{21} \\ C_{12} = A_{11} * B_{12} + A_{12} * B_{22} \\ C_{21} = A_{21} * B_{11} + A_{22} * B_{21} \\ C_{22} = A_{21} * B_{12} + A_{22} * B_{22} \\ C_{31} = A_{31} * B_{11} + A_{32} * B_{21} \\ C_{32} = A_{31} * B_{12} + A_{32} * B_{22} } $$

Операция умножения двух матриц А и В представляет собой вычисление результирующей матрицы С , каждый элемент $$ c_{kj} $$ которой равен сумме произведений элементов в соответствующей строке первой матрицы $$ a_{kj} $$ и элементов в столбце второй матрицы $$ b_{kj} $$.

$$ { A = \begin{pmatrix} 1 \quad 2 \quad 3\\ 4 \quad 5 \quad 6\\ 7 \quad 8 \quad 9 \end{pmatrix} B = \begin{pmatrix} 9 \quad 8 \quad 7\\ 6 \quad 5 \quad 4\\ 3 \quad 2 \quad 1 \end{pmatrix} } $$ $$ { C_{11} = 1 * 9 + 2 * 6 + 3 * 3 = 30 \\ C_{12} = 1 * 8 + 2 * 5 + 3 * 2 = 26 \\ C_{13} = 1 * 7 + 2 * 4 + 3 * 1 = 18 \\ C_{21} = 4 * 9 + 5 * 6 + 6 * 3 = 84 \\ C_{22} = 4 * 8 + 5 * 5 + 6 * 2 = 69 \\ C_{23} = 4 * 7 + 5 * 4 + 6 * 1 = 54 \\ C_{31} = 7 * 9 + 8 * 6 + 9 * 3 = 147 \\ C_{32} = 7 * 8 + 8 * 5 + 9 * 2 = 114 \\ C_{33} = 7 * 7 + 8 * 4 + 9 * 1 = 90 \\ } $$

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

Произведение матриц (С++)

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int a[n][n], b[n][n], c[n][n];
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
            cin >> a[i][j]; // вводим элементы матрицы A

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
            cin >> b[i][j]; // вводим элементы матрицы B
    // произведение матриц
    for(int i = 0; i < n; ++i){
        for(int j = 0; j < n; ++j){
            int s = 0;
            for(int h = 0; h < n; ++h)
                s += a[i][h] * b[h][j];
            c[i][j] = s;
        }
    }
    // выводим результат
    for(int i = 0; i < n; ++i){
        for(int j = 0; j < n; ++j)
            cout << c[i][j] << " ";
        cout << endl;
    }
    return 0;
}



Спасибо, что прочитали мою повесть. Буду признателен, если напишите свои отзывы в комментариях.


Чтобы написать комментарии вам нужно войти в систему или зарегистрируйтесь

Комментарии