参考 - 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为步