S
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