2012-10-19 11 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ヘッダーファイルにTraitが何であるか調べることができます。ドキュメントのようなその​​は言う。三角ビューには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; 

あなたが望むものが得られます。

関連する問題