Gauß Algorithmus
-
Würde gerne den Gauß Algorithmus nachprogrammieren.(Zur Übung und zumSpaß)
Jemand ne Idee wie ich da am besten ran gehen sollte?
Ich muss ja irgendwie die Überlegung die der Mensch macht ("Ich nehme diese Zeile mal ..? damit ich anschließend auf 0x komme) automatisieren.Würde mich über Tipps freuen
-
Versuch nicht clever zu sein, sondern rechne stumpf zu einer oberen Dreiecksmatrix hin.
Die Überlegung "Ich nehme diese Zeile mal ..? damit ich anschließend auf 0x komme" nennt man übrigens Division.
-
Das einzige, worüber du nachdenken kannst, ist das Zeilenvertauschen.
Für viele Matritzen kannst du einfach die Dreiecksform herstellen, ohne Zeilen vertauschen zu müssen. Bei manchen Matritzen muss das aber doch, falls irgendwann eine "0" auf der Hauptdiagonalen auftaucht. Die vernünftigste Strategie ist es, jedes mal, wenn du in der äußersten Schleife in eine neue Zeile gehst, die Zeilen so zu vertauschen, dass ein (betragsmäßig) möglichst großes Element auf der Diagonalen steht.Für deine erste Übung würde ich erstmal solche komischen Matritzen ignorieren: Falls eine "0" auf der Diagonalen steht, ist das eben ein Fehler. Wenn das klappt, kannst du es mit Zeilenvertauschen versuchen.
Und "wie ein Mensch" denken ist manchmal gar nicht so hilfreich - also mach das so, wie SeppJ es gesagt hat
-
Ok aber erstmal muss ich ja sowieso den String (-> Gleichung) auseinanderpfücken.
Also Variabeln erkennen und die miteinander verrechnen, wenn es davon mehrere gibt.Wollte ich über ein Dictionary(Python) machen.
Sprich wenn ich ein 32a finde, lege ich ein eintrag a: 32 an.
Finde ich in der Gleichung noch ein a, ziehe ich das dem value ab.
-
bloggybloggt schrieb:
Ok aber erstmal muss ich ja sowieso den String (-> Gleichung) auseinanderpfücken.
Also Variabeln erkennen und die miteinander verrechnen, wenn es davon mehrere gibt.Wollte ich über ein Dictionary(Python) machen.
Sprich wenn ich ein 32a finde, lege ich ein eintrag a: 32 an.
Finde ich in der Gleichung noch ein a, ziehe ich das dem value ab.Das verstege ich nicht. Was ist a? Was ist 32? Bevor du eine komplizierte Eingabe baust, würde ich die Matrix erstmal in meinem Programm hart verdrahten und mich erstmal an den eigentlichen Löser setzen.
Der Löser wird in eine Funktion verpackt, die eine Referenz auf die Matrix und die rechte Seite bekommt. Nach dem Aufruf der Fkt steht in der rechten Seite die Lösung drin. Vielleicht kann man auch das Umformen auf Dreiecksform und das Rückwärtseinsetzen in zwei Unterfunktionen stecken.
-
Ja, ich würde auch so vorgehen:
Erstmal dafür sorgen, dass du Matrizen ordentlich abspeichern kannst (wäre wohl nicht schlecht dafür eine Klasse zu basteln).Ich musste das ganze schon in Matlab implementieren. Du kannst es eigentlich schon so machen wie wenn du von Hand rechnest. Die Standardfunktion von Matlab macht das auch so.
Und ich würde auch mal nur mit regulären Matrizen arbeiten zu beginn. Falls du eine etwas höhere Genauigkeit möchtest kannst du die "Maximum Pivotstrategie" nehmen, soweit ich weiss braucht auch Matlab diese. Die ist gar nicht so schwer. Aber erstmal sollte das Programm für reguläre Matrizen laufen.