Ma trận đóng một vai trò quan trọng trong nhiều lĩnh vực khác nhau, bao gồm đồ họa máy tính, mật mã và truyền thông không dây. Ma trận là một mảng hình chữ nhật gồm các số được sắp xếp theo hàng và cột, dùng để biểu diễn một đối tượng toán học hoặc thuộc tính của nó.
Một trong những thao tác bạn có thể cần thực hiện trên chúng là phép nhân ma trận. Điều này được sử dụng trong nhiều lĩnh vực như tính toán khí động học, xử lý tín hiệu, xử lý hình ảnh và phân tích địa chấn. Nhưng chính xác làm thế nào để bạn nhân ma trận?
Cách để Nhân hai ma trận
Bạn biểu diễn thứ tự của ma trận dưới dạng tích của số hàng (m) và số cột (n). Để nhân hai ma trận thì số cột của ma trận thứ nhất phải bằng số hàng của ma trận thứ hai.
Nếu bạn có hai ma trận, ma trận A cấp m × n và B cấp n × p, thì cấp của ma trận tích sẽ là m × p. Ví dụ, giả sử bạn có một ma trận A chứa hai hàng (m) và ba cột (n) và một ma trận B chứa ba hàng (n) và hai cột (p). Ma trận kết quả sẽ bao gồm hai hàng và hai cột:
Bạn nhân hai ma trận bằng tích vô hướng. Để lấy giá trị của phần tử đầu tiên của ma trận kết quả, hãy nhân và cộng các phần tử của hàng đầu tiên của ma trận thứ nhất và hàng đầu tiên của phần tử ma trận thứ hai theo phần tử như sau:
(1, 2, 3) • (7, 9, 11) = 1×7 + 2×9 + 3×11 = 58
Tương tự, đối với phần tử thứ hai, nhân hàng đầu tiên của ma trận thứ nhất và cột thứ hai của ma trận thứ hai là:
(1, 2, 3) • (8, 10, 12) = 1×8 + 2×10 + 3×12 = 64
Đối với phần tử thứ ba, nhân hàng thứ hai của ma trận thứ nhất và cột đầu tiên của ma trận thứ hai là:
(4, 5, 6) • (7, 9, 11) = 4×7 + 5×9 + 6×11 = 139
Đối với phần tử thứ tư, nhân hàng thứ hai của ma trận thứ nhất và cột thứ hai của ma trận thứ hai là:
(4, 5, 6) • (8, 10, 12) = 4×8 + 5×10 + 6×12 = 154
Do đó, ma trận kết quả là:
Bạn có thể khám phá và xây dựng các chương trình khác nhau cho các hoạt động khác nhau trên ma trận, chẳng hạn như:
Một thuật toán để nhân hai ma trận
Thực hiện theo thuật toán này để xây dựng chương trình nhân hai ma trận bất kỳ:
- Bắt đầu chương trình.
- Nhập các hàng và cột của ma trận đầu tiên.
- Nhập các hàng và cột của ma trận thứ hai.
- Nếu ma trận không tương thích để nhân, hãy in lỗi và thoát.
- Xác định một ma trận và nhập các số trong ma trận đầu tiên.
- Xác định một ma trận khác và nhập số vào ma trận thứ hai.
- Định nghĩa một ma trận để lưu trữ kết quả của phép nhân hai ma trận.
- Đặt một vòng lặp để lặp qua hàng của ma trận đầu tiên.
- Thiết lập một vòng lặp bên trong để lặp qua cột của ma trận thứ hai.
- Đặt một vòng lặp bên trong khác để lặp qua cột của ma trận đầu tiên.
- Nhân và cộng các phần tử bằng công thức mu[i][j] += m1[i][k] * m2[k][j] và lưu trữ kết quả của phép nhân trong ma trận kết quả.
- Hiển thị ma trận kết quả.
- Thoát khỏi chương trình.
Cách thực hiện phép nhân ma trận bằng C
Toàn bộ mã nguồn để nhân ma trận bằng C có trong kho GitHub này và miễn phí sử dụng.
Nhập thư viện stdio để nhập số và hiển thị đầu ra tương ứng. khai báo chính và yêu cầu người dùng nhập số cột và số hàng cho cả hai ma trận bằng cách sử dụng in() hàm số.
Sử dụng scanf() chức năng nhận đầu vào. %d là công cụ xác định định dạng thập phân đảm bảo rằng chương trình đọc đầu vào dưới dạng số.
int main()
{
int r1, r2, c1, c2;
printf("Enter the number of rows for the first matrix:n");
scanf("%d", &r1);
printf("Enter the number of columns for the first matrix:n");
scanf("%d", &c1);
printf("Enter the number of rows for the second matrix:n");
scanf("%d", &r2);
printf("Enter the number of columns for the second matrix:n");
scanf("%d", &c2);
Kiểm tra xem phép nhân ma trận có khả thi không. Nếu số cột của ma trận thứ nhất không bằng số hàng của ma trận thứ hai thì hiển thị lỗi và thoát.
if (c1 != r2) {
printf("The matrices cannot be multiplied together");
exit(-1);
}
Nếu tất cả đều tốt, hãy xác định hai mảng nhiều chiều, m1 và m2, với kích thước mà người dùng cung cấp. Yêu cầu người dùng nhập lần lượt các phần tử của cả hai ma trận. Sử dụng lồng nhau vì vòng lặp để lấy đầu vào cho cả hàng và cột của ma trận. Vòng lặp for bên ngoài lặp qua các hàng của ma trận và vòng lặp bên trong lặp qua cột của ma trận.
int m1[r1][c1], m2[r2][c2];
printf("Enter the elements of the first matrixn");
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c1; j++) {
scanf("%d", &m1[i][j]);
}
}
printf("Enter the elements of the second matrixn");
for (int i = 0; i < r2; i++) {
for (int j = 0; j < c2; j++) {
scanf("%d",&m2[i][j]);
}
}
Xác định một ma trận thứ ba, mu, theo thứ tự r1 * c2 để lưu trữ kết quả. Sử dụng lồng nhau vì vòng lặp để thực hiện phép nhân. Vòng lặp for ngoài cùng lặp qua các hàng, vòng lặp bên trong tiếp theo lặp qua các cột và vòng lặp trong cùng thực hiện phép nhân. Sử dụng công thức mu[i][j] += m1[i][k] * m2[k][j] để nhân các phần tử của ma trận.
Công thức sử dụng toán tử tốc ký += thêm vào mu[i][j] vào biểu thức được tính toán và lưu trữ nó. Hãy nhớ khởi tạo kết quả bằng 0 trước khi thêm vào nó.
int mul[r1][c2];
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
mul[i][j] = 0;
for (int k = 0; k < c1; k++) {
mul[i][j] += m1[i][k] * m2[k][j];
}
}
}
Hiển thị ma trận nhân bằng vòng lặp for lồng nhau lặp qua các hàng và cột của ma trận kết quả. Sử dụng ký tự xuống dòng mới (n) để hiển thị từng hàng trên một dòng riêng biệt. Trả về 0 để thoát chức năng chính và chương trình.
printf("The multiplied matrix is: n");
for (int i = 0; i < r1; i++) {
for (int j = 0; j < c2; j++) {
printf("%dt", mul[i][j]);
}
printf("n");
}
return 0;
}
Đầu ra của chương trình nhân ma trận
Bạn sẽ thấy kết quả giống như sau khi chạy chương trình nhân ma trận:
Nếu bạn nhập dữ liệu không hợp lệ, phép nhân ma trận sẽ không thành công và bạn sẽ thấy nội dung như sau:
Ma trận có nhiều công dụng
Các lĩnh vực khác nhau sử dụng ma trận như khoa học, thương mại, kinh tế, địa chất, người máy và hoạt hình. Bạn sẽ chủ yếu sử dụng ma trận trong toán học để giải các phương trình tuyến tính và biểu diễn các phép biến đổi như phép quay hoặc phép tịnh tiến. Ma trận có thể tính toán lượng phản xạ và khúc xạ cũng như giải các phương trình mạng AC trong mạch điện.
Ngoài các ứng dụng giáo dục, bạn có thể sử dụng ma trận để phân tích dữ liệu khảo sát, dữ liệu biểu quyết, tính toán danh sách mục và các bộ dữ liệu khác.