Hallo, ich hoffe ihr könnt mir helfen. Ich möchte lineare Gleichungssysteme lösen. Die Umformung zur Diagonalform war nicht sonderlich schwer und klappt perfekt. Nur mit dem Rückwärtseinsetzten hapert es. Wenn ich beispielsweise 2 Zeilen vertausche kommen andere Werte raus. Könnt ihr mir helfen wie ich das auch noch schaffe. Ach ja, tut mir Leid, dass der Code etwas unstrukturiert ist, nachher schreibe ich auch noch eine Klasse... ich wollte mich nur erstmal mit den inhaltlichen Problemen auseinandersetzten:shiner:
C
//---------------------------------------------------------------------------
#pragma hdrstop
#include <iostream>
#include <conio>
#include <vector>
using namespace std;
//---------------------------------------------------------------------------
float Matrix[4][4];
float Ergebnis[4];
#pragma argsused
int main(int argc, char* argv[])
{
int max = 4;
Matrix[0][0] = 1;
Matrix[0][1] = 1;
Matrix[0][2] = 1;
Matrix[0][3] = 1;
Matrix[1][0] = 0;
Matrix[1][1] = 2;
Matrix[1][2] = 1;
Matrix[1][3] = 1;
Matrix[2][0] = 0;
Matrix[2][1] = 0;
Matrix[2][2] = 1;
Matrix[2][3] = 3;
Matrix[3][0] = 0;
Matrix[3][1] = 2;
Matrix[3][2] = 1;
Matrix[3][3] = 4;
Ergebnis[0] = 10;
Ergebnis[1] = 11;
Ergebnis[2] = 15;
Ergebnis[3] = 23;
for (int i = 0; i < max; i++) //Matrix Diagonalisieren
{
for (int j = i+1; j < max; j++)
{
int b = 0;
for (b = 0; b < max; b++) // in der aktuellen Zeile den ersten Wert, der ungleich 0 ist finden
if (Matrix[i][b] != 0) break;
if (Matrix[i][b] == 0)continue;
float faktor = Matrix[j][b]/Matrix[i][b];
for (int a = 0; a < max; a++)
Matrix[j][a] -= Matrix[i][a] * faktor; // aktuelle Gleichung von den anderen abziehen
Ergebnis[j]-=Ergebnis[i]*faktor;
}
}
for (int i = 0; i < max; i++) //Matrix nach dem Diagonalisieren ausgeben
{
for (int a = 0; a < max; a++) cout << Matrix[i][a] << "|";
cout << Ergebnis[i] << endl;
}
for (int i = max-1; i >= 0; i--) //Rückwärtseinsetzten
{
for (int j = i + 1; j < max; j++)
{
Ergebnis[i] -= Matrix[i][j] * Ergebnis[j];
}
if (Matrix[i][i] == 0) continue;
Ergebnis[i]/= Matrix[i][i];
}
for (int i = 0; i < max; i++) //Die Lösungen ausgeben
cout << Ergebnis[i] << endl;
cin.get();
}
//---------------------------------------------------------------------------
Alles anzeigen