C# 행렬 곱셈 프로그램 개요
행렬 곱셈 프로그램은 두 개의 행렬을 곱하는 데 사용됩니다. 다만, 행렬 곱셈은 첫 번째 행렬의 열(column) 개수와 두 번째 행렬의 행(row) 개수가 같을 때만 가능하다는 점에 유의해야 합니다.
예를 들어, 첫 번째 행렬이 m×n 크기이고 두 번째 행렬이 p×q 크기라면, n과 p가 일치해야만 두 행렬의 곱을 계산할 수 있으며, 결과로 얻어지는 행렬은 m×q 크기를 가지게 됩니다.
아래에서는 C#으로 행렬 곱셈을 수행하는 전체 예제 코드를 소개합니다.
전체 예제 코드
using System;
namespace MatrixMultiplicationDemo {
class Example {
static void Main(string[] args) {
int m = 2, n = 3, p = 3, q = 3, i, j;
int[] a = {{1, 4, 2}, {2, 5, 1}};
int[] b = {{3, 4, 2}, {3, 5, 7}, {1, 2, 1}};
Console.WriteLine("Matrix a:");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
Console.Write(a[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine("Matrix 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("Matrix multiplication not possible");
} 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("The product of the two matrices is :");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
Console.Write(c[i, j] + "\t");
}
Console.WriteLine();
}
}
}
}
}실행 결과
위 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Matrix a: 1 4 2 2 5 1 Matrix b: 3 4 2 3 5 7 1 2 1 The product of the two matrices is : 17 28 32 22 35 40
코드 상세 설명
이제 위 프로그램이 어떻게 동작하는지 단계별로 살펴보겠습니다.
1단계: 두 행렬 a와 b 출력하기
먼저 중첩된 반복문(for 루프)을 사용하여 행렬 a와 행렬 b의 모든 요소를 화면에 출력합니다. 바깥쪽 반복문은 행(row)을 순회하고, 안쪽 반복문은 열(column)을 순회하며 각 요소를 한 줄씩 출력합니다. 해당 코드는 다음과 같습니다.
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
Console.Write(a[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine("Matrix b:");
for (i = 0; i < p; i++) {
for (j = 0; j < q; j++) {
Console.Write(b[i, j] + " ");
}
Console.WriteLine();
}2단계: 행렬 곱셈 가능 여부 확인하기
앞서 언급했듯이, 첫 번째 행렬의 열 개수(n)와 두 번째 행렬의 행 개수(p)가 서로 다르면 두 행렬은 곱할 수 없습니다. 따라서 조건문(if 문)을 통해 이를 먼저 검사하고, 곱셈이 불가능한 경우 해당 메시지를 출력하도록 처리했습니다. 관련 코드는 아래와 같습니다.
if(n != p) {
Console.WriteLine("Matrix multiplication not possible");
}3단계: 행렬 곱 계산 및 결과 출력하기
곱셈 조건을 만족하는 경우, 세 겹으로 중첩된 반복문을 사용하여 행렬 a와 행렬 b의 곱인 행렬 c를 계산합니다. 핵심 로직은 c[i, j] += a[i, k] * b[k, j] 부분으로, 첫 번째 행렬의 i번째 행과 두 번째 행렬의 j번째 열에 있는 대응 요소들을 서로 곱한 후 모두 더하는 방식입니다. 계산이 완료되면 행렬 c를 화면에 출력합니다. 해당 코드 스니펫은 다음과 같습니다.
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("The product of the two matrices is :");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
Console.Write(c[i, j] + "\t");
}
Console.WriteLine();
}마무리
이처럼 C#에서는 다차원 배열(2차원 배열)과 중첩 반복문을 활용하여 손쉽게 행렬 곱셈을 구현할 수 있습니다. 행렬 곱셈은 그래픽스 처리, 머신러닝, 과학 계산 등 다양한 분야에서 널리 활용되는 기본 연산이므로, 이번 예제를 통해 원리를 잘 익혀두시면 도움이 됩니다.