Mehr Informationen zum Algorithmus finden sich auf Wikipedia, oder Uni-Bielefeld.
matlab Code
- A = input(' Matrix A eingeben: ');
- b = input(' Vektor b eingeben: ');
- n=length(b);
- % In Dreiecksform umwandeln
- for k=1:n-1
- for i=k+1:n
- if(A(k,k) == 0) then
- error(' Es befinden sich 0-Elemente auf der Hauptdiagonalen ');
- end
- A(i,k) = A(i,k) / A(k,k);
- b(i) = b(i) - b(k)*A(i,k);
- for j=k+1:n
- A(i,j) = A(i,j) - A(k,j)*A(i,k);
- end
- end
- end
- % Rueckwertssubstitution
- x=zeros(n,1);
- for i=n:-1:1
- x(i) = (b(i)-A(i,i+1:n)*x(i+1:n)) / A(i,i);
- end
- x
Der Algorithmus hat ein paar Nachteile. Zum Beispiel löst er nicht alle Gleichungssystem, die theoretisch lösbar wären, denn wenn auf der Hauptdiagonalen Nullen stehen, kann dieser Algorithmus nichts damit anfangen. Als ein Beispiel wäre da z.B.
Ax=b mit A=[0,0,1; 0,1,0; 1,0,0]; b=[1;2;3] hat als Lösung x=[3;2;1]
Als Ausweg bietet sich der Gaußalgorithmus mit Pivotisierung an, bei dem die Zeilen/Spalten so vertauscht werden, dass das System mit dem standard Gaußalgorithmus gelöst werden kann.
Hallo
Ich muss für meine Schule den Gauss in Matlab programmieren und bin dabei auf Ihre Lösung gestossen. Mein Problem besteht darin dass ich nicht genau herausfinde wie ich die Matrix und den Vektor definieren muss, bzw. wieviele Zeilen und Spalten die Matrix und der Vektor haben muss. Bei mir bricht das Programm immer bei Stufe 15 oder 22 ab. Ich wäre sehr froh wenn mir jemand ein Zahlenbeispiel geben könnte.
Herzlichen Dank.
Freundliche Grüsse
Roman Pulver
Die Matrix A muss natürlich quadratisch und regulär sein. Für regulär gibt es viele äquivalente Eigenschaften, z.B. invertierbar, det(A)/=0, zu einer Dreiecksmatrix ähnlich. Es bedeutet soviel wie, dass das GlS lösbar sein muss. Probier es doch erstmal mit der Einheitsmatrix I=[1,0,0;0,1,0;0,0,1] mit b irgendwas z.B. b=[1;2;3]. Dann muss als Lösung natürlich auch x=[1;2;3] herauskommen. Wenn nicht, dann ist irgendein Fehler im Programm. Du kannst wie im Programm die Methode mit A=input(...) benutzen oder du schreibst erstmal das A fest ins Programm rein.