Jacobi + Gauß-Seidel Iteration



  • Hallo,

    muss für mein Numerik-Praktikum die Jacobi und die Gauß-Seidel
    Iteration implementieren.

    Für die Jacobi-Iteration hab ich die Algorithmusskizze von
    Wikipedia verwendet.

    http://de.wikipedia.org/wiki/Jacobi-Verfahren

    Das Ergebnis stimmt auch, aber nach der Anzahl der Iterationen
    und der Zwischenergebnissen der einzelnen Iterationen, sieht das
    für mich eher so aus als wäre das die Gauß-Seidel-Iteration.

    Kann das sein?

    Und falls das wirklich die Jacobi-Iteration ist, wie würde dann
    die Algorithmusskizze zur Gauß-Seidel-Iteration aussehen?

    Meinen Quellcode werd ich nachher noch posten, bin gerade noch
    auf der Arbeit und habe Code nicht dabei.

    Edit:

    Hier nun mein angeblicher Jacobi-Code:

    void jacobi(){
    
    	float A[2][2] = { { 2, -1}, {-1, 2} };
    	float b[2] = {3, 4};
    	float x[2] = {0, 0};
    	float o[2] = {0, 0}; //altes Ergebnis für Abbruch bedingung
    
    	int flag = 0; //Flag für Abbruch
    	int iter = 0; //Iterationen zähler
    
    	do
    	{
    		flag = 0;
    		iter++;
    		for (int i=0;i<2;i++)
    		{
    			x[i] = 0;
    			for (int j=0;j<2;j++)
    			{
    				if (j != i)
    					x[i] = x[i] + A[i][j] * x[j];
    
    			}
    			x[i] = (b[i] -x[i]) / A[i][i];
    
    			//Wenn altes und neues auf 4 Stellen 
    			//genau gleich sind -> Abbruch
    			if( fabs(x[i] - o[i]) < pow(10.0, -4))
    				flag++;
                //Ergebnis speichern
    			o[i] = x[i];
    
    			cout<<"x"<<i<<" = "<<x[i]<<endl;
    		}
    		cout<<endl;
    	}while(flag < 2);
    
    	cout<<"Ergebnis nach "<<iter<<" Iterationen"<<endl;
    	cout<<"x0 = "<<x[0]<<endl;
    	cout<<"x1 = "<<x[1]<<endl;
    
    }
    

    smilingman


Anmelden zum Antworten