Jacobi-Verfahren

gabse15

Mitglied
Hallo!
Ich verzweifle schon seit Stunden an der Implementierung des Jacobi-Verfahrens zur iterativen Lösung eines LGS. Kann vielleicht mal kurz jemand drüber schauen?

Code:
public class Einzelschrittverfahren {
    public static void main(String[] args) {
        double[][] A = {{10,14,11},{13,-66,14},{11,-13,12}};
        double[] b = {1,1,1};
        double[] xstart = {0,0,0};

        double[] xfertig = jacobi(A,b,xstart,50);
        System.out.println(Arrays.toString(xfertig));
    }

    private static double[] jacobi(double[][] A, double[] b, double[] xalt, int schritte){
        double[] xneu;
        xneu = new double[b.length];
        for (int k = 0; k < schritte; k++) {
            System.arraycopy(b, 0, xneu, 0, b.length);

            for (int i = 0; i < b.length; i++) {
                for (int j = 0; j < b.length; j++) {
                    if (i!=j){
                        xneu[i] = xneu[i] - A[i][j]*xalt[j];
                    }
                }
                xneu[i] = xneu[i]/A[i][i];
            }

            System.arraycopy(xneu, 0, xalt, 0, b.length);

        }
        return xalt;
    }
}
 

gabse15

Mitglied
Rauskommen sollte [-1, 0, 1], das Ergebnis nach 100 Iterationen ist jedoch [0.056422803269165524, 0.0038271055057900838, 0.033588363306690946].
 

stg

Top Contributor
Ich habe deinen Code nicht überprüft, aber das Ergebnis sieht "richtig" aus. Problem ist, dass das Jacobi-Vefahren nicht in jedem Fall konvergiert, und das ist bei deinem Testfall genau der Fall. Teste deinen Code am besten mit einer strikt diagonal-dominanten Matrix, dann ist die Konvergenz des Jacobi-Verfahrens in jedem Fall gegeben.
 

Flown

Administrator
Mitarbeiter
Der Algorithmus ist richtig! Man kann hier noch das eine oder andere verständlicher schreiben, aber das ist Geschmackssache.
Wenn du Integer.MAX_VALUE Schritte gehst, dann kommt raus:
Code:
[-0.9999999999973006, 8.80104070430124E-15, 0.999999999997535] ~ [-1, 0, 1]
Also passt das schon so.
 

Ähnliche Java Themen

Neue Themen


Oben