Eigen使用记录

  • Core #include<Eigen/Core>,包含Matrix和Array类,基础的线性代数运算和数组操作。

定义矩阵

typedef Eigen::Matrix<float,2,2> Base; 定义一个两行两列的矩阵类型。后续要使用的话,可以使用 Base A,B,C;来实例化。

也可以直接定义一个矩阵

Eigen::Matrix<float,2,2> A;

还可以将矩阵定义为动态矩阵,矩阵大小在定义的时候不用确定。

Eigen::Matrix<float,Dynamic,Dynamic> B;

矩阵赋值

直接一个一个赋值。

A<<0,0,0,0;

全部元素赋为一个值0。

A.fill(0);

获取矩阵的某个位置的元素,将其赋值为1。

A(0,0)=1;

可以使用循环来初始化矩阵。

获取矩阵的转置

A.transpose();

获取矩阵的行数和列数

A.rows();   A.cols();

获取第i行和第i列

A.row(i);   A.col(i);

获取矩阵的最小值和最大值

A.minCoeff(); A.maxCoeff();

获取某一行的最小值

A.row(i).minCoeff();

  • Eigenvalues #include<Eigen/Eigenvalues>,包含特征值,特征向量分解。

使用Eigen来进行矩阵分解

Matrix3d A;

A << 1, 2, 3, 4, 5, 6, 7, 8, 9;

EigenSolver<Matrix3d> eigensolver(A);

Matrix3d D = eigensolver.pseudoEigenvalueMatrix();获取矩阵A的特征值矩阵,是一个特征值组成对角阵,除了对角线其余都是0

Matrix3d V = eigensolver.pseudoEigenvectors();获取特征向量的矩阵

  • SVD #include<Eigen/SVD>,包含SVD分解。

Eigen::JacobiSVD<Eigen::Matrix3d> svd(A, Eigen::ComputeThinU | Eigen::ComputeThinV);对A进行矩阵分解,并且计算U和V

svd.matrixV();获取右奇异值

svd.matrixU();获取左奇异值

svd.singularValues();获取特征值

---------------------------------------------------------------------------

参考:https://www.jianshu.com/p/931dff3b1b21

          https://blog.csdn.net/piaoxuezhong/article/details/79110421

发布了58 篇原创文章 · 获赞 64 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ThorKing01/article/details/97636454