Eigen: Der beste Weg, A * S * A_ zu evaluieren und das Ergebnis in einer symmetrischen Matrix zu speichern

8

Sei S eine symmetrische n x n -Matrix und A sei eine m x n -Matrix.

Gegeben: B = A * S * A_transposes (wobei "*" für eine Matrixproduktoperation steht)

B wird auch eine symmetrische Matrix sein.

Mit der Bibliothek tuxfamily Eigen, Version 3, was ist eine saubere und effiziente Methode, um diese Berechnung zu implementieren? (Mit Effizienz meine ich meistens, dass doppelte Berechnungen der Elemente von B nicht durchgeführt werden, wenn Symmetrie sie unnötig macht.)

Ich schätze, es wird SelfAdjointView verwenden, aber ich habe hoch und niedrig gesucht und kein sauberes Beispiel dafür gefunden.

Die Anwendung ist ein Kalman-Filter, der stark von Operationen mit (symmetrischen) Kovarianzmatrizen abhängig ist. Daher möchte ich sicherstellen, dass die Implementierung / das Design korrekt ist.

Danke!

    
arr_sea 04.11.2012, 02:25
quelle

1 Antwort

5

Das sollte ziemlich einfach sein. Wie Sie selbst sagen, können Sie Eigen durch die SelfAdjointView die Tatsache bewusst machen, dass Ihre Matrix eine symmetrische Matrix ist. Es gibt auch eine andere Ansicht, die TriangularView, mit der Sie Ihre Ergebnisse speichern können. Entsprechend der Referenz , wenn Sie eine TriangularView zuweisen, werden nur die relevanten Teile der rhs ausgewertet. Also

%Vor%

speichert das Ergebnis im oberen Dreieck von B. Sie können dann in weiteren Berechnungen B.selfadjointView<Upper> verwenden. Ich bin nicht sicher, ob dies in Bezug auf die erforderlichen Operationen optimal ist, und Sie könnten einige Benchmarks zur Überprüfung durchführen.

    
Jakob 04.11.2012, 20:14
quelle

Tags und Links