Download presentation
1
Gaußscher Algorithmus
2
Aufgabenstellung Lösen Sie das lineare Gleichungssystem AX=B !
Gegeben: Dimension N ( int N; ) Koeffizienten Aij fü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-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
Koeffizienten und rechte Seiten des reduzierten Gleichungssystems
für k=1,...,N-1 und j=1,...,N-1 für k=1,...,N-1 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]; } B[k] -= A[k][0]*B[0]/A[0][0];
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
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
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-1 ab.
14
Koeffizienten und rechte Seiten des reduzierten Gleichungssystems
für k=i+1,...,N-1 und j=i+1,...,N-1 für k=i+1,...,N-1 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];
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
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]; 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]; 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;
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.