2012-10-19 14 views
10

Ich versuche, den Cholesky-Faktor einer Matrix in C++ zu berechnen (für eine gegebene Matrix P finde L, so dass LL^T = P). Mein Ziel ist NICHT, ein lineares System P * x = b zu lösen, da solche Matrixzerlegungen oft verwendet werden, sondern um tatsächlich die Matrix L zu erhalten. (Ich versuche "Sigma-Punkte" zu berechnen, wie es in der unscented Transformation gemacht wird .)Berechne Cholesky-Zerlegung unter Verwendung von Eigen

Die Bibliothek Eigen berechnet angeblich Cholesky Zersetzungen, aber ich kann nicht herausfinden, wie es mir die Werte in der Matrix L. zu geben, wenn ich die folgenden Zeilen Code

Eigen::MatrixXd P(3,3); 
P << 6, 0, 0, 0, 4, 0, 0, 0, 7; 
std::cout << P.llt().matrixL().col(0) << std::endl; 

ich versuche, Fehler beim Compiler erhalten

error: ‘Eigen::internal::LLT_Traits<Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001>, 1>::MatrixL’ has no member named ‘col’ 

Die documentation besagt, dass LLT.matrixL() Typ Traits :: MatrixL zurückgibt. Was ist das und wie bekomme ich die Werte von L?

Antwort

11

Sie können nachschlagen, was die Eigenschaft in der LLT.h-Header-Datei ist. Es ist ein TriangularView wie die Dokumentation sagt. Die dreieckige Ansicht hat kein col Mitglied, deshalb erhalten Sie den Fehler. Kopieren der Dreiecks Ansicht in eine dichte Matrix wie so:

Eigen::MatrixXd P(3,3); 
P << 6, 0, 0, 0, 4, 0, 0, 0, 7; 
Eigen::MatrixXd L(P.llt().matrixL()); 
std::cout << L.col(0) << std::endl; 

erhalten Sie, was Sie wollen.

Verwandte Themen