Berechnung der Determinante beim Lösen von mit CG


11

Ich löse für eine riesige, spärlich positive, definitive Matrix Verwendung der Methode des konjugierten Gradienten (CG). Es ist möglich, die Determinante von Verwendung der während der Lösung erzeugten Informationen zu berechnen .A A.Ax=bAA


Warum möchten Sie die Determinante berechnen? Ein solches Ergebnis wird sicherlich entweder ein Unterlauf oder ein Überlauf für eine riesige Matrix sein. Ich wäre wohltätiger, wenn Sie darum gebeten hätten, die Bedingungsnummer zu berechnen, aber verschwenden Sie Ihre Zeit nicht mit der Determinante!

Das wissen Sie wahrscheinlich schon, aber die Ritz-Werte während des konjugierten Gradientenprozesses konvergieren gegen die Eigenwerte der Matrix, und Sie können daraus einfache Schätzungen für die Determinante ableiten.
Shuhalo

Antworten:


10

Die Berechnung der Determinante einer spärlichen Matrix ist normalerweise so teuer wie eine direkte Lösung, und ich bin skeptisch, dass CG bei der Berechnung sehr hilfreich sein würde. Es wäre möglich , CG für läuft Iterationen (wobei ist ), um Informationen für das gesamte Spektrum zu erzeugen , und um dann die Determinante als das Produkt der Eigenwerte berechnet werden , aber dies würde sowohl langsam und numerisch instabil.A n × n A.nAn×nA

Es wäre eine bessere Idee, die spärlich direkte Cholesky-Faktorisierung Ihrer Matrix zu berechnen, beispielsweise , wobei ein unteres Dreieck ist. Dann ist wobei ist einfach das Produkt der diagonalen Einträge der unteren Dreiecksmatrix da die Eigenwerte einer Dreiecksmatrix entlang ihrer Diagonale liegen. L det ( A ) = det ( L ) det ( L H ) = | det ( L ) | 2 , det ( L ) L.A=LLHL

det(A)=det(L)det(LH)=|det(L)|2,
det(L)L

Im Fall einer allgemeinen nicht singulären Matrix sollte eine schwenkbare LU-Zerlegung verwendet werden, beispielsweise , wobei eine Permutationsmatrix ist, so dass Da eine Permutationsmatrix ist, ist , und konstruktionsbedingt typischerweise eine Diagonale von allen, was impliziert, dass . Sie können also als berechnen.PA=LUP

det(A)=det(P1)det(L)det(U).
Pdet(P)=±1Ldet(L)=1det(A)±det(U)und wieder erkennen, dass die Determinante einer dreieckigen Matrix einfach das Produkt ihrer diagonalen Einträge ist. Somit sind die Kosten für die Berechnung der Determinante im Wesentlichen nur die einer Faktorisierung.

Dies wäre eine der Möglichkeiten (obwohl ich die Cholesky-Faktorisierung verwenden würde), wenn die Matrix klein ist, jedoch Größe von ~ und daher keine Zerlegung möglich istA106x106
Manuel Schmidt

@ManuelSchmidt Sparse-Matrizen dieser Größe, die aus Diskretisierungen vom Finite-Elemente-Typ resultieren, können normalerweise leicht mit (zum Beispiel) multifrontalen Methoden berücksichtigt werden. Ich bin damit einverstanden, dass die Cholesky-Faktorisierung verwendet werden sollte, wenn Ihre Matrix HPD ist (und die Verallgemeinerung meines obigen Arguments ist offensichtlich).
Jack Poulson

Vielen Dank für Ihre schnelle Antwort & Antwort. Leider hat die Matrix keine spezielle Struktur (was eine einfache Faktorisierung ermöglichen würde).
Manuel Schmidt

2
Ich bin gespannt, warum Sie die Determinante der Matrix berechnen müssen. Reichen die höchsten und niedrigsten Eigenwerte nicht aus?
Jack Poulson

Es ist Teil einer komplexen Wahrscheinlichkeitsverteilungsfunktion und nicht nur einer Normalisierungskonstante. Ich weiß, dass Verteilungen berücksichtigt werden können (und genau das tun wir derzeit), aber wir müssen Tonnen von Daten modellieren und jeder der Faktoren wird riesig.
Manuel Schmidt

