Trong bài viết này mình sẽ hướng dẫn các bạn các phép toán trên ma trận bao gồm : Cộng, trừ và nhân 2 ma trận.
1. Cộng, Trừ 2 Ma Trận
Điều kiện để 2 ma trận có thể cộng trừ với nhau đó là chúng cần có cùng số hàng và cột.
Giả sử cần cộng 2 ma trận A và B có cùng hàng và cột để tạo ra ma trận tổng C thì C[i][j] = A[i][j] + B[i][j]
Phép trừ 2 ma trận thì bạn làm tương tự
Code :
#include <math.h>
#include <algorithm>
using namespace std;
int main() {
int n = 3, m = 4;
int a[3][4] = {
{2, 3, 1, 4},
{2, 2, 0, 7},
{1, 3, 5, 1}
};
int b[3][4] = {
{2, 0, 7, 8},
{1, 3, 5, 2},
{3, 2, 8, 1}
};
int tong[3][4], hieu[3][4];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
tong[i][j] = a[i][j] + b[i][j];
hieu[i][j] = a[i][j] - b[i][j];
}
}
printf("Tong 2 ma tran : \n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << tong[i][j] << " ";
}
cout << endl;
}
printf("Hieu 2 ma tran : \n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << hieu[i][j] << " ";
}
cout << endl;
}
return 0;
}
Output :
4 3 8 12
3 5 5 9
4 5 13 2
Hieu 2 ma tran :
0 3 -6 -4
1 -1 -5 5
-2 1 -3 0
2. Nhân 2 Ma Trận
Giả sử bạn cần nhân ma trận A[n][m] với ma trận B[p][q] thì điều kiện để xảy ra phép nhân ma trận đó là : Số cột của ma trận A bằng số hàng của ma trận B
Tức là m phải bằng p, khi đó ma trận tích sẽ có cỡ C[n][q]
Ví dụ :
A[3][4] x B[4][2] = C[3][2]
A[3][4] x B[4][5] = C[3][5]
A[2][4] X B[2][3] = Không xảy ra
Để tạo ra ma trận tích C thì C[i][j] = ∑A[i][k] * B[k][j] với k chạy từ 0 tới m (p)
Hiểu đơn giản thì khi tích phần tử C[i][j] bạn sẽ nhân lần lượt các phần tử ở hàng i của ma trận A với các phần tử ở cột j của ma trận b sau đó cộng dồn lại
Code :
#include <math.h>
#include <algorithm>
using namespace std;
int main() {
int n = 2, m = 3, q = 2;
// a[n][m], b[m][q]
int a[n][m] = {
{1, 2, 3},
{4, 5, 6}
};
int b[m][q] = {
{10, 11},
{20, 22},
{30, 33}
};
int c[n][q];
for (int i = 0; i < n; i++) {
for (int j = 0; j < q; j++) {
c[i][j] = 0;
for (int k = 0; k < m; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
cout << "Tich 2 ma tran : \n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < q; j++) {
cout << c[i][j] << " ";
}
cout << endl;
}
return 0;
}
Output :
140 154
320 352