|
|
LDL - Tringularization ldl(Matrix) |
|
seasidetobi |

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 19.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.12.2008, 22:53
Titel: LDL - Tringularization ldl(Matrix)
|
 |
|
 |
|
Hallo,
wer kennt sich mit Lösungsmethoden von (großen) linearen Gleichungssystemen bzw. Matrixmultiplikationen aus?
Folgendes:
Ich habe ein Gleichungssystem der Form:
K*U = R
R, Vektor, ist bekannt, K, eine Matrix, auch bekannt, U ist der gesuchte Vektor.
Nun wird in der Literatur empfohlen, K zu "tringularisieren":
dh. K = L*D*L'
wobei D eine Matrix ist, die nur Terme in der Diagonalen enthält und L eine Dreiecksmatrix ist (die letzte L-Matrix in der Gleichung ist transponiert).
Matlab hat hierfür eine eingebaute Funktion:
[L, D] = ldl(K)
Es wird dann aus dem ursprünglichen Gleichungssystem:
L*D*L'*U = R
Meine Frage dazu: In der Literatur wird gesagt, dass sich durch diese Form das Gleichungssystem effektiver lösen lässt. Ist dies in Matlab wirklich nötig? Kann man auf diese Weise ein Gleichungssystem schneller lösen? Gibt es für bestimmte Werte in K und R eventuell gar keine Werte (z.B. bei einer singulären Matrix K), jedoch spuckt die "tringularisierte" Form eine Lösung aus? Oder würde es einfach reichen in Matlab das Problem mit folgendem Eintrag zu lösen:
U = inv(K)*R ???
Danke für eure Hilfe!
_________________
TB
|
|
|
|
|
Titus |

Forum-Meister
|
 |
Beiträge: 871
|
 |
|
 |
Anmeldedatum: 19.07.07
|
 |
|
 |
Wohnort: Aachen
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.12.2008, 20:49
Titel:
|
 |
Hallo,
nein, es ist nicht nötig, erst mit ldl die Zerlegung zu berechnen, das macht MATLAB von alleine. (Kleine Anmerkung, die Zerlegung funktioniert nur bei symmetrischen Matrizen, ansonsten nimmt man die etwas allgemeinere LR Zerlegung). Interessant sind diese Funktionen, wenn man z.B. viele Gleichungssysteme mit der selben Matrix zu lösen hat. Dann kann man sie einmal zerlegen und dann nur noch das Vorwärts-Einsetzen durchführen, um die Lösung zu berechnen.
Aber: bitte nicht inv(K)*R verwenden! Hier wird MATLAB gezwungen, den numerisch schlechtesten Algorithmus zum Lösen linearer Gleichungssysteme zu verwenden. Die Inverse zu berechnen ist unstabil, und damit das Ergebnis gezwungenermaßen schlecht. MATLAB hat als eingebauten Gleichungssystem-Löser den \, d.h. die Lösung ist einfach:
Titus
|
|
|
seasidetobi |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 19.06.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.01.2009, 00:41
Titel:
|
 |
Danke!
_________________
TB
|
|
|
|
|
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.
|
|