C++ 프로그래밍에서 행렬 곱셈은 컴퓨터 그래픽스, 물리 계산, 인공지능 등 다양한 분야에서 중요한 역할을 수행합니다. 이번 글에서는 C++를 사용하여 행렬 곱셈을 어떻게 구현하는지, 그리고 그것이 왜 중요한지에 대해 알아보겠습니다.
행렬 곱셈의 기본 이해
행렬 곱셈은 두 행렬의 행과 열을 각각 곱하고, 그 결과를 모두 더하는 연산입니다. 그러나 이 연산을 수행하려면 두 행렬의 '형태'가 서로 맞아야 합니다. 즉, 첫 번째 행렬의 열의 수와 두 번째 행렬의 행의 수가 같아야 합니다.
C++에서의 행렬 곱셈 구현
C++에서 행렬 곱셈을 구현하려면 일반적으로 2차원 배열 또는 벡터를 사용합니다. 그런 다음 중첩된 for 루프를 사용하여 각 요소를 곱하고 더합니다.
예제 1: 2x2 행렬 곱셈
다음 코드는 두 개의 2x2 행렬을 곱하는 방법을 보여줍니다
#include<iostream>
using namespace std;
int main(){
int A[2][2] = { {1, 2}, {3, 4} };
int B[2][2] = { {5, 6}, {7, 8} };
int C[2][2] = {0};
// 행렬 곱셈 연산
for(int i=0;i<2;++i){
for(int j=0;j<2;++j){
for(int k=0;k<2;++k){
C[i][j] += A[i][k] * B[k][j]; //행렬 A의 행 i와 행렬 B의 열 j를 곱하여 더함
}
}
}
// 결과 출력
for(int i=0;i<2;++i){
for(int j=0;j<2;++j){
cout<<C[i][j]<<" ";
}
cout<<"\n";
}
}
예제 2: 3x3 행렬 곱셈
다음은 두 개의 3x3 행렬을 곱하는 코드입니다.
#include<iostream>
using namespace std;
int main(){
int A[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
int B[3][3] = { {10, 11, 12}, {13, 14, 15}, {16, 17, 18} };
int C[3][3] = {0};
// 행렬 곱셈 연산
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
for(int k=0;k<3;++k){
C[i][j] += A[i][k] * B[k][j];
}
}
}
// 결과 출력
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
cout<<C[i][j]<<" ";
}
cout<<"\n";
}
}
예제 3: 벡터를 사용한 행렬 곱셈
C++의 STL 라이브러리를 활용하면 행렬의 크기가 변하는 경우에도 대응할 수 있습니다. 이 예제에서는 vector를 사용하여 행렬 곱셈을 수행합니다.
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<vector<int>> A = {{1,2},{3,4}};
vector<vector<int>> B = {{5,6},{7,8}};
int n = A.size();
int m = B[0].size();
int inner = B.size();
vector<vector<int>> C(n, vector<int>(m, 0));
// 행렬 곱셈 연산
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
for(int k=0;k<inner;++k){
C[i][j] += A[i][k] * B[k][j];
}
}
}
// 결과 출력
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
cout<<C[i][j]<<" ";
}
cout<<"\n";
}
}
행렬 곱셈은 C++에서 중요한 연산 중 하나입니다. 이번 글을 통해 여러분도 행렬 곱셈을 활용하여 복잡한 문제를 해결하는데 한 걸음 더 나아갈 수 있기를 바랍니다. 다음에는 더 복잡한 행렬 연산에 대해 알아보도록 하겠습니다. 즐거운 코딩 되세요!
댓글