📜  矩阵上的不同操作

📅  最后修改于: 2021-09-28 10:55:27             🧑  作者: Mango

关于矩阵的介绍,可以参考以下文章:矩阵介绍
在本文中,我们将讨论对矩阵及其属性的各种操作:

矩阵加法 –
两个矩阵 A m*n和 B m*n相加得到矩阵 C m*n 。 C的元素是A和B中对应元素的和,可以表示为:

1

矩阵相加的算法可以写成:

for i in 1 to m
   for j in 1 to n
      cij = aij + bij
C++
// C++ Program for matrix addition
 
#include 
using namespace std;
 
int main()
{
 
    int n = 2, m = 2;
    int a[n][m] = { { 2, 5 }, { 1, 7 } };
    int b[n][m] = { { 3, 7 }, { 2, 9 } };
 
    int c[n][m];
    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;
    }
}


Javascript


C++
// C++ Program for matrix subtraction
 
#include 
using namespace std;
 
int main()
{
 
    int n = 2, m = 2;
    int a[n][m] = { { 2, 5 }, { 1, 7 } };
    int b[n][m] = { { 3, 7 }, { 2, 9 } };
 
    int c[n][m];
    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;
    }
}


C++
// C++ Program for matrix Multiplication
 
#include 
using namespace std;
 
int main()
{
 
    int n = 2, m = 2;
    int a[n][m] = { { 2, 5 }, { 1, 7 } };
    int b[n][m] = { { 3, 7 }, { 2, 9 } };
 
    int c[n][m];
    int i, j, k;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            c[i][j] = 0;
            for (k = 0; k < n; k++)
                c[i][j] += a[i][k] * b[k][j];
        }
    }
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << c[i][j] << " ";
        cout << endl;
    }
}


输出:

5 12 
3 16 

时间复杂度: O(n * m)

辅助空间: O(n * m)
关键点:

  • 矩阵的加法是可交换的,这意味着 A+B = B+A
  • 矩阵的加法是结合的,这意味着 A+(B+C) = (A+B)+C
  • 矩阵 A、B 和 A+B 的顺序始终相同
  • 如果 A 和 B 的顺序不同,则无法计算 A+B
  • 加法运算的复杂度是 O(m*n) 其中 m*n 是矩阵的顺序

矩阵减法 –
两个矩阵 A m*n和 B m*n相减得到矩阵 C m*n 。 C的元素是A和B中对应元素的差值,可以表示为:

2

矩阵相减的算法可以写成:

for i in 1 to m
   for j in 1 to n
      cij = aij-bij

C++

// C++ Program for matrix subtraction
 
#include 
using namespace std;
 
int main()
{
 
    int n = 2, m = 2;
    int a[n][m] = { { 2, 5 }, { 1, 7 } };
    int b[n][m] = { { 3, 7 }, { 2, 9 } };
 
    int c[n][m];
    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;
    }
}

输出:

-1 -2 
-1 -2 

关键点:

  • 矩阵的减法是不可交换的,这意味着 AB ≠ BA
  • 矩阵的减法是非关联的,这意味着 A-(BC) ≠ (AB)-C
  • 矩阵 A、B 和 AB 的顺序始终相同
  • 如果 A 和 B 的顺序不同,则无法计算 AB
  • 减法运算的复杂度是 O(m*n) 其中 m*n 是矩阵的顺序

矩阵乘法 –
两个矩阵 A m*n和 B n*p的相乘给出了一个矩阵 C m*p 。这意味着 A 中的列数必须等于 B 中的行数才能计算 C=A*B。要计算元素 c11,将 A 的第一行的元素与 B 的第一列的元素相乘,然后将它们相加 (5*1+6*4),可以表示为:

1

阶数为 m*n 的矩阵 A 和阶数为 n*p 的矩阵 B 的乘法算法可以写为:

for i in 1 to m
   for j in 1 to p
      cij = 0
      for k in 1 to n
         cij += aik*bkj

C++

// C++ Program for matrix Multiplication
 
#include 
using namespace std;
 
int main()
{
 
    int n = 2, m = 2;
    int a[n][m] = { { 2, 5 }, { 1, 7 } };
    int b[n][m] = { { 3, 7 }, { 2, 9 } };
 
    int c[n][m];
    int i, j, k;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            c[i][j] = 0;
            for (k = 0; k < n; k++)
                c[i][j] += a[i][k] * b[k][j];
        }
    }
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << c[i][j] << " ";
        cout << endl;
    }
}

输出:

16 59 
17 70

关键点:

  • 矩阵的乘法是不可交换的,这意味着 A*B ≠ B*A
  • 矩阵的乘法是结合的,这意味着 A*(B*C) = (A*B)*C
  • 为了计算 A*B,A 中的列数必须等于 B 中的行数
  • A*B 的存在并不意味着 B*A 的存在
  • 乘法运算 (A*B) 的复杂度为 O(m*n*p) 其中 m*n 和 n*p 分别是 A 和 B 的阶
  • 计算为 A*B 的矩阵 C 的顺序是 m*p,其中 m*n 和 n*p 分别是 A 和 B 的顺序

继续阅读 – 矩阵的行列式、矩阵的伴随矩阵和逆矩阵