Eigen と C++11 の "auto" 型を使用して、行列の積をその転置でコレスキー分解しようとしています。私がやろうとすると問題が発生します
auto c = a * b
auto cTc = c.tranpose() * c;
auto chol = cTc.llt();
XCode 6.1、Eigen 3.2.2 を使用しています。私が得る型エラーはhereです。
この最小限の例は、私のマシンの問題を示しています。の型をc
からauto
に変更して、動作するMatrixXd
ことを確認します。
#include <iostream>
#include <Eigen/Eigen>
using namespace std;
using namespace Eigen;
int main(int argc, const char * argv[]) {
MatrixXd a = MatrixXd::Random(100, 3);
MatrixXd b = MatrixXd::Random(3, 100);
auto c = a * b;
auto cTc = c.transpose() * c;
auto chol = cTc.llt();
return 0;
}
まだ自動を使用している間にこれを機能させる方法はありますか?
副次的な質問として、行列がMatrixXd
各段階で a であると主張しないパフォーマンス上の理由はありますか? auto を使用すると、Eigen は、それが空想する奇妙なテンプレート表現として答えを保持することができます。MatrixXd と入力すると問題が発生するかどうかはわかりません。