2012-10-19 3 views
10

C++에서 행렬의 콜레 스키 요인을 계산하려고합니다 (주어진 행렬 P에서 LL^T = P와 같은 L을 찾습니다). 내 목표는 선형 체계 P * x = b를 풀지 않는 것입니다. 그러한 행렬 분해는 종종 사용되지만 행렬 L을 실제로 얻습니다. (나는 무향 변환에서 수행되는 것처럼 "시그마 점"을 계산하려고합니다. .)고유 번호를 사용하여 콜레 스키 분해 계산

도서관 Eigen 가정 콜레 분해를 계산하지만 난

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

나는 다음 코드 줄을하려고 할 때 그것이 나에게 매트릭스 L.의 값을주고 얻는 방법을 알아낼 수 없습니다 컴파일러 오류 발생

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

documentation은 LLT.matrixL()이 Traits :: MatrixL 유형을 반환한다고 말합니다. 그것은 무엇이며 L의 값을 얻는 방법은 무엇입니까?

답변

11

특성이 LLT.h 헤더 파일에 있는지 조회 할 수 있습니다. 그것의 설명서와 같은 TriangularView 말한다. 삼각형보기에는 col 회원이 없으므로 오류가 발생합니다. 다음과 같이 고밀도 매트릭스로 삼각형 뷰를 복사 :

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; 

원하는 것을 얻을 수 있습니다.

관련 문제