직교 여부 출력
이 마지막 단계에서는 행렬의 직교성에 대한 더 자세한 출력을 제공하고 다양한 행렬 시나리오를 보여주도록 이전 프로그램을 개선합니다.
다음 개선된 구현으로 matrix_orthogonal.c 파일을 업데이트합니다.
nano ~/project/matrix_orthogonal.c
이전 구현을 다음으로 대체합니다.
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
void readMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
printf("행렬 요소를 행 단위로 입력하세요:\n");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
scanf("%d", &matrix[i][j]);
}
}
}
void transposeMatrix(int original[MAX_SIZE][MAX_SIZE],
int transpose[MAX_SIZE][MAX_SIZE],
int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
transpose[j][i] = original[i][j];
}
}
}
bool checkOrthogonality(int matrix[MAX_SIZE][MAX_SIZE],
int transpose[MAX_SIZE][MAX_SIZE],
int size) {
int result[MAX_SIZE][MAX_SIZE] = {0};
// 전치 행렬과 원본 행렬을 곱합니다.
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
for (int k = 0; k < size; k++) {
result[i][j] += transpose[i][k] * matrix[k][j];
}
}
}
// 결과가 단위 행렬인지 확인합니다.
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (i == j && result[i][j] != 1) return false;
if (i != j && result[i][j] != 0) return false;
}
}
return true;
}
void printDetailedOrthogonalityInfo(int matrix[MAX_SIZE][MAX_SIZE],
int transpose[MAX_SIZE][MAX_SIZE],
int size) {
bool isOrthogonal = checkOrthogonality(matrix, transpose, size);
printf("\n--- 행렬 직교성 분석 ---\n");
printf("원본 행렬:\n");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
printf("\n전치 행렬:\n");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d ", transpose[i][j]);
}
printf("\n");
}
printf("\n직교 여부: %s\n", isOrthogonal ? "✓ 직교 행렬" : "✗ 직교 행렬 아님");
if (isOrthogonal) {
printf("설명: A * Aᵀ = I (단위 행렬)\n");
} else {
printf("설명: A * Aᵀ ≠ I (단위 행렬 아님)\n");
}
}
int main() {
int size, matrix[MAX_SIZE][MAX_SIZE], transpose[MAX_SIZE][MAX_SIZE];
printf("정방 행렬의 크기를 입력하세요: ");
scanf("%d", &size);
readMatrix(matrix, size);
transposeMatrix(matrix, transpose, size);
printDetailedOrthogonalityInfo(matrix, transpose, size);
return 0;
}
... (나머지 코드는 동일)
##### 설명
- 포괄적인 출력을 위한 `printDetailedOrthogonalityInfo()` 함수 추가
- 원본 행렬, 전치 행렬 및 직교 여부 상태 표시
- 직교 조건에 대한 명확한 설명 제공