2016-10-07 110 views
0

每當我嘗試此代碼時,我都會得到斷言失敗! 如何使用循環填充矩陣A?使用循環填充矩陣A(Eigen :: Matrix2d A)和數字

#include <iostream> 
#include "../eigen3/Eigen/Dense" 
int main() 
{ 
Eigen::Matrix2d A; 
for (int row = 0; row < 5; ++row) 
    { 
    for (int col = 0; col < 5; ++col) 
    { 
//  A(row,col)=10; // ??? 
    } 
    } 

} 
+0

我應該用徵:: MatrixXd A(S,B); 它現在有效,, –

+0

如果下面的答案之一回答你的問題,請標記爲接受。看[這裏](http://stackoverflow.com/help/someone-answers)。 –

回答

2

那麼,你在做什麼是正確的。但是,Matrix2d類是顧名思義的2x2矩陣。所以,你可以在不增加行/列以上1:

Eigen::Matrix2d A; 
for (int row = 0; row < 2; ++row) 
    { 
    for (int col = 0; col < 2; ++col) 
    { 
    A(row,col) = 10; 
    } 
    } 

如果你想有一個5x5矩陣,你可以使用XD基質用合適的構造函數:

Eigen::MatrixXd A(5, 5); 
for (int row = 0; row < 5; ++row) 
    { 
    for (int col = 0; col < 5; ++col) 
    { 
    A(row,col) = 10; 
    } 
    } 

如果尺寸是在編譯知時間,你可以選擇使用避免了內存分配和住在棧上實現:

Eigen::Matrix<double, 5, 5> A; 
for (int row = 0; row < 5; ++row) 
    { 
    for (int col = 0; col < 5; ++col) 
    { 
    A(row,col) = 10; 
    } 
    } 
0

Matrix2d是一個typedef到Matrix<double, 2, 2>。所以它是一個2×2矩陣,並且你正在處理4列的行和列,這就是爲什麼你得到Assertion failed。你需要一個MatrixXd 5x5的:

Eigen::MatrixXd A(5, 5); 
for (int row = 0; row < 5; ++row) 
{ 
    for (int col = 0; col < 5; ++col) 
    { 
     A(row,col) = 10; 
    } 
}