1 / 20

Gaußscher Algorithmus

Gaußscher Algorithmus. Aufgabenstellung. Lösen Sie das lineare Gleichungssystem AX=B !. 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

kasi
Download Presentation

Gaußscher Algorithmus

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gaußscher Algorithmus

  2. Aufgabenstellung • Lösen Sie das lineare Gleichungssystem AX=B ! • Gegeben: • Dimension N • ( int N; ) • Koeffizienten Aijfür i=0,...,N-1 und j=0,...,N-1 • ( double [][] A = new double [N][N]; ) • rechte Seite Bi für i=0,...,N-1 • ( double [] B = new double [N]; )

  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. Matrixschreibweise:

  5. Gaußscher Algorithmus • Für die erste Gleichung gilt:

  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. X0 in den anderen (k=1,2,...,N-1) Gleichungen ersetzen: Die Gleichungen hängen nur noch von X1, X2, ... , XN-1ab. 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. für k=1,...,N-1 und j=1,...,N-1 für k=1,...,N-1 Koeffizienten und rechte Seiten des reduzierten Gleichungssystems 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]; }

  9. Dieses Gleichungssystem und das ursprüngliche sind lösungsäquivalent. Voraussetzung : Nach der Anwendung eines Schrittes des Gaußschen Verfahrens entsteht folgendes Gleichungssystem (mit modifizierten Koeffizienten und rechten Seiten):

  10. Dieses Gleichungssystem und das ursprüngliche sind lösungsäquivalent. Voraussetzung : Nach der Anwendung von i Schritten des Gauß-Jordan Verfahrens entsteht folgendes Gleichungssystem:

  11. Für die i-te Gleichung gilt:

  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. Xi in den anderen (k=i+1,2,...,N-1) Gleichungen ersetzen: Die Gleichungen hängen nur noch von Xi+1, Xi+2, ... , XN-1ab.

  14. 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 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]; }

  15. Dieses Gleichungssystem und das ursprüngliche sind lösungsäquivalent. Voraussetzung : Nach der Anwendung von N-1 Schritten des Gaußschen Verfahrens entsteht folgendes Gleichungssystem:

  16. Es bleibt die Gleichung : X[N-1]=B[N-1]/A[N-1][N-1];

  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. 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. Problem: Ai,i muss immer verschieden von Null sein! Z.B.: Das System ist eindeutig lösbar X1 = X2 = X3 = 1. Der Algorithmus funktioniert aber nicht, da A0,0 = 0. Man braucht nur die Gleichungen umzusortieren und der Algorithmus funktioniert.

  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; }

More Related