행렬(matrix)은 숫자들을 행(row)과 열(column) 형태로 배열한 직사각형 배열입니다.
예를 들어, 아래와 같은 행렬이 있을 수 있습니다.
3×4 행렬은 아래와 같이 3개의 행과 4개의 열로 구성됩니다.
8 6 3 5 7 1 9 2 5 1 9 8
행렬 곱셈 프로그램 예제
다음은 두 개의 행렬을 함수에 인수로 전달하여 곱하는 C++ 프로그램입니다.
#include<iostream>
using namespace std;
void MatrixMultiplication(int a[2][3],int b[3][3]) {
int product[10][10], r1=2, c1=3, r2=3, c2=3, i, j, k;
if (c1 != r2) {
cout<<"Column of first matrix should be equal to row of second matrix";
} else {
cout<<"The first matrix is:"<<endl;
for(i=0; i<r1; ++i) {
for(j=0; j<c1; ++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
cout<<"The second matrix is:"<<endl;
for(i=0; i<r2; ++i) {
for(j=0; j<c2; ++j)
cout<<b[i][j]<<" ";
cout<<endl;
}
cout<<endl;
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j) {
product[i][j] = 0;
}
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k) {
product[i][j]+=a[i][k]*b[k][j];
}
cout<<"Product of the two matrices is:"<<endl;
for(i=0; i<r1; ++i) {
for(j=0; j<c2; ++j)
cout<<product[i][j]<<" ";
cout<<endl;
}
}
}
int main() {
int a[2][3] = { {2, 4, 1} , {2, 3, 9} };
int b[3][3] = { {1, 2, 3} , {3, 6, 1} , {2, 9, 7} };
MatrixMultiplication(a,b);
return 0;
}실행 결과
The first matrix is: 2 4 1 2 3 9 The second matrix is: 1 2 3 3 6 1 2 9 7 Product of the two matrices is: 16 37 17 29 103 72
코드 상세 설명
1. 행렬 초기화 및 함수 호출
위 프로그램에서는 main() 함수 안에서 두 행렬 a와 b를 다음과 같이 초기화합니다.
int a[2][3] = { {2, 4, 1} , {2, 3, 9} };
int b[3][3] = { {1, 2, 3} , {3, 6, 1} , {2, 9, 7} };그런 다음 두 행렬을 인수로 넘겨 MatrixMultiplication() 함수를 호출합니다.
MatrixMultiplication(a,b);
2. 곱셈 가능 여부 검사
행렬 곱셈이 성립하려면 첫 번째 행렬의 열 개수가 두 번째 행렬의 행 개수와 같아야 합니다. 이 조건이 만족되지 않으면 곱셈을 수행할 수 없으므로 오류 메시지를 출력합니다.
if (c1 != r2) {
cout<<"Column of first matrix should be equal to row of second matrix";
}3. 행렬 출력
두 행렬 a와 b는 중첩된 for 반복문을 사용하여 화면에 출력됩니다.
cout<<"The first matrix is:"<<endl;
for(i=0; i<r1; ++i) {
for(j=0; j<c1; ++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
cout<<"The second matrix is:"<<endl;
for(i=0; i<r2; ++i) {
for(j=0; j<c2; ++j)
cout<<b[i][j]<<" ";
cout<<endl;
}
cout<<endl;4. 행렬 곱셈 연산
먼저 결과를 저장할 product[][] 행렬의 모든 요소를 0으로 초기화합니다. 이후 삼중 중첩 for 반복문을 사용하여 두 행렬의 곱을 계산합니다.
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j) {
product[i][j] = 0;
}
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k) {
product[i][j]+=a[i][k]*b[k][j];
}여기서 핵심 공식은 product[i][j] += a[i][k] * b[k][j]입니다. 즉, 결과 행렬의 각 요소는 첫 번째 행렬의 행 요소와 두 번째 행렬의 열 요소를 순서대로 곱한 뒤 모두 더한 값입니다.
5. 결과 출력
곱셈 결과가 계산되면 이를 화면에 출력합니다.
cout<<"Product of the two matrices is:"<<endl;
for(i=0; i<r1; ++i) {
for(j=0; j<c2; ++j)
cout<<product[i][j]<<" ";
cout<<endl;
}정리
이 프로그램은 행렬을 2차원 배열 형태로 함수에 전달하고, 곱셈 가능 조건(첫 행렬의 열 수 = 둘째 행렬의 행 수)을 확인한 후 삼중 반복문으로 곱을 계산하는 표준적인 방법을 보여줍니다. 시간 복잡도는 O(r1 × c2 × c1)이며, 행렬 크기가 커질수록 계산량이 세제곱 수준으로 증가한다는 점을 기억하면 좋습니다.