10

C ++で行列のコレスキー因子を計算しようとしています(与えられた行列Pに対して、LL ^ T = PとなるようなLを見つけます)。私の目的は、線形システムP * x = bを解くことではなく、そのような行列分解がよく使用されるため、実際に行列Lを取得することです(無香変換で行われるように「シグマポイント」を計算しようとしています)。 。)

ライブラリ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’

ドキュメントには、LLT.matrixL()がタイプTraits::MatrixLを返すと記載されています。それは何ですか?Lの値を取得するにはどうすればよいですか?

4

1 に答える 1

12

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;

あなたが望むものを手に入れます。

于 2012-10-19T08:59:57.353 に答える