2012-10-19 45 views
10

Tôi đang cố gắng tính toán hệ số Cholesky của ma trận trong C++ (đối với ma trận P tìm L sao cho LL^T = P). Mục tiêu của tôi là KHÔNG giải quyết một hệ tuyến tính P * x = b, vì các phân tách ma trận như vậy thường được sử dụng, nhưng để thực sự thu được ma trận L. (Tôi đang cố gắng tính toán "các điểm sigma" như được thực hiện trong biến đổi không tập trung .)Tính phân tách Cholesky bằng cách sử dụng Eigen

thư viện Eigen cho là tính toán phân tách Cholesky, nhưng tôi không thể tìm ra cách để có được nó để cung cấp cho tôi những giá trị trong ma trận L. Khi tôi cố gắng các dòng mã sau đây

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

tôi gặp lỗi trình biên dịch

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

Các documentation nói rằng LLT.matrixL() trả về loại Traits :: MatrixL. Đó là gì và làm thế nào để tôi nhận được các giá trị của L?

Trả lời

11

Bạn có thể tra cứu Trait nằm trong tệp tiêu đề LLT.h. Một số TriangularView của nó giống như tài liệu nói. Chế độ xem tam giác không có thành viên col, vì vậy đó là lý do bạn gặp lỗi. Sao chép chế độ xem tam giác vào một ma trận dày đặc như vậy:

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; 

sẽ giúp bạn có được những gì bạn muốn.

Các vấn đề liên quan