6

Andere haben dies bereits bemerkt, aber ich denke, es ist immer noch erwähnenswert, dass die Determinante fast immer keine nützliche Größe ist, wenn Ihre Matrix groß ist. Das Problem ist, dass große Matrizen meistens Annäherungen an noch größere Dimensionen sind (statistische Stichproben großer Populationen, endliche dimensionale Approximationen an unendlich dimensionale Dinge wie partielle Differentialgleichungen usw.). Nehmen wir an, Ihre Matrix ist und nähert sich in gewisser Weise einem Prozess bei dem und möglicherweise .ABdimAdimBdimB=

Nun wird der Operator auch ein Spektrum haben, und das Spektrum von wird typischerweise in gewissem Sinne mit dem Spektrum von in Beziehung stehen - z. B. nähern sich die Eigenwerte von denen von (eine Teilmenge von) . Dies bedeutet jedoch nicht, dass ungefähr . Wenn zum Beispiel die Eigenwerte von einige der Eigenwerte von , dann ist BABABdetAdetBAB

detA=j=1dimAλi(A)j=1dimAλi(B)j=dimA+1dimBλi(B)
Der zweite Faktor in diesem Produkt ist jedoch typischerweise entweder das Produkt der kleinen oder der großen Eigenwerte von , die von nicht aufgelöst werden . Mit anderen Worten, dieser Faktor ist typischerweise entweder sehr klein (möglicherweise Null, wenn ) oder sehr groß (möglicherweise unendlich). Mit anderen Worten, in all diesen Fällen haben wir normalerweise, dass nicht approximiert und normalerweise keine nützliche Sache zum Berechnen ist.BAdimB=detAdetB

Es stellt sich heraus, dass es einige wirklich schöne und praktische Algorithmen gibt, die die Berechnung beträchtlicher Determinanten beinhalten. Check out www-m3.ma.tum.de/foswiki/pub/M3/Allgemeines/…
Matt Knepley

2

Nehmen wir an, dass Ihr Operator entweder nicht leicht faktorisierbar oder einfach überhaupt nicht als Matrix verfügbar ist und dass Sie seine Determinante wirklich schätzen müssen, ohne (erneut) zu erfahren, warum und wie Determinanten böse sind .

Eine Möglichkeit, eine Schätzung der Determinante zu erhalten, besteht darin, eine Implementierung von CG zu verwenden, die direkt auf dem Lanczos-Prozess basiert. Siehe zum Beispiel Algorithmus 6.17 (D-Lanczos) in Saads Buch " Iterative Methoden für spärliche lineare Systeme " (SIAM), Seite 189. Dort wird der Operator semi-explizit berücksichtigt, und Sie können die Determinante der Faktoren als Näherung verwenden der Determinante von . Lassen Sie mich betonen, dass ich nie versucht habe, eine Determinante zu schätzen, und ich habe keine Ahnung, ob das, was ich vorschlage, eine gute Idee ist - wahrscheinlich nicht angesichts aller Probleme, die uns Geister-Eigenwerte geben. Dies fällt Ihnen jedoch beim Lesen Ihrer Frage ein.AA

Sie können wahrscheinlich rückentwickeln, wie diese Schätzung der Determinante in der Standardimplementierung von CG zustande kommt, indem Sie Abschnitt 6.7.3 des Buches genau befolgen.


2

Die Determinante der Matrix A kann berechnet werden als wobei - berechnete Schritte sind während der CG-Iteration. Dies funktioniert jedoch nur, wenn . Der Beweis ist der folgende. Sei eine Matrix bestehend aus Vektoren und sei eine Matrix bestehend aus . Durch die Eigenschaft der Determinante . Man beachte nun, dass die Vektoren orthgonal sind und die Vektoren in Bezug auf konjugiert sind

det(A)=i=1nαk1,
αk=rkTrkpkTApkrk0k=1,,nRrkPpk
pk=rk+i=1k1γiri.
det(P)=(1)ndet(R)rkpkA. Daher ist
k=1nαk=k=1nrkTrkpkTApk=det(RTR)det(PTAP)=det(RTR)det(A)det(PTP)=(det(A))1.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.