Ohne einige Informationen über die Konstruktion dieser positiv definierten reellen symmetrischen Matrizen sind die zu machenden Vorschläge notwendigerweise ziemlich begrenzt.12×12
Ich habe das Armadillo-Paket von Sourceforge heruntergeladen und mir die Dokumentation angesehen. Versuchen Sie, die Leistung der getrennten Berechnung von und zu verbessern , wobei die Rang-1-Matrix aller ist, indem Sie z . In der Dokumentation wird darauf hingewiesen, dass dies die Standardeinstellung für Matrizen bis zu einer Größe von ist. Daher gehe ich davon aus, dass die Option eine Standardeinstellung für den Fall ist.det(Q)det(12I−Q−J)Jdet(Q,slow=false)
4×4slow=true
12×12
Was slow=true
vermutlich tut, ist ein teilweises oder vollständiges Schwenken, um eine Reihenebenenform zu erhalten, aus der die Determinante leicht gefunden werden kann. Sie wissen jedoch im Voraus, dass die Matrix eindeutig positiv ist, sodass ein Schwenken für die Stabilität nicht erforderlich ist (zumindest vermutlich für den Großteil Ihrer Berechnungen. Es ist unklar, ob das Armadillo-Paket eine Ausnahme auslöst, wenn die Drehpunkte übermäßig klein werden, dies sollte jedoch eine sein Funktion eines vernünftigen numerischen linearen Algebra-Pakets. BEARBEITEN: Ich habe den Armadillo-Code gefunden, der in der Header-Datei implementiert ist , wobei C ++ - Vorlagen für wesentliche Funktionen verwendet wurden. Die Einstellung scheint keinen Einfluss darauf zu haben, wie einQdet
include\armadillo_bits\auxlib_meat.hpp
slow=false
12×12Die Determinante wird durchgeführt, weil die Berechnung zu diesem Zeitpunkt an LAPACK (oder ATLAS) "über eine Mauer geworfen" wird, ohne dass darauf hingewiesen wird, dass kein Schwenken erforderlich ist. siehe det_lapack
und seine Aufrufe in dieser Datei.
Der andere Punkt wäre, der Empfehlung zu folgen, das Armadillo-Paket zu erstellen, das mit Hochgeschwindigkeitsersatz für BLAS und LAPACK verknüpft ist, wenn Sie diese tatsächlich verwenden. siehe Kap. 5 der Armadillo README.TXT-Datei für Details. [Die Verwendung einer dedizierten 64-Bit-Version von BLAS oder LAPACK wird auch für die Geschwindigkeit auf aktuellen 64-Bit-Computern empfohlen.]
Die Zeilenreduktion auf die Staffelform ist im Wesentlichen eine Gaußsche Eliminierung und hat eine arithmetische Komplexität . Für beide Matrizen beträgt dies dann das Doppelte dieser Arbeit oder . Diese Operationen mögen zwar der "Engpass" in Ihrer Verarbeitung sein, aber es gibt wenig Hoffnung, dass ohne eine spezielle Struktur in (oder einige bekannte Beziehungen zwischen den Billionen Testfällen, die eine Amortisation ermöglichen) die Arbeit auf reduziert werden könnte .23n3+O(n2)43n3+O(n2)QO(n2)
Zum Vergleich beinhaltet die Expansion einer allgemeinen Matrix durch CofaktorenMultiplikationsoperationen (und ungefähr ebenso viele Additionen / Subtraktionen), so dass für der Vergleich ( vs. ) eindeutig die Eliminierung gegenüber Cofaktoren begünstigt.n×nn!n=1212!=47900160023n3=1152
Ein anderer Ansatz, der Arbeit erfordert, wäre die Reduzierung von auf die tridiagonale Form mit Householder-Transformationen, wodurch auch in die tridiagonale Form gebracht wird. Das Berechnen von und kann danach in Operationen durchgeführt werden. [Der Effekt der Rang-1-Aktualisierung in der zweiten Determinante kann als ausgedrückt werden, der durch Lösen eines tridiagonalen Systems gegeben ist.]43n3+O(n2)Q12I−Qdet(Q)det(12I−Q−J)O(n)−J
Die Implementierung einer solchen unabhängigen Berechnung kann sich lohnen, um die Ergebnisse erfolgreicher (oder fehlgeschlagener) Aufrufe von Armadillos det
Funktion zu überprüfen .
Sonderfall: Nehmen wir an, dass wobei wie zuvor die (Rang 1) Matrix aller ist und ist nicht singuläre (positive) diagonale Matrix. In der Tat wären dies für die vorgeschlagene Anwendung in der Graphentheorie ganzzahlige Matrizen. Dann lautet eine explizite Formel für :Q=D−JJD=diag(d1,…,dn)det(Q)
det(Q)=(∏i=1ndi)(1−∑i=1nd−1i)
Eine Skizze seines Beweises bietet die Möglichkeit, eine breitere Anwendbarkeit zu veranschaulichen, dh wenn eine bekannte Determinante hat und das System schnell gelöst ist. Beginnen Sie mit dem Ausklammern:DDv=(1…1)T
det(D−J)=det(D)⋅det(I−D−1J)
Jetzt ist wieder Rang 1, nämlich . Beachten Sie, dass die zweite Determinante einfach ist:D−1J(d−11…d−1n)T(1…1)
f(1)=det(I−D−1J)
wobei das charakteristische Polynom von . Als Rang-1-Matrix muss (mindestens) Faktoren von , um seinen Nullraum zu berücksichtigen. Der "fehlende" Eigenwert ist , wie aus der Berechnung ersichtlich ist:f(x)D−1Jf(x)n−1x∑d−1i
D−1J(d−11…d−1n)T=(∑d−1i)(d−11…d−1n)T
Daraus folgt, dass das charakteristische Polynom und wie oben für , .f(x)=xn−1(x−∑d−1i)f(1)det(I−D−1J)1−∑d−1i
Beachten Sie auch, dass wenn , dann , eine diagonale Matrix, deren Determinante einfach das Produkt ihrer diagonalen Einträge ist.Q=D−J12I−Q−J=12I−D+J−J=12I−D