Eigen的使用,过程中和Matlab比较

参考 - http://eigen.tuxfamily.org/dox/AsciiQuickReference.txt
一个关于Eigen的快速参考

#include <Eigen/Dense>

Matrix<double, 3, 3> A;               // 固定大小的双精度矩阵,和Matrix3d一样。
Matrix<double, 3, Dynamic> B;         // 固定行数,列数为动态大小
Matrix<double, Dynamic, Dynamic> C;   // 行数和列数都是动态大小,和MatrixXd一样。
Matrix<double, 3, 3, RowMajor> E;     // 行优先的矩阵(默认是列优先)
Matrix3f P, Q, R;                     // 3x3 的浮点型矩阵
Vector3f x, y, z;                     // 3x1 的浮点型矩阵(列向量)
RowVector3f a, b, c;                  // 1x3 的浮点型矩阵(行向量)
VectorXd v;                           // 动态大小的双精度列向量
double s;                            

// 基本用法
// Eigen          // Matlab           // 注释
x.size()          // length(x)        // 向量的长度
C.rows()          // size(C,1)        // 矩阵的行数
C.cols()          // size(C,2)        // 矩阵的列数
x(i)              // x(i+1)           // 访问向量元素(Matlab的下标从1开始计数)
C(i,j)            // C(i+1,j+1)       // 访问矩阵元素

A.resize(4, 4);   // 如果开启了断言,将会出现运行时错误。
B.resize(4, 9);   // 如果开启了断言,将会出现运行时错误。
A.resize(3, 3);   // 运行正常,矩阵的大小没有变化及。(A的行数和列数都是固定大小的)
B.resize(3, 9);   // 运行正常,仅动态列数发生了变化。(B的列数是动态变化的)
                  
A << 1, 2, 3,     // 初始化A。元素也可以是矩阵,先按列堆叠,再按行堆叠。
     4, 5, 6,     
     7, 8, 9;     
B << A, A, A;     // B 是3个A水平排列
A.fill(10);       // 将A的所有元素填充为10

// Eigen                                    // Matlab                       注释
MatrixXd::Identity(rows,cols)               // eye(rows,cols)               //单位矩阵
C.setIdentity(rows,cols)                    // C = eye(rows,cols)           //单位矩阵
MatrixXd::Zero(rows,cols)                   // zeros(rows,cols)             //全零矩阵
C.setZero(rows,cols)                        // C = zeros(rows,cols)         //全零矩阵
MatrixXd::Ones(rows,cols)                   // ones(rows,cols)              //全一矩阵
C.setOnes(rows,cols)                        // C = ones(rows,cols)          //全一矩阵
MatrixXd::Random(rows,cols)                 // rand(rows,cols)*2-1          //MatrixXd::Random 返回范围为(-1, 1)的均匀分布的随机数
C.setRandom(rows,cols)                      // C = rand(rows,cols)*2-1      //返回范围为(-1, 1)的均匀分布的随机数
VectorXd::LinSpaced(size,low,high)          // linspace(low,high,size)'     //返回size个等差数列,第一个数为low,最后一个数为high
v.setLinSpaced(size,low,high)               // v = linspace(low,high,size)' //返回size个等差数列,第一个数为low,最后一个数为high
VectorXi::LinSpaced(((hi-low)/step)+1,      // low:step:hi                  //以step为步
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值