Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

DVG1 - 09 - Gaußscher Algorithmus1 Gaußscher Algorithmus.

Ähnliche Präsentationen


Präsentation zum Thema: "DVG1 - 09 - Gaußscher Algorithmus1 Gaußscher Algorithmus."—  Präsentation transkript:

1 DVG1 - 09 - Gaußscher Algorithmus1 Gaußscher Algorithmus

2 DVG1 - 09 - 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]; )

3 DVG1 - 09 - 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

4 DVG1 - 09 - Gaußscher Algorithmus 4 Matrixschreibweise:

5 DVG1 - 09 - Gaußscher Algorithmus 5 Gaußscher Algorithmus Für die erste Gleichung gilt:

6 DVG1 - 09 - 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];

7 DVG1 - 09 - 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.

8 DVG1 - 09 - 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

9 DVG1 - 09 - 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 :

10 DVG1 - 09 - 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 :

11 DVG1 - 09 - Gaußscher Algorithmus 11 Für die i-te Gleichung gilt:

12 DVG1 - 09 - 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];

13 DVG1 - 09 - 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.

14 DVG1 - 09 - 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

15 DVG1 - 09 - 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 :

16 DVG1 - 09 - Gaußscher Algorithmus 16 Es bleibt die Gleichung : X[N-1]=B[N-1]/A[N-1][N-1];

17 DVG1 - 09 - 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]; }

18 DVG1 - 09 - 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]; }

19 DVG1 - 09 - 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.

20 DVG1 - 09 - 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; }


Herunterladen ppt "DVG1 - 09 - Gaußscher Algorithmus1 Gaußscher Algorithmus."

Ähnliche Präsentationen


Google-Anzeigen