|
|
Effizient viele lineare Gleichungssysteme lösen |
|
MatRix |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.08.2010, 17:13
Titel: Effizient viele lineare Gleichungssysteme lösen
|
 |
Hallo liebe Leute,
ich habe folgendes Problem: Ich möchte die Schnittpunkte von mehreren Millionen Strahlen mit einer Ebene berechnen, und das möglichst häufig in kurzer Zeit...
Für die Lösung ergeben sich also mehrere Millionen Gleichungssysteme, Ax = B. Meine Matrix A hat nun die Dimension [3x3x1000000] und B hat die Dimension [3x1x1000000].
Wie man sieht, sind in der 3. Dimension also alle Gleichungssysteme nacheinander aufgelistet.
Nun funktioniert leider der \ bzw. mldivide-Befehl nur mit 2D-Berechnungen. Aber ich möchte nur ungern eine Schleife mit Millionen von Iterationen einführen. Hat irgendjemand eine Idee, wie man den mldivide-Befehl auch für 3D-Matrizen hinbekommt / vektorisiert...?
Vielen Dank schonmal,
MatRix
|
|
|
|
|
Thomas84 |

Forum-Meister
|
 |
Beiträge: 546
|
 |
|
 |
Anmeldedatum: 10.02.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 06:28
Titel:
|
 |
Hallo,
vielleicht kannst du das Gleichungssystem analytisch lösen (per Hand oder mit solve) und nachher die entsprechenden Werte einsetzen.
viele Grüße
Thomas
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 12:42
Titel:
|
 |
Hallo MatRix,
kannst Du das [3x3x1000000] Array als 2D Sparse-Array mit 3x3 Block-diagonal-Struktur umwandeln? Dann müsste der Vektor auch noch "in die Länge gezogen werden" und es sollte sich eigentlich auch effizient lösen lassen.
Eine andere Idee wäre ein kleines Mex-Script, dass die 3x3 entweder per Lapack-Aufruf oder per einfachem Gauss-Verfahren bearbeitet.
Gruß, Jan
|
|
|
MatRix |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.08.2010, 13:47
Titel:
|
 |
Hi Ihr Zwei
danke für die Tips. Ich hab das jetzt mal zu Fuß programmiert, wie von Thomas empfohlen. Es funktioniert eigentlich ganz gut, außer dass mein Speicher leider ab 2Mio. Gleichungssystemen in die Knie geht... und es könnte ruhig ein bisschen schneller gehen.
Ich weiß leider nicht, wie ich die Blockdiagonalstruktur hinbeokmmen kann, da der Befehl ja blkdiag(a,b,c,...) ist und ich hier nicht 1Mio Matrizen eingeben kann.
Aber das mit dem Mex-Script könnte ich natürlich auch noch einmal probieren, mal sehen ob das noch schneller ist.
Erstmal vielen Dank und viele Grüße!
|
|
|
Thomas84 |

Forum-Meister
|
 |
Beiträge: 546
|
 |
|
 |
Anmeldedatum: 10.02.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2010, 07:16
Titel:
|
 |
Hm, vielleicht hast du mich falsch verstanden. Ich dachte du löst das Gleichungssystem analytisch:
und setzt dann mit subs deine Werte ein. Ansonsten muss dein Computer ja Millionen mal fast das selbe machen.
|
|
|
MatRix |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.08.2010, 14:49
Titel:
|
 |
Hi Thomas,
ja so habe ich es gemacht. Alle Rechnungen, die nur einmal nötig sind, werden auch nur einmal durchgeführt. Durch eine kleine Code-Säuberung schaffe ich nun 5.5Mio Gleichungssysteme in ca. 0,3 Sekunden. Besser werde ich wohl ohne Parallelisieren nicht mehr... und eine größere Anzahl von Strahlen lässt der Speicher nicht zu.
Aber damit bin ich schon ganz zufrieden.
Grüße,
Matrix
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|