2012-10-19 70 views
10

我想要計算C++中矩陣的Cholesky因子(對於給定的矩陣P找到L,使得LL^T = P)。我的目標不是解決一個線性系統P * x = b,因爲這樣的矩陣分解通常用於,但實際上是獲得矩陣L.(我試圖計算「西格馬點」,就像在無跡變換中所做的那樣。)使用特徵計算Cholesky分解

Eigen理應計算喬列斯基分解,但我無法弄清楚如何得到它給我的矩陣L.值當我嘗試下面的代碼行

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

我得到編譯器錯誤

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頭文件中的特徵。它的一個​​就像文檔說的那樣。三角形視圖沒有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; 

會得到你想要的。