Gauß-Seidel-Verfahren
-
Hi,
irgendwie kriege ich das Gauß-Seidel-Verfahren nicht richtig implementiert.https://de.wikipedia.org/wiki/Gauß-Seidel-Verfahren
12x + 2y + 3z = 18 x - 3y + 12z = 6 -x + 8y + 2z = -32
#include <iostream> #include <cmath> using namespace std; int main() { double x = 0.0; double y = 0.0; double z = 0.0; for (int i = 0; i < 30; ++i) { x = (1/12.0) * (18 - (2 * y + 3 * z)); y = -(1/3.0) * (6 -(x + 12 * z)); z = (1/ 2.0) * (-32 - (-x + 8 * y)); cout << "Schritt(" << i << "): x: " << x << ", y: " << y << ", z: " << z << endl; } return 0; }
Die Beträge werden bei mir immer größer anstatt zu konvergieren.
Schritt(0): x: 1.5, y: -1.5, z: -9.25 Schritt(1): x: 4.0625, y: -37.6458, z: 136.615 Schritt(2): x: -26.3793, y: 535.665, z: -2171.85 Schritt(3): x: 455.185, y: -8537.67, z: 34362.3 Schritt(4): x: -7166.13, y: 135058, z: -543833 Schritt(5): x: 113450, y: -2.13752e+06, z: 8.60678e+06 Schritt(6): x: -1.79544e+06, y: 3.38286e+07, z: -1.36212e+08
Jemand eine Ahnung?
-
Wenn ich das recht sehe, erfüllt deine Matrix nicht die Konvergenzkriterien des Verfahrens.
-
Ok, habe die Matrix auf diagonaldominanz umgestellt und nun funktioniert's.
Danke!