두 행렬 간의 행렬 곱셈
두 행렬을 곱하려면 특정 규칙을 따라야 합니다. 첫째, 첫 번째 행렬의 열 수는 두 번째 행렬의 행 수와 같아야 합니다. 둘째, 결과 행렬은 첫 번째 행렬과 동일한 행 수와 두 번째 행렬과 동일한 열 수를 갖습니다.
두 개의 행렬이 있다고 가정해 보겠습니다.
A = {{1, 3, 5},
{4, 2, 6}};
B = {{7, 4},
{3, 1},
{6, 9}};
이 두 행렬을 곱하려면 행과 열에 대해 내적 (dot product) 을 수행합니다. 행렬의 요소는 다음 공식을 사용하여 곱해집니다.
result[row][col] = matrix1[row][0] * matrix2[0][col]
+ matrix1[row][1] * matrix2[1][col]
+ matrix1[row][2] * matrix2[2][col]
+ ...;
다음은 행렬 곱셈에 대한 C 프로그램입니다.
#include <stdio.h>
int main()
{
int m, n, p, q, c, d, k, sum = 0;
// define two matrices
int first[10][10], second[10][10], result[10][10];
// input the number of rows and columns of the first matrix
printf("Enter the number of rows and columns of the first matrix:\n");
scanf("%d %d", &m, &n);
// input the elements of the first matrix
printf("Enter the %d elements of the first matrix:\n", m * n);
for (c = 0; c < m; c++) {
for (d = 0; d < n; d++) {
scanf("%d", &first[c][d]);
}
}
// input the number of rows and columns of the second matrix
printf("Enter the number of rows and columns of the second matrix:\n");
scanf("%d %d", &p, &q);
// input the elements of the second matrix
printf("Enter the %d elements of the second matrix:\n", p * q);
for (c = 0; c < p; c++) {
for (d = 0; d < q; d++) {
scanf("%d", &second[c][d]);
}
}
// check if matrices can be multiplied
if (n != p) {
printf("Matrices cannot be multiplied with each other.\n");
} else {
// multiplying the matrices
for (c = 0; c < m; c++) {
for (d = 0; d < q; d++) {
for (k = 0; k < p; k++) {
sum = sum + first[c][k] * second[k][d];
}
result[c][d] = sum;
sum = 0;
}
}
// print the resulting matrix
printf("The resulting matrix is:\n");
for (c = 0; c < m; c++) {
for (d = 0; d < q; d++) {
printf("%d\t", result[c][d]);
}
printf("\n");
}
}
return 0;
}
이 프로그램은 사용자에게 두 행렬의 요소를 입력하도록 요청하고, 곱할 수 있는지 확인하고, 가능하다면 곱하고, 결과 행렬을 출력합니다.