Ausgabe, ob orthogonal oder nicht
In diesem letzten Schritt erweitern Sie das vorherige Programm, um detailliertere Informationen über die Orthogonalität der Matrix bereitzustellen und verschiedene Matrixszenarien zu demonstrieren.
Aktualisieren Sie die Datei matrix_orthogonal.c
mit der folgenden verbesserten Implementierung:
nano ~/project/matrix_orthogonal.c
Ersetzen Sie die vorherige Implementierung durch:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
void readMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
printf("Geben Sie die Matrixelemente zeilenweise ein:\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};
// Multiplikation der transponierten und ursprünglichen Matrix
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];
}
}
}
// Überprüfung, ob das Ergebnis die Einheitsmatrix ist
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--- Analyse der Matrixorthogonalität ---\n");
printf("Ursprüngliche Matrix:\n");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
printf("\nTransponierte Matrix:\n");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d ", transpose[i][j]);
}
printf("\n");
}
printf("\nOrthogonalitätsstatus: %s\n",
isOrthogonal ? "✓ Orthogonale Matrix" : "✗ Keine orthogonale Matrix");
if (isOrthogonal) {
printf("Erklärung: A * Aᵀ = I (Einheitsmatrix)\n");
} else {
printf("Erklärung: A * Aᵀ ≠ I (Keine Einheitsmatrix)\n");
}
}
int main() {
int size, matrix[MAX_SIZE][MAX_SIZE], transpose[MAX_SIZE][MAX_SIZE];
printf("Geben Sie die Größe der quadratischen Matrix ein: ");
scanf("%d", &size);
readMatrix(matrix, size);
transposeMatrix(matrix, transpose, size);
printDetailedOrthogonalityInfo(matrix, transpose, size);
return 0;
}
Kompilieren und ausführen Sie das Programm:
gcc matrix_orthogonal.c -o matrix_orthogonal
./matrix_orthogonal
Beispielausgabe für eine orthogonale Matrix:
...
Beispielausgabe für eine nicht orthogonale Matrix:
...
Erklärung
- Funktion
printDetailedOrthogonalityInfo()
hinzugefügt für umfassende Ausgabe
- Zeigt die Originalmatrix, die transponierte Matrix und den Orthogonalitätsstatus an
- Bietet eine klare Erklärung der Orthogonalitätsbedingung