6

Gegeben L und ULU decomposition und Vektor von Konstanten b so dass LU*x=b, gibt es eine eingebaute Funktion, die die x finden? Mittlere so etwas wie -Löse lineares Gleichungssystem gegeben durch LU-Zerlegung und Vektor von Konstanten

X = functionName(L,U,b) 

Beachten Sie, dass sowohl in L und U wir mit Dreiecksmatrizen handelt, die direkt durch forward and backward substitution gelöst werden können, die Gaussian elimination Prozess ohne Verwendung.

Edit:

sollte dieses lineare Gleichungssystem löst die folgenden Schritte nach sein -

1. define y - s.t Ux=y 
2. solve Ly=b by forward substitution 
3. solve Ux=y by backward substitution 
4. return y 

Edit 2:

Ich fand linalg::matlinsolveLU aber ich habe nicht versucht weil ich eine zu alte Version habe (R2010a). Funktioniert es für irgendjemanden?

+0

Sind Ihre Vektoren und Matrizen symbolisch? Wenn ja, müssen Sie dies in Ihrer Frage angeben. – horchler

+0

Auch "mldivide" ist [überladen für symbolische Systeme] (http://www.mathworks.com/help/symbolic/arithmeticoperations.html), wird aber nicht genau gleich funktionieren. – horchler

+0

Was bedeutet "Matrizen symbolisch"? – URL87

Antwort

5

Wenn Sie:

A = rand(3); 
b = rand(3,1); 

dann die Lösung auf das System kann einfach wie folgt berechnet werden:

x = A\b 

Oder wenn Sie bereits eine LU-Zerlegung von A, dann:

[L,U] = lu(A); 
xx = U\(L\b) 

die mldivide Funktion ist smart enough zu erkennen, dass die Matrix ist dreieckig und wählt einen Algorithmus entsprechend (Vorwärts-/Rückwärtssubstitution)

+0

Diese Art der Sache ist nützlich, wenn Sie eine feste Koeffizientenmatrix 'A' haben, aber viele verschiedene rechte Seiten' b'.Indem Sie also die Zerlegung vorberechnen, könnten Sie die Dinge beschleunigen – Amro

+0

Wie Sie wissen, dass es "intelligent genug ist, ... zu erkennen"? – URL87

+0

Ich habe einen Link zu den Dokumenten gegeben, der erklärt, wie 'mldivide' verschiedene Algorithmen implementiert und den passenden basierend auf den Eigenschaften der Eingabematrix auswählt. – Amro

3

Ich denke, das ist das, was Sie suchen:

A = rand(3,3); % Random 3-by-3 matrix 
b = rand(3,1); % Random 3-by-1 vector 
[L,U] = lu(A); % LU decomposition 
x = U\(L\b) % Solve system of equations via mldivide (same as x = A\b or x = (L*U)\b) 
err = L*U*x-b % Numerical error 

Das Gleichungssystem gelöst wird mldivide verwenden. Sie können auch qr betrachten, die QR decomposition anstelle von LU-Dekomposition implementiert. qr kann A*x = b Typ Probleme direkt lösen und ist effizienter. Siehe auch linsolve. Bei symbolischen Systemen können Sie möglicherweise weiterhin mldivide verwenden oder in MuPAD linalg::matlinsolveLU ausprobieren.

+0

sehe meinen bearbeiteten Beitrag bitte – URL87

+0

Danke für die Links @Amro. – horchler

Verwandte Themen