簡體   English   中英

在本征庫中的一個大矩陣中創建子矩陣

[英]creating sub-matrices inside a big one in Eigen Library

我想構造以下矩陣

              A(3x3)              B(3x3N) 
    F     = [|1 0 0|  |0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
(6x3+3N)     |0 1 0|  |0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
             |0 0 1|  |0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
             -------  -----------------------------------
             |0 0 0|  |0 0 0 1 0 0 0 0 0 0 0 0 ... 0 0 0|;
             |0 0 0|  |0 0 0 0 1 0 0 0 0 0 0 0 ... 0 0 0|;
             |0 0 0|  |0 0 0 0 0 1 0 0 0 0 0 0 ... 0 0 0|];
              C(3x3)              D(3x3N)

B & C始終為零。 A是一個單位矩陣。 D很棘手。 這些是基於索引指定的。 例如,如果索引為0 ,則D

                   |1 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
                   |0 1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
                   |0 0 1 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
                                D(3x3N)

如果索引為1D

                   |0 0 0 1 0 0 0 0 0 0 0 0 ... 0 0 0|;
                   |0 0 0 0 1 0 0 0 0 0 0 0 ... 0 0 0|;
                   |0 0 0 0 0 1 0 0 0 0 0 0 ... 0 0 0|;
                                D(3x3N)

如何在本征庫中完成此過程? 我知道如何在Eigen中創建矩陣,但不知道如何將它們構造為一個矩陣。

看一下Eigen中的高級初始化頁面。 我認為以下(未經測試的)代碼可以構建您想要的矩陣:

MatrixXd F(6, 3 + 3 * N);  // you need to specify the size before doing F << ...
F << MatrixXd::Identity(3, 3),   // matrix A
     MatrixXd::Zero(3, 3 * N),   // matrix B
     MatrixXd::Zero(3, 3 + 3 * index),   // matrix C plus left zero block in D
     MatrixXd::Identity(3, 3),   // indentity block in D
     MatrixXd::Zero(3, 3 * (N - index - 1));  // right zero block in D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM