美文网首页
2021-01-09利用eigen矩阵基本操作

2021-01-09利用eigen矩阵基本操作

作者: 斯派罗 | 来源:发表于2021-01-09 20:05 被阅读0次

    头文件

    #include <eigen3/Eigen/core>

    #include <eigen3/Eigen/dense>

    #include <eigen3/Eigen/Geometry>

    //如果想要省略eigen3,需要在CMakeLists.txt文件当中添加:

    include_directories("/usr/include/eigen3")

    矩阵定义

    Eigen::Matrix matrix_name = Eigen::Matrix <double, 3, 4> //知道矩阵的大小3*4大小的矩阵

    Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> matrix_notknow_size;//不知道矩阵的大小 ,这样定义

    Eigen::MatrixXd matrix_nSize; //更简单地定义矩阵,不知道矩阵的大小。

    矩阵数据格式的变换

    matrix_nSize.cast<double>()  //把矩阵数据格式转换成double格式,因为矩阵只能相同格式地相乘。

    基本的矩阵操作:转置、求逆、求迹、求和、数乘、行列式

    matrix_nSize.transpose() //转置

    matrix_nSize.sum() //矩阵各元素求和

    matrix_nSize.trace() //求迹

    matrix_nSize.inverse() //求逆

    10 * matrix_nSize //矩阵数乘,数乘是可以不同类型来做的.

    matrix_nSize.determinant() //求行列式

    矩阵特征值求解

    matrix_real = Eigen::Matrix3d::Random();

    matrix_realSymentry = matrix_real.transpose() * matrix_real;//这是一个实对称矩阵

    Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> eigen_solver (matrix_realSymentry) //特征求解器

    cout << "Eigen values = " << eigen_solver.eigenvalues() <<endl; //输出特征值

    cout << "Eigen vectors = " << eigen_solver.eigenvectors() << endl; //输出特征向量

    矩阵QR分解求方程的解

    x = matrix_NN.colPivHouseholderQr().solve(v_Nd);

    /********************************************************

    旋转矩阵、旋转向量、四元数的使用

    ********************************************************/

    旋转向量的定义

    Eigen::AngleaAxisd rotation_vector (M_PI/4, Eigen::Matrix3d::Identity())

    rotation_matrix = rotation_vector.toRoationMatrix();//把旋转向量转换成旋转矩阵

    rotation_matrix = rotation_vector.Matrix();// 另外一种旋转矩阵的表达形式

    欧拉角

    Eigen::vector3d euler_angles = rotation_matrix.eulerAngles(2, 1, 0);// z y x 顺序, yaw, pitch, row;

    变换矩阵

    Eigen::Isometry3d T = Eigen::Isometry3d::Identity();

    T.rotate(rotation_vector);

    T.pretranslate(Eigen::Vector3d(1, 3, 4));

    cout <<"Transform matrix is \n" << T.matrix() << endl;

    cout <<"Rotation vector is \n" << rotation_vector.axis() << endl;

    四元数

    Eigen::Quaterniond q = Eigen::quaterniond (rotation _vector);

    cout << " quaterniond = \n" << q.coeffs() << endl;

    v_rotated = q *  v;

    参考书目《视觉SLAM十四讲:从理论到实践》

    相关文章

      网友评论

          本文标题:2021-01-09利用eigen矩阵基本操作

          本文链接:https://www.haomeiwen.com/subject/hdwcaktx.html