在一个大矩阵中创建子矩阵
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)
如果索引为1
,则D
为
|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 Library中完成这个过程?我知道如何在本征中创建矩阵但我不知道如何将它们构建成一个矩阵。
查看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
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何创建一个空的全局类并在启动时实例化它
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 在c++中为double类型的数组创建一个unique_ptr
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 创建一个包含 c++ 默认值的环境文件
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };