的喬萊斯基我試圖把其轉置矩陣的產品的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