Sie sind hier: Numerik > Lösung linearer Gleichungssysteme > Einfacher Gauß-Algorithmus

Einfacher Gauß-Algorithmus

Samstag 02. Dezember 2006 von
Simon Praetorius
Um ein System linearer Gleichungen zu lösen, lernt man in der Schule meist als erstes die eine Gleichung nach einer Variablen aufzulösen und dann in die anderen Gleichungen einzusetzen. Somit eliminiert man eine Variable aus allen anderen Gleichungen. Wenn man das mit den anderen Variablen auch macht, kann man mit reichlich Aufwand das Gleichungssystem lösen. Etwas mehr System in dieses Verfahren bringt man mit dem Gaußalgorithmus, bei dem zuerst die Gleichungen durch geschickte Aufaddierung in Stufenform gebracht werden und danach durch Rückwärtseinsetzen nach den einzelnen Variablen aufgelöst wird.

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.
Besucher: 10898 | Permalink | Kategorie: Numerik
Tags:

2 Kommentare

  1. Freitag 14.11.2008 21:53 von
    RomanPulver

    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

  2. Samstag 15.11.2008 17:01 von
    SimonPraetorius

    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.

Kommentar hinzufügen

Dieses Feld bitten nicht ausfüllen: