Welches num. Verfahren für lin. System gew. Differentialgl?
-
Hi
Ich habe eine Anf.Wert A. x' = Ax mit A= TridiagonalM (25*25) und Werten zwischen 1.6e+06 und 1.3e-04.
Die Frage ist nun welches numerische Verfahren benutzt man am Besten und gibt es Transformationsverfahren um eine bessere Kondition zu bekommen.Habe es über die Berechnung der Eigenwerte und co. probiert und eine recht schlechte Konditionierung bekommen. Einschrittverfahren und ... sind doch eher für nicht lineare DGLs oder.
Es wäre sehr cool, wenn jemand mir Helfen könnte.
-
Naja, prinzipiell kannst Du Einschrittverfahren schon nehmen. Wenn deine DGL steif ist (also: stark unterschiedlich große Eigenwerte), dann solltest Du aber auf die Schrittweite aufpassen oder besser ein Verfahren mit einem ausreichend großen Stabilitätsbereich nehmen (also: implizite Verfahren).
Bezüglich Vorkonditionierungsverfahren kannst Du dich auch mal umsehen, es kommt immer ein bißchen darauf an, wie deine Matrix genau aussieht und wie kompliziert Du es machen willst. Wenn das System nicht so fies ist, kommst Du vielleicht mit ner einfachen Skalierer oder Jakobi-Konditionierer hin, sonst vielleicht CG-Algorithmus ...
Aber am Anfang würd ich es einfach mal mit nem impliziten Einschrittverfahren versuchen.
-
Vielen Dank für deine Anregungen,
ich hatte ins geheim gehofft, die Matrix konditionieren zu können, so dass
man über Eigenwerte, Eigenvektoren + Inverse zu einer ordentlichen Lsg kommt :-(.Es wäre sehr nett, wenn du mir ein zwei gute Literatur hinweise geben könntest, da ich mich leider nur in reiner Mathematik etwas auskenne.
-
Auf der Seite:
http://www.tu-harburg.de/ins/download/skripte.htmlDas zweite Skript von oben "Numerische Simulation" sollte dein Freund sein für Einzel- und Mehrschrittverfahren, implizit oder explizit, steif oder nicht-steif etc.
An deiner Stelle würde ich als ersten Schritt mal versuchen, das System in Matlab (oder GNU Octave) reinzustecken und zu schauen, was passiert.
Wie ist denn deine Matrix beschaffen? Du sagst, deine Matrixeinträge liegen um mehrere Größenordnungen auseinander. Sowohl auf der Hauptdiagonalen als auch auf den Nebendiagonalen? Oder sehen Haupt- und Nebendiagonalen anders aus?
Evtl. kannst du auch einfach Eigenwerte und -vektoren ausrechnen (finde ich bei 25x25 nicht so erschreckend). Vielleicht kannst du dann aus dem Fundamentalsystem eine Lösung basteln.
-
Jedes Skript ueber z.B. http://www-m2.ma.tum.de/homepages/simeon/numerik3/main0607.pdf . Oder aber der Klassiker: Numerical Recipes in ...
-
Vielen Dank für eure zahlreichen Anregungen.
Die Werte auf der Hauptdiagonalen und unteren Nebendiagonalen sind alle zwischen 1.8e+6 und 1.0e+5 nur die obere Nebendiagonale spielt verrückt.
Habe ein Programm geschrieben, dass mir (aus den Eigenwerten und co mit Lapackpp) die Lösung liefert, doch spielt natürlich die Inverse der Matrix aus Eigenvektoren bei Matrizen der Grösse 75*75( für diese Grösse sollte das Programm am besten noch funktionieren total verrückt, so dass für die Kondition |T^-1|*|T| 10e+34 wird).Besonders an meinen Matrizen ist dass die Spaltensumme Null ist, so dass ich die intuitive Hoffnung habe sie in eine symmetrische Matrix transformieren zu können, womit sich dann die Frage des Fehlers aufgrund der Trafo stellt.
-
Wobei die Hauptdiagonale negative Werte besitzt !