Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#을 이용한 두 행렬의 곱셈 프로그램 구현 방법

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차원 배열)과 중첩 반복문을 활용하여 손쉽게 행렬 곱셈을 구현할 수 있습니다. 행렬 곱셈은 그래픽스 처리, 머신러닝, 과학 계산 등 다양한 분야에서 널리 활용되는 기본 연산이므로, 이번 예제를 통해 원리를 잘 익혀두시면 도움이 됩니다.