关于矩阵的介绍,可以参考以下文章:矩阵介绍
在本文中,我们将讨论对矩阵及其属性的各种操作:
矩阵加法 –
两个矩阵 A m*n和 B m*n相加得到矩阵 C m*n 。 C的元素是A和B中对应元素的和,可以表示为:
矩阵相加的算法可以写成:
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中对应元素的差值,可以表示为:
矩阵相减的算法可以写成:
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),可以表示为:
阶数为 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 的顺序
继续阅读 – 矩阵的行列式、矩阵的伴随矩阵和逆矩阵