目录
定义
Eigen 中所有向量和矩阵都是Eigen::Matrix,它是一个模板类,它的前三个参数为:数据类型,行,列
Matrix<float, 2, 3> matrix_23; // 声明一个2*3的float矩阵
同时,Eigen 通过 typedef 提供了许多内置类型,不过底层仍是Eigen::Matrix。
例如,Vector3d 实质上是 Eigen::Matrix<double, 3, 1>,即三维向量;Matrix3d 实质上是 Eigen::Matrix<double, 3, 3>
类型名的最后一个字符为d表示双精度类型,换成f表示单精度类型,两种类型不能混用,必须显示转换
Vector3d v_3d; //声明一个3*1的double矩阵
Matrix<double, 3, 1> v_3d; //与上一行是等价的
Matrix3d matrix_3d; //声明一个3*3的double矩阵
Matrix<double, 3, 3> matrix_3d; //与上一行是等价的
如果不确定矩阵大小,可以使用动态大小的矩阵
Matrix<double, Dynamic, Dynamic> matrix_dynamic;
MatrixXd matrix_dynamic; //与上一行是等价的
定义矩阵
Matrix3d temp1 = MatrixXd::Identity(3, 3); //定义3*3的单位阵,或Matrix3d::Identity()
Matrix3d temp2 = MatrixXd::Zero(3, 3); //定义3*3的零矩阵,或Matrix3d::Zero()
Matrix3d temp3 = MatrixXd::Ones(3, 3); //定义3*3的全1矩阵,或Matrix3d::Ones()
Matrix3d temp4 = MatrixXd::Random(3, 3); //定义3*3的随机矩阵,或Matrix3d::Random();
Vector3d temp5 = VectorXd::Zero(3, 1); //定义3*1的零向量,或Vector3d::Zero()
Vector3d temp6 = VectorXd::Ones(3, 1); //定义3*1的全1向量,或Vector3d::Ones()
基本运算
转置、逆、行列式
MatrixXd R = MatrixXd::Identity(3, 3);
R << 1, 2, 3,
5, 6, 7,
9, 0, 0;
cout << "行数:" << R.rows() << endl;
cout << "列数:" << R.cols() << endl;
cout << "转置:" << endl