我正在尝试使用 Eigen 和 C++11“自动”类型对矩阵乘积及其转置进行 cholesky 分解。当我尝试做的时候问题就来了
auto c = a * b
auto cTc = c.tranpose() * c;
auto chol = cTc.llt();
我正在使用 XCode 6.1,Eigen 3.2.2。我得到的类型错误是here。
这个最小的例子显示了我机器上的问题。c
将from的类型更改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 是否会导致问题。