DVG Gaußscher Algorithmus1 Gaußscher Algorithmus
DVG Gaußscher Algorithmus 2 Lösen Sie das lineare Gleichungssystem AX=B ! Aufgabenstellung Gegeben: Dimension N ( int N; ) Koeffizienten A ij für i=0,...,N-1 und j=0,...,N-1 ( double [][] A = new double [N][N]; ) rechte Seite B i für i=0,...,N-1 ( double [] B = new double [N]; )
DVG Gaußscher Algorithmus 3 Gesucht: Existenz : Gibt es eine Lösung? Einzigkeit : Wenn es eine Lösung gibt, ist es die einzige Lösung? Lösung bzw. Lösungsmenge
DVG Gaußscher Algorithmus 4 Matrixschreibweise:
DVG Gaußscher Algorithmus 5 Gaußscher Algorithmus Für die erste Gleichung gilt:
DVG Gaußscher Algorithmus 6 X[0]=B[0]; for (int j=1; j<N; j++) { X[0] -= A[0][j]*X[j]; } X[0] /= A[0][0];
DVG Gaußscher Algorithmus 7 X 0 in den anderen (k=1,2,...,N-1) Gleichungen ersetzen: Die Gleichungen hängen nur noch von X 1, X 2,..., X N-1 ab. Die Dimension des Gleichungssystems ist also um 1 erniedrigt. Algorithmus kann in place durchgeführt werden, d.h. die Felder A und B können wiederverwendet werden.
DVG Gaußscher Algorithmus 8 for (int k=1; k<N; k++) { for (int j=1; j<N; j++) { A[k][j] -= A[k][0]*A[0][j]/A[0][0]; } } for (int k=1; k<N; k++) { B[k] -= A[k][0]*B[0]/A[0][0]; } für k=1,...,N-1 und j=1,...,N-1 für k=1,...,N-1 Koeffizienten und rechte Seiten des reduzierten Gleichungssystems
DVG Gaußscher Algorithmus 9 Nach der Anwendung eines Schrittes des Gaußschen Verfahrens entsteht folgendes Gleichungssystem (mit modifizierten Koeffizienten und rechten Seiten): Dieses Gleichungssystem und das ursprüngliche sind lösungsäquivalent. Voraussetzung :
DVG Gaußscher Algorithmus 10 Nach der Anwendung von i Schritten des Gauß-Jordan Verfahrens entsteht folgendes Gleichungssystem: Dieses Gleichungssystem und das ursprüngliche sind lösungsäquivalent. Voraussetzung :
DVG Gaußscher Algorithmus 11 Für die i-te Gleichung gilt:
DVG Gaußscher Algorithmus 12 X[i]=B[i]; for (int j=i+1; j<N; j++) { X[i] -= A[i][j]*X[j]; } X[i] /= A[i][i];
DVG Gaußscher Algorithmus 13 X i in den anderen (k=i+1,2,...,N-1) Gleichungen ersetzen: Die Gleichungen hängen nur noch von X i+1, X i+2,..., X N-1 ab.
DVG Gaußscher Algorithmus 14 for (int k=i+1; k<N; k++) { for (int j=i+1; j<N; j++) { A[k][j] -= A[k][i]*A[i][j]/A[i][i]; } } for (int k=i+1; k<N; k++) { B[k] -= A[k][i]*B[i]/A[i][i]; } für k=i+1,...,N-1 und j=i+1,...,N-1 für k=i+1,...,N-1 Koeffizienten und rechte Seiten des reduzierten Gleichungssystems
DVG Gaußscher Algorithmus 15 Nach der Anwendung von N-1 Schritten des Gaußschen Verfahrens entsteht folgendes Gleichungssystem: Dieses Gleichungssystem und das ursprüngliche sind lösungsäquivalent. Voraussetzung :
DVG Gaußscher Algorithmus 16 Es bleibt die Gleichung : X[N-1]=B[N-1]/A[N-1][N-1];
DVG Gaußscher Algorithmus 17 for (int i=0; i<N-1; i++) { for (int k=i+1; k<N; k++) { for (int j=i+1; j<N; j++) { A[k][j] -= A[k][i]*A[i][j]/A[i][i]; } B[k] -= A[k][i]*B[i]/A[i][i]; } } X[N-1]=B[N-1]/A[N-1][N-1]; for (int i=N-2; i>=0; i--) { X[i]=B[i]; for (int j=i+1; j<N; j++) { X[i] -= A[i][j]*X[j]; } X[i] /= A[i][i]; }
DVG Gaußscher Algorithmus 18 for (int i=0; i<N-1; i++) { for (int k=i+1; k<N; k++) { for (int j=i+1; j<N; j++) { A[k][j] -= A[k][i]*A[i][j]/A[i][i]; } B[k] -= A[k][i]*B[i]/A[i][i]; } } for (int i=N-1; i>=0; i--) { X[i]=B[i]; for (int j=i+1; j<N; j++) { X[i] -= A[i][j]*X[j]; } X[i] /= A[i][i]; }
DVG Gaußscher Algorithmus 19 Problem: A i,i muss immer verschieden von Null sein! Z.B.: Das System ist eindeutig lösbar X 1 = X 2 = X 3 = 1. Der Algorithmus funktioniert aber nicht, da A 0,0 = 0. Man braucht nur die Gleichungen umzusortieren und der Algorithmus funktioniert.
DVG Gaußscher Algorithmus 20 double maxa = Math.abs(A[i][i]); int imaxa = i; for (int k=i+1; k<N; k++) { if ( Math.abs(A[k][i])>maxa ) { maxa = Math.abs(A[k][i]); imaxa = k; } } if (i != imaxa) { double [] Ah = A[i]; A[i]=A[imaxa]; A[imaxa]=Ah; double h = B[i]; B[i]=B[imaxa]; B[imaxa]=h; }