Calcular Aᵀ e Verificar se AᵀA = I
Neste passo, você estenderá o programa anterior para calcular a transposta da matriz e verificar se a matriz é ortogonal, verificando a condição AᵀA = I.
Atualize o arquivo matrix_orthogonal.c com o seguinte código:
nano ~/project/matrix_orthogonal.c
Adicione a seguinte implementação:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
void readMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
printf("Digite os elementos da matriz linha por linha:\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};
// Multiplicar a matriz transposta e a matriz original
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];
}
}
}
// Verificar se o resultado é a matriz identidade
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;
}
int main() {
int size, matrix[MAX_SIZE][MAX_SIZE], transpose[MAX_SIZE][MAX_SIZE];
printf("Digite o tamanho da matriz quadrada: ");
scanf("%d", &size);
readMatrix(matrix, size);
// Calcular a transposta
transposeMatrix(matrix, transpose, size);
// Verificar a ortogonalidade
bool isOrthogonal = checkOrthogonality(matrix, transpose, size);
printf("\nMatriz Transposta:\n");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d ", transpose[i][j]);
}
printf("\n");
}
printf("\nA matriz é ortogonal? %s\n",
isOrthogonal ? "Sim" : "Não");
return 0;
}
Compile e execute o programa:
gcc matrix_orthogonal.c -o matrix_orthogonal
./matrix_orthogonal
Exemplo de saída:
Digite o tamanho da matriz quadrada: 3
Digite os elementos da matriz linha por linha:
1 0 0
0 1 0
0 0 1
Matriz Transposta:
1 0 0
0 1 0
0 0 1
A matriz é ortogonal? Sim
Explicação
- A função
transposeMatrix() calcula a transposta da matriz.
- A função
checkOrthogonality() verifica a condição AᵀA = I.
- O programa verifica se a matriz é ortogonal multiplicando a transposta e a matriz original.