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();获取特征值
---------------------------------------------------------------------------