Woodz
Lieutenant
- Registriert
- Apr. 2009
- Beiträge
- 696
Hallo.
Ich bin langsam am verzweifeln.
Ich habe eine 178 x178 Matrize, aus der ich deren Inverse berechnet habe. Um das Ergebnis zu testen möchte ich die Inverse wieder mit der Ursprungsmatrize multiplizieren um eine Einheitsmatrix zu erhalten.
Ich habe die Ursprungsmatrize und deren Inverse in Excel kopiert und sie miteinander multiplizieren lassen. Ergebnis ist die gewünschten Einheitsmatrix. D.h. die Rechnung ist wohl richtig.
Das Problem ist nur, wenn ich die beiden Matrizen in C multipliziere, erhalte ich als Ergebnis wieder die Inverse und nicht die Einheitsmatrix. An diesem Punkt komme ich nicht mehr weiter. Was ist das Problem?
Da es sich um eine quadratische Matrize handelt, hab ich in der Funktion auf eine Zeilen/Spalten-Prüfung verzichtet.
Input:
MatrizeA (Auszug von Indizes 0,0 bis 2,2):
MatrizeB (Auszug von Indizes 0,0 bis 2,2):
Ergebnis (Auszug von Indizes 0,0 bis 2,2):
-> Das Ergebnis kann doch nicht wieder die Inverse sein
Ich habe auch schon mehrfach die Input-Matrizen geprüft. Es handelt sich definitiv um die zwei gewünschten Matrizen. Ich habe auch deren Speicheradressen geprüft. Auch diese unterscheiden sich. Es wird also nicht die Inverse als Resultat ausgegeben.
Ich bin langsam am verzweifeln.
Ich habe eine 178 x178 Matrize, aus der ich deren Inverse berechnet habe. Um das Ergebnis zu testen möchte ich die Inverse wieder mit der Ursprungsmatrize multiplizieren um eine Einheitsmatrix zu erhalten.
Ich habe die Ursprungsmatrize und deren Inverse in Excel kopiert und sie miteinander multiplizieren lassen. Ergebnis ist die gewünschten Einheitsmatrix. D.h. die Rechnung ist wohl richtig.
Das Problem ist nur, wenn ich die beiden Matrizen in C multipliziere, erhalte ich als Ergebnis wieder die Inverse und nicht die Einheitsmatrix. An diesem Punkt komme ich nicht mehr weiter. Was ist das Problem?
Da es sich um eine quadratische Matrize handelt, hab ich in der Funktion auf eine Zeilen/Spalten-Prüfung verzichtet.
Input:
MatrizeA (Auszug von Indizes 0,0 bis 2,2):
1.123 | 1.598 | 2.434 |
1.598 | 1.123 | -11.403 |
2.434 | -11.403 | 1.123 |
MatrizeB (Auszug von Indizes 0,0 bis 2,2):
-1.974 | -0.615 | -0.275 |
-0.615 | -0.038 | -0.052 |
-0.275 | -0.052 | 0.048 |
Ergebnis (Auszug von Indizes 0,0 bis 2,2):
-1.974 | -0.615 | -0.275 |
-0.615 | -0.038 | -0.052 |
-0.275 | -0.052 | 0.048 |
C:
multiplyMatrix(matrixA,
matrixB,
rows,
cols);
void multiplyMatrix(double **matrixA, double **matrixB, int rows, int cols){
int idx, jdx, kdx;
double **matrixP;
matrixP = (double **) calloc(rows, sizeof(double *));
if (matrixP == NULL){
printf("Speicherfehler!\n");
}
else{
for (idx=0; idx<rows; idx++){
matrixP[idx] = (double *) calloc(cols, sizeof(double));
if (matrixP[idx] == NULL){
printf("Speicherfehler!\n");
}
}
// Multiplikation:
for (idx=0; idx<rows; idx++){
for (jdx=0; jdx<cols; jdx++){
matrixP[idx][jdx] = 0;
for (kdx=0; kdx<cols; kdx++){
matrixP[idx][jdx] += (matrixA[idx][kdx] * matrixB[kdx][jdx]);
}
}
}
show_matrix(matrixP, 3, 3);
for (idx=0; idx<rows; idx++){
free(matrixP[idx]);
}
free(matrixP);
}
}
void show_matrix(double **matrix, int rows, int cols){
int idx, jdx;
for (idx=0; idx<rows; idx++){
for (jdx=0; jdx<cols; jdx++){
printf("%8.3f", matrix[idx][jdx]);
}
printf("\n");
}
printf("\n");
}
Ich habe auch schon mehrfach die Input-Matrizen geprüft. Es handelt sich definitiv um die zwei gewünschten Matrizen. Ich habe auch deren Speicheradressen geprüft. Auch diese unterscheiden sich. Es wird also nicht die Inverse als Resultat ausgegeben.
Zuletzt bearbeitet: