Eigen与Matlab矩阵操作对照指南

5星 · 超过95%的资源 需积分: 20 18 下载量 131 浏览量 更新于2024-08-05 1 收藏 54KB PDF 举报
"该资源是Eigen库与Matlab软件之间常用矩阵操作指令的对照表,旨在帮助用户在两者之间快速转换。由Keir Mierle编写的这份文档详细列出了各种矩阵和向量操作的对应指令,对于熟悉Matlab但初次接触Eigen的用户尤其有帮助。" Eigen是一个强大的开源C++模板库,主要用于线性代数、矩阵和向量运算,广泛应用于科学计算和工程领域。而Matlab是另一种广泛使用的数值计算环境,以其简洁的矩阵操作语法著称。以下是一些关键的Eigen指令与Matlab指令的对比: 1. **矩阵定义**: - Eigen中,你可以使用`Matrix<double, Rows, Cols>`定义固定大小的矩阵,如`Matrix3d A`代表3x3的双精度矩阵。 - 动态大小的矩阵可以用`Matrix<double, Rows, Dynamic>`或`Matrix<double, Dynamic, Dynamic>`表示,例如`Matrix<double, 3, Dynamic> B`表示3行、可变列的矩阵。 - `MatrixXd C`代表完全动态大小的矩阵。 2. **数据类型**: - Eigen支持不同数据类型,如`Matrix3f P, Q, R`定义了3x3的单精度浮点矩阵,而`Vector3f x, y, z`是3维的单精度向量。 - `RowVector3f a, b, c`是1x3的单精度行向量。 3. **访问元素**: - 在Eigen中,索引是从0开始的,所以`x(0)`访问第一个元素,而在Matlab中是`x(1)`。 - 对应地,`C(0, 0)`和`C(1, 1)`分别在两个库中访问相同位置的元素。 4. **矩阵大小**: - `x.size()`返回向量的大小,等同于Matlab的`length(x)`。 - `C.rows()`和`C.cols()`分别获取矩阵的行数和列数,相当于Matlab的`size(C, 1)`和`size(C, 2)`。 5. **矩阵重塑**: - Eigen的`resize`函数用于改变矩阵大小,如`A.resize(4, 4)`。如果大小改变会导致数据丢失,且断言开启,会引发运行时错误。 - 如果仅改变动态列数(如`B.resize(3, 9)`)或大小不变(如`A.resize(3, 3)`),则不会出现问题。 6. **初始化和赋值**: - `A << 1, 2, 3, 4, 5, 6, 7, 8, 9`可以一次性初始化矩阵A,也可以链式赋值多组数据。 - `B << A, A, A`将矩阵A水平堆叠三次到B中。 这份对照表对于理解Eigen和Matlab之间的差异以及在两者之间切换时如何编写代码非常有用。通过熟悉这些基本操作,开发者能够更有效地利用Eigen的强大功能进行数值计算,同时也能更好地理解和转换已有的Matlab代码。