반대칭 행렬(Skew-Symmetric Matrix)이란?
정사각 행렬 A의 모든 원소에 대해 aij = −aji가 성립할 때, 행렬 A를 반대칭 행렬(skew-symmetric matrix)이라고 부릅니다. 다시 말해, 행렬 A의 전치행렬(transpose)이 원래 행렬의 음수와 같을 때, 즉 AT = −A가 성립하면 행렬 A는 반대칭 행렬입니다.
반대칭 행렬에는 한 가지 중요한 특징이 있습니다. 바로 주대각선(main diagonal)의 모든 원소가 반드시 0이라는 점입니다.
반대칭 행렬 예시
A = | 0 -5 4 |
| 5 0 -1 |
|-4 1 0 |
위 행렬은 모든 i, j에 대해 aij = −aji가 성립하므로 반대칭 행렬입니다. 예를 들어 a12 = -5이고 a21 = 5이므로 a12 = −a21이 되며, 나머지 모든 원소 쌍에서도 동일한 조건이 만족됩니다.
전치행렬을 직접 구해 확인해 볼 수도 있습니다.
AT = | 0 5 -4 |
|-5 0 1 |
| 4 -1 0 |
A = | 0 -5 4 |
| 5 0 -1 |
|-4 1 0 |
AT = −A임을 명확하게 확인할 수 있으며, 따라서 행렬 A는 반대칭 행렬입니다.
프로그램 실행 결과 예시
입력: 행과 열의 개수 입력: 2 2 행렬의 원소 입력: 0 -5 5 0 출력: The matrix is skew symmetric. 0 -5 5 0
동작 원리 및 알고리즘
행렬이 자기 자신의 전치행렬과 같으면 대칭 행렬(symmetric matrix)입니다. 만약 전치행렬이 자기 자신의 음수와 같다면 반대칭 행렬(skew-symmetric matrix)이며, 두 조건을 모두 만족하지 않으면 어느 쪽에도 해당하지 않습니다. 프로그램은 검사 결과에 따라 적절한 메시지를 출력합니다.
행렬 검사 절차
- 사용자에게 행렬의 행과 열 개수를 입력받습니다.
- 행렬의 각 원소를 입력받아 배열 'A'에 저장하고, 임시 변수 'x'와 'y'를 0으로 초기화합니다.
- 행렬이 자신의 전치행렬과 같지 않으면(대칭이 아니면) 변수 'x'에 1을 대입합니다.
- 행렬의 음수가 전치행렬과 같으면(반대칭이면) 변수 'y'에 1을 대입합니다.
- x가 0이면 행렬은 대칭 행렬이고, y가 1이면 행렬은 반대칭 행렬입니다.
- 두 조건 중 어느 것도 만족하지 않으면 행렬은 대칭도 반대칭도 아닙니다.
- 최종 검사 결과를 화면에 출력합니다.
C++ 예제 코드
#include<iostream>
using namespace std;
int main () {
int A[10][10], i, j, m, n, x = 0, y = 0;
cout << "Enter the number of rows and columns : ";
cin >> m >> n;
cout << "Enter the matrix elements : ";
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
cin >> A[i][j];
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if (A[i][j] != A[j][i])
x = 1;
else if (A[i][j] == -A[j][i])
y = 1;
}
}
if (x == 0)
cout << "The matrix is symmetric.\n";
else if (y == 1)
cout << "The matrix is skew symmetric.\n";
else
cout << "It is neither symmetric nor skew-symmetric.\n";
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++)
cout << A[i][j] << " ";
cout << "\n";
}
return 0;
}
이 코드는 먼저 사용자로부터 행렬의 크기와 원소를 입력받은 뒤, 이중 반복문을 통해 모든 원소 쌍 A[i][j]와 A[j][i]를 비교하여 대칭 여부와 반대칭 여부를 판별합니다. 마지막으로 검사 결과와 함께 입력된 행렬을 화면에 출력합니다.