3x3 Matrixinversion in C++

Neue Frage »

AstroNerd Auf diesen Beitrag antworten »
3x3 Matrixinversion in C++
Hallo zusammen,
Ich habe im Thread ,,Lineare Algebare, Basistransformation - Aufgabe'' feststellen müssen, dass mein Quelltext zur Ermittlung der Inversen einer 3x3 Matrix falsch zu sein scheint.
Hier mein Quelltext:
-----------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
using namespace std;
int main()
{
double a,b,c,d,e,f,g,h,i,detA,A11,A12,A13,A21,A22,A23,A31,A32,A33;
cout<< "Geben Sie die Koordinaten Ihrer Matrix ein." ;
cin >> a >> b >> c >> d >> e >> f >> g >> h >> i;
detA = a*(e*i - f*h) - b*(d*i-f*g) - c*(d*h-e*g);
A11 = e*i - h*f;
A12 = b*i - h*c;
A13 = b*f - e*c;
A21 = d*i - g*f;
A22 = a*i - g*c;
A23 = a*f - d*c;
A31 = g*e - d*h;
A32 = g*b - a*h;
A33 = a*e - d*b;
cout << "Die Inverse Matrix ist:\n("<< 1/(detA)*A11 << " " << 1/(detA)*(-A12) << " " << 1/(detA)*A13<< ")\n(" << 1/(detA)*(-A21) << " " << 1/(detA)*A22 << " " << 1/(detA)*(-A23) << ")\n(" << 1/(detA)*A31 << " " <<1/(detA)*(-A32) << " " << (1/detA)*A33 << ")" ;
cin.sync();
cin.get();
return 0;
}
-------------------------------------------------------------------------------------------------------------------------------------
Zunächst habe ich eine Matrix definiert in der Form . Schrittweise invertiert man meines Wissens nach eine 3x3 Matrix so:

1.) Determinante von A ermitteln:



2.) Matrix transportieren:



3.) Wert für die jeweiligen ,,2x2 Matrizen'':


4.) Transportierte Matrix multiplizieren:



5.) Inverse Matrix:



Nun leuchtet mir nicht ganz ein, wo mein Fehler im Quelltext liegt.
Mit freundlichem Gruß
AstroNerd
Steffen Bühler Auf diesen Beitrag antworten »
RE: 3x3 Matrixinversion in C++
Zitat:
Original von AstroNerd


Nein,
Den Rest hab ich mir jetzt nicht angeschaut.

Viele Grüße
Steffen
10001000Nick1 Auf diesen Beitrag antworten »
RE: 3x3 Matrixinversion in C++
Zitat:
Original von AstroNerd
detA = a*(e*i - f*h) - b*(d*i-f*g) - c*(d*h-e*g);

Da ist der Fehler. Richtig wäre
code:
1:
detA = a*(e*i - f*h) - b*(d*i-f*g) + c*(d*h-e*g); 


Außerdem solltest du noch eine Abfrage machen, ob detA==0 ist. Sonst kann dir das Programm nämlich komplett um die Ohren fliegen. Augenzwinkern
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »