2016-10-07 3 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

私はEigen :: MatrixXd A(S、B)を使用する必要があります。 これが今すぐに動作します –

+0

以下の回答のいずれかがあなたの質問に答えた場合は、それを合格とマークしてください。 [ここ](http://stackoverflow.com/help/someone-answers)を参照してください。 –

答えて

2

さて、あなたがしていることは正しいです。しかし、Matrix2dクラスは、名前が2×2行列を示唆しているためです。だから、1上の行/ COLを増やすことはできません。

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

Matrix2dMatrix<double, 2, 2>へのtypedefである:時間あなたは、代わりに、スタック上のメモリ割り当てを回避し、住んでいるの実装を使用することができます。だから、それは2x2の行列です。あなたは最大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; 
    } 
} 
関連する問題