Verfasst am: 09.06.2012, 15:25
Titel: Matrix aus mehreren Matrizen auf der Diagonalen
Hallo zusammen,
ich schreibe an einem Programm, dass mir aus übergebenen Parametern eine Matrix zusammenstellt. Die Endmatrix setzt sich in folgender Form aus anderen Matrizen zusammen:
Also A1 bis An sind sind beliebig viele Matrizen, die auf der ersten Diagonale stehen sollen und die jeweils negativen Matrizen auf der 2. Diagonalen, der Rest wird mit Nullen aufgefüllt. Ich dachte dabei zuerst an den Befehl diag(). Da ich ja aber ganze Matrizen auf die Diagonale setzen möchte, komme ich damit irgendwie nicht weiter...
Gibt es eine Möglichkeit die Matrix auf Grund ihrer "Fastdiagonalform" effektiv zusammenzusetzen, ohne die einzelnen Elemente/Matrizen über Schleifen iterativ zuzuordnen?
Ich hoffe, ich konnte mein Problem verständlich machen!
Vielen Dank schon mal und viele Grüße!
Ohja, du hast natürlich Recht! Die 2.Diagonale ergibt in dem Zusammenhang keinen Sinn. Ich glaube, du hast es aber trotzdem schon richtig verstanden
A1 bis An sind alle 4x4-Matrizen.
Dann werd ich mir jetzt mal den Befehl anschauen...
Vielen Dank für die schnelle Antwort!
Grüße,
Janine
Ok, danke! Das wäre jetzt auch mein Ansatz gewesen, nachdem ich mir den Befehl angeschaut habe! Das lässt sich auf jeden Fall auch einfach auf die variable Anzahl erweitern
Nun würde mich allerdings noch interessieren, ob es vom Rechenaufwand her besser ist meine bisherige Implementierung beizubehalten. Die Matrizen A1 bis An werden nämlich auch in einer Schleife erzeugt, in der ich im Moment auch die aktuelle Matrix gleich in meine Wunschmatrix schreibe und den Rest mit Nullen auffülle. Ist es besser erst alle Matrizen zu erzeugen und anschließend mit blkdiag zusammenzufügen?
Zum besseren Verständnis noch mein Code ohne blkdiag:
Code:
for i=1:n
U = [...];
M(4*i+1,:) = [zeros(4,i-1), U, -U, zeros(4,4*(n-i-1))];
end
auf jeden Fall sollte M vorbelegt werden, d.h. mit Nullen initialisiert werden.
Ansonsten wird es keine großen Unterschiede geben, wobei der Ansatz über blkdiag "eleganter" sein könnte. Was den Rechenaufwand angeht: im Zweifelsfall beides ausprobieren und schauen, was schneller ist.
Mir ist jetzt als ich versucht habe, meine Implementierung mit blkdiag zu realisieren wieder ein Problem aufgefallen. Da ich die Matrizen A1 bis An ja auch in einer Schleife erzeuge (in Abhängigkeit von meinem Laufindex) müsste ich diese jeweils in einer eigenen Variable speichern, damit ich nachher mit blkdiag() wieder darauf zugreifen kann?! Eine Möglichkeit wäre doch nun die Variablennamen für die {Ai} mit assignin('base',['A' num2str(i)], ...) in der for-Schleife zu vergeben. Da meine Menge an Matrizen A jedoch variieren kann, bin ich etwas ratlos, wie ich das in meinem blkdiag()-Befehl integriere. Steh ich da gerade einfach schrecklich auf dem Schlauch? Wie kann ich denn eine unbekannte Menge an Matrizen übergeben, von denen ich nur weiß, dass sie A1, A2,...,An heißen?
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.