Da meine Frage zum Teil in eine andere Richtung geht, habe ich nochmal einen neuen Thread aufgemacht.
Allgemein suche ich eine Möglichkeit große Gleichungssysteme effizient zu lösen. Beim derzeitigen Stand habe ich ein LGS symbolisch erstellt und und überführe es dann in die Form Ax=b, wie im obigen Thread.
Ich erhalte je nach Größe sehr unterschiedliche Berechnungszeiten für die Umwandlung der Matrix A. Dabei möchte ich möglichst viele Einträge/Zeit umwandeln. Ich hätte gedacht, dass größer werdende Matrizen auch effizienter umgewandelt werden können, was jedoch nicht der Fall ist.
Angenommen man wählt dim=1, so benötigt mein Rechner etwa 8 Sekunden, um den symbolischen Wert umzuwandeln. Bei etwas größer werdenden Werten ist es kaum ein Unterschied. Die Effizienz verbessert sich dann natürlich, da mehr Einträge umgewandelt werden. Die Effizienz wird besser bis zum Wert von dim=300 und verschlechtert sich anschließend wieder. Man kann bei sehr großen Matrizen also Zeit sparen, indem man immer wieder Teile der Matrix einzeln umwandelt. Warum ist das so?
Meine Matrix hat etwa 7000x7000 Einträge, was beim gesamten Umwandeln immernoch mehrere Stunden dauern würde. Oder geht es auch besser?
Bisher habe ich diese Vorgehensweise gewählt, da hier http://www.tm-mathe.de/Themen/html/.....rgleich_backslash-op.html deutlich wurde, dass der Backslash-Operator Gleichungssysteme effizient löst.
Vielleicht hat ja sonst auch jemand eine andere Idee, wie ich das Problem angehen kann.
Bei Mathworks wurde mir mitgeteilt, dass man beim symbolischen Rechnen durchaus lange Rechenzeiten erwarten kann. Mir wurde allerdings noch ein Vorschlag gemacht, das ganze zu beschleunigen.
Da in meinem Fall eine dünnbesetzte Matrix vorliegt, macht es Sinn diese zunächst in eine sparse Matrix umzurechnen. Der Befehl sparse(A) funktioniert erst einmal nur für double oder logical Variablentypen, daher kann man mit find() zunächst die entscheidenden Einträge suchen. Zudem habe ich die Matrix auch in diesem Fall in Untermatrizen unterteilt.
Warum die Aufteilung und Berechnung mit Untermatrizen schneller funktioniert, kann ich nicht sagen. Bei der Funktion find() scheint das Optimum etwa bei der Größe 850x850 zu liegen.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.