2017-03-10 15 views
0

として小さな行列とゼロ行列は「対角」は、別の行列と休息である9x9の行列を作成することは可能です。このように、ゼロ以下のとおりです。固有:「対角線」

5 5 5 0 0 0 0 0 0 
5 5 5 0 0 0 0 0 0 
5 5 5 0 0 0 0 0 0 
0 0 0 5 5 5 0 0 0 
0 0 0 5 5 5 0 0 0 
0 0 0 5 5 5 0 0 0 
0 0 0 0 0 0 5 5 5 
0 0 0 0 0 0 5 5 5 
0 0 0 0 0 0 5 5 5 

小さいから3x3の行列が繰り返さ:

5 5 5 
5 5 5 
5 5 5 

私はReplicate機能の承知していますが、それがマトリクス状にどこでもそれを繰り返し、ゼロを維持しません。私は何を達成するための組み込み方法がありますか?

答えて

1

.block<3,3>(0,0)3x3ブロックであるブロックを使用する方法の1つは、0,0から開始します。 (注:エラーとしてあなたのIDEのかもしれないフラグこのラインをしかし、それはコンパイルして実行します)

for (int x=0, x<3, x++){ 
    zero_matrix.block<3,3>(x*3,x*3) = five_matrix; 
} 
0

あなたはそのための(サポートされていない)クロネッカー積モジュールを使用することができます

#include <unsupported/Eigen/KroneckerProduct> 
int main() 
{ 
    Eigen::MatrixXd A = Eigen::kroneckerProduct(Eigen::Matrix3d::Identity(), Eigen::Matrix3d::Constant(5)); 
    std::cout << A << '\n'; 
}