WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Effizient viele lineare Gleichungssysteme lösen

 

MatRix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 17:13     Titel: Effizient viele lineare Gleichungssysteme lösen
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2010, 06:28     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht kannst du das Gleichungssystem analytisch lösen (per Hand oder mit solve) und nachher die entsprechenden Werte einsetzen.

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.08.2010, 12:42     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
MatRix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2010, 13:47     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 07:16     Titel:
  Antworten mit Zitat      
Hm, vielleicht hast du mich falsch verstanden. Ich dachte du löst das Gleichungssystem analytisch:

Code:

sol = solve('a1*x+a2*y+a3*z = b1','a4*x+a5*y+a6*z = b2','a7*x+a8*y+a9*z = b3');
 


und setzt dann mit subs deine Werte ein. Ansonsten muss dein Computer ja Millionen mal fast das selbe machen.
Private Nachricht senden Benutzer-Profile anzeigen
 
MatRix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 14:49     Titel:
  Antworten mit Zitat      
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
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.