2012-10-19 19 views
10

Próbuję obliczyć współczynnik Cholesky matrycy w C++ (dla danej macierzy P znaleźć L takie, że LL^T = P). Moim celem NIE jest rozwiązywanie układu liniowego P * x = b, ponieważ takie dekompozycje macierzy są często używane, ale aby faktycznie uzyskać macierz L. (próbuję obliczyć "punkty sigma", jak to się dzieje w bezzapachowej transformacji .)Oblicz Cholesky Rozkład za pomocą Eigen

biblioteka Eigen rzekomo oblicza dekompozycji Cholesky, ale nie mogę dowiedzieć się, jak dostać to, aby dać mi wartości w macierzy L. Gdy próbuję następujące linie kodu

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

I błąd kompilatora:

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

documentation mówi, że LLT.matrixL() zwraca typ Cechy :: MatrixL. Co to jest i jak mogę uzyskać wartości L?

Odpowiedz

11

Możesz sprawdzić, jaka cecha znajduje się w pliku nagłówkowym LLT.h. Jest to TriangularView, podobnie jak w dokumentacji. Widok trójkątny nie ma elementu col, dlatego pojawia się błąd. Kopiowanie trójkątny wgląd w gęstej matrycy tak:

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; 

będzie Ci to, co chcesz.

Powiązane problemy