Calcular Aᵀ y Comprobar si AᵀA = I
En este paso, ampliarás el programa anterior para calcular la transpuesta de la matriz y comprobar si la matriz es ortogonal verificando la condición AᵀA = I.
Actualiza el archivo matrix_orthogonal.c con el siguiente código:
nano ~/project/matrix_orthogonal.c
Agrega la siguiente implementación:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
void readMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
printf("Introduce los elementos de la matriz fila por fila:\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};
// Multiplica la matriz transpuesta y la 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];
}
}
}
// Comprueba si el resultado es la matriz identidad
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("Introduce el tamaño de la matriz cuadrada: ");
scanf("%d", &size);
readMatrix(matrix, size);
// Calcula la transpuesta
transposeMatrix(matrix, transpose, size);
// Comprueba la ortogonalidad
bool isOrthogonal = checkOrthogonality(matrix, transpose, size);
printf("\nMatriz Transpuesta:\n");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d ", transpose[i][j]);
}
printf("\n");
}
printf("\n¿Es la matriz ortogonal? %s\n",
isOrthogonal ? "Sí" : "No");
return 0;
}
Compila y ejecuta el programa:
gcc matrix_orthogonal.c -o matrix_orthogonal
./matrix_orthogonal
Salida de ejemplo:
Introduce el tamaño de la matriz cuadrada: 3
Introduce los elementos de la matriz fila por fila:
1 0 0
0 1 0
0 0 1
Matriz Transpuesta:
1 0 0
0 1 0
0 0 1
¿Es la matriz ortogonal? Sí
Explicación
- La función
transposeMatrix() calcula la transpuesta de la matriz.
- La función
checkOrthogonality() verifica la condición AᵀA = I.
- El programa comprueba si la matriz es ortogonal multiplicando la transpuesta y la matriz original.