的乔莱斯基我试图把其转置矩阵的产品的Cholesky分解,利用特征向量和C++ 11“自动”类型。我试图做的时候出现问题征和C++ 11的类型推断失败的矩阵产品
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
?使用自动将允许Eigen保留答案,无论它幻想哪种奇怪的模板表达。我不确定是否将它键入MatrixXd会导致问题。
谢谢 - 从图书馆的开发人员那里听到真的很棒!我的理由是看Eigen是否可以在他们有用的形状时正确地优化'm0.transpose()* m1.transpose()* m2 * m3' - 因此我想把所有东西放在表达式空间中,直到最后一刻。是否由于模板的工作原因,我无法对GeneralProduct进行cholesky分解,难道只有没有人有足够的关注将其添加到Eigen中吗?还是有理由这么做是愚蠢的? – c0g 2014-11-25 13:00:00