【发布时间】:2014-11-24 20:07:49
【问题描述】:
我正在尝试使用 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 的类型从 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;
}
有没有办法在使用 auto 的同时完成这项工作?
作为一个附带问题,是否有性能理由不断言矩阵在每个阶段都是MatrixXd?使用 auto 将允许 Eigen 将答案保留为它喜欢的任何奇怪的模板表达式。我不确定将其输入为 MatrixXd 是否会导致问题。
【问题讨论】:
标签: c++ c++11 auto eigen eigen3