2014-06-19 5 views
5

Ich versuche in isposdef() in Julia zu verwenden, um a priori zu testen, ob eine Matrix durch die cholesky Dekomposition faktorisiert werden kann.Julia: Kann isposdef() verwendet werden, um zu bestimmen, ob eine Matrix durch Cholesky-Zerlegung faktorisiert werden kann?

Es sieht aus wie isposdef nicht immer funktioniert. Benutze ich es falsch?

Beispiel:

D = [5, 8] 
V = [1 2; 3 4] 
A = V*diagm(D)*inv(V) 
println(eig(A)) 
println(isposdef(A)) 

Hier erstelle ich eine Matrix A mit positiven Eigenwerten in D. gegeben Wir sehen, daß eig (A) stimmt sie positiv sind. Isposdef() gibt jedoch false zurück. Fehle ich etwas?

Danke

+3

Das Konzept von "positiv definit" gilt für * symmetrische * (oder hermitesche) Matrizen. Ihre Matrix 'A' ist nicht symmetrisch. –

+0

Ah, Sie haben Recht. Es ist nicht ausreichend, dass die Eigenwerte positiv sind. Seltsam. Im Unterricht geben die Professoren immer "symmetrisch positiv definit" an, wenn scheinbar "positiv definit" genug wäre. – Mageek

+2

Nun, die Definition (v * A * v^T> 0 für alle nichtnull v) könnte immer noch auf eine beliebige quadratische reelle Matrix angewendet werden, aber (a) der Satz über positive Eigenwerte ist in dieser Allgemeinheit nicht mehr wahr und (b) die erweiterte Definition ist nicht so interessant: Eine allgemeine quadratische Matrix A ist genau dann positiv definit, wenn ihr symmetrischer Teil ((A + A^T)/2) positiv definit ist. Aber in diesem verallgemeinerten Sinn (was vielleicht Julia ist), ist deine Matrix nicht positiv definit - die Eigenwerte des symmetrischen Teils sind 17.1 ... und -4.1 ... Also gibt Julia hier das richtige Ergebnis. –

Antwort

1

Wenn eine Matrix A cholesky Zersetzung hat, dann kann A als A geschrieben werden = LL^T (die, wenn A = QDQ^T und Eigenwerte möglich ist, alle positiv sind, wobei L = QD^0.5), was impliziert, dass die Matrix positiv definit sein sollte (dies subsumiert auch die Symmetrie).

Aus Ihrem Beispiel, für die Matrix A = V D Inv (V), die Matrix der Eigenvektoren V, die Sie gewählt haben, ist nicht Orthonormal. Man kann also nicht von A = V D inv (V) zum obigen Formular für die Cholesky-Zersetzung gehen.

Zu Ihrer Hauptfrage kann isposdef(), da eine positive Definitheit notwendig und eine hinreichende Bedingung für die Cholesky-Zerlegung ist, verwendet werden, um zu überprüfen, ob eine Cholesky-Zerlegung vorliegt.

PS: Bitte beachten Sie Mark Dickinson Kommentare unter der Frage für eine allgemeinere Diskussion.