Chương trình nhân ma trận được dùng để nhân hai ma trận. Thao tác này chỉ khả thi khi số cột của ma trận thứ nhất bằng số hàng của ma trận thứ hai.
Ví dụ
using System;
namespace MatrixMultiplicationDemo
{
class Example
{
static void Main(string[] args)
{
int m = 2, n = 3, p = 3, q = 3, i, j;
// Ma trận a: 2x3
int[,] a = { { 1, 4, 2 }, { 2, 5, 1 } };
// Ma trận b: 3x3
int[,] b = { { 3, 4, 2 }, { 3, 5, 7 }, { 1, 2, 1 } };
Console.WriteLine("Ma trận a:");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
Console.Write(a[i, j] + " ");
Console.WriteLine();
}
Console.WriteLine("Ma trận b:");
for (i = 0; i < p; i++)
{
for (j = 0; j < q; j++)
Console.Write(b[i, j] + " ");
Console.WriteLine();
}
if (n != p)
{
Console.WriteLine("Không thể nhân hai ma trận");
}
else
{
int[,] c = new int[m, q];
for (i = 0; i < m; i++)
{
for (j = 0; j < q; j++)
{
c[i, j] = 0;
for (int k = 0; k < n; k++)
c[i, j] += a[i, k] * b[k, j];
}
}
Console.WriteLine("Tích của hai ma trận:");
for (i = 0; i < m; i++)
{
for (j = 0; j < q; j++)
Console.Write(c[i, j] + "\t");
Console.WriteLine();
}
}
}
}
}
Kết quả
Ma trận a: 1 4 2 2 5 1 Ma trận b: 3 4 2 3 5 7 1 2 1 Tích của hai ma trận: 17 28 32 22 35 40
Giải thích
- Kiểm tra điều kiện: số cột ma trận a (n=3) phải bằng số hàng ma trận b (p=3)
- Ma trận kết quả c có kích thước m x q (2x3)
- Phần tử c[i,j] = tổng của a[i,k] * b[k,j] với k từ 0 đến n-1
Công thức: C[i][j] = Σ(A[i][k] × B[k][j])
Lưu ý: Mã gốc có lỗi in kết quả (dùng n thay vì q trong vòng lặp in ma trận c), đã được sửa trong ví dụ trên